1
1
from collections import OrderedDict
2
2
from collections .abc import Callable
3
3
from itertools import islice
4
- from typing import Union
4
+ from typing import TYPE_CHECKING , Any , Union
5
5
6
6
from django .core .exceptions import ImproperlyConfigured
7
7
from django .urls import reverse
18
18
computed_values ,
19
19
)
20
20
21
+ if TYPE_CHECKING :
22
+ from django .db .models import QuerySet
23
+ from django .utils .safestring import SafeString
24
+
25
+ from ..tables import Table
26
+
21
27
22
28
class Library :
23
29
"""A collection of columns."""
@@ -325,14 +331,12 @@ def default(self):
325
331
return self ._default () if callable (self ._default ) else self ._default
326
332
327
333
@property
328
- def header (self ):
334
+ def header (self ) -> Union [ str , None ] :
329
335
"""
330
336
The value used for the column heading (e.g. inside the ``<th>`` tag).
331
337
332
338
By default this returns `~.Column.verbose_name`.
333
339
334
- :returns: `unicode` or `None`
335
-
336
340
.. note::
337
341
338
342
This property typically is not accessed directly when a table is
@@ -344,7 +348,7 @@ def header(self):
344
348
"""
345
349
return self .verbose_name
346
350
347
- def footer (self , bound_column , table ) :
351
+ def footer (self , bound_column : "BoundColumn" , table : "Table" ) -> Union [ str , None ] :
348
352
"""Return the content of the footer, if specified."""
349
353
footer_kwargs = {"column" : self , "bound_column" : bound_column , "table" : table }
350
354
@@ -359,7 +363,7 @@ def footer(self, bound_column, table):
359
363
360
364
return ""
361
365
362
- def render (self , value ) :
366
+ def render (self , value : Any ) -> Any :
363
367
"""
364
368
Return the content for a specific cell.
365
369
@@ -373,34 +377,29 @@ def render(self, value):
373
377
"""
374
378
return value
375
379
376
- def value (self , ** kwargs ):
380
+ def value (self , ** kwargs ) -> Any :
377
381
"""
378
382
Return the content for a specific cell for exports.
379
383
380
- Similar to `.render` but without any html content.
384
+ Similar to `.render` but without any HTML content.
381
385
This can be used to get the data in the formatted as it is presented but in a
382
- form that could be added to a csv file.
386
+ form that could be added to a CSV file.
383
387
384
388
The default implementation just calls the `render` function but any
385
- subclasses where `render` returns html content should override this
389
+ subclasses where `render` returns HTML content should override this
386
390
method.
387
391
388
392
See `LinkColumn` for an example.
389
393
"""
390
- value = call_with_appropriate (self .render , kwargs )
394
+ return call_with_appropriate (self .render , kwargs )
391
395
392
- return value
393
-
394
- def order (self , queryset , is_descending ):
396
+ def order (self , queryset : "QuerySet" , is_descending : bool ) -> "tuple[QuerySet, bool]" :
395
397
"""
396
398
Order the QuerySet of the table.
397
399
398
400
This method can be overridden by :ref:`table.order_FOO` methods on the
399
401
table or by subclassing `.Column`; but only overrides if second element
400
402
in return tuple is True.
401
-
402
- returns:
403
- Tuple (QuerySet, boolean)
404
403
"""
405
404
return (queryset , False )
406
405
@@ -446,7 +445,7 @@ class SimpleTable(tables.Table):
446
445
447
446
"""
448
447
449
- def __init__ (self , table , column , name ):
448
+ def __init__ (self , table : "Table" , column : Column , name : str ):
450
449
self ._table = table
451
450
self .column = column
452
451
self .name = name
@@ -458,11 +457,11 @@ def __init__(self, table, column, name):
458
457
459
458
self .current_value = None
460
459
461
- def __str__ (self ):
460
+ def __str__ (self ) -> str :
462
461
return str (self .header )
463
462
464
463
@property
465
- def attrs (self ):
464
+ def attrs (self ) -> dict :
466
465
"""
467
466
Proxy to `.Column.attrs` but injects some values of our own.
468
467
@@ -642,18 +641,18 @@ def order_by_alias(self):
642
641
return order_by
643
642
644
643
@property
645
- def is_ordered (self ):
644
+ def is_ordered (self ) -> bool :
646
645
return self .name in (self ._table .order_by or ())
647
646
648
647
@property
649
- def orderable (self ):
648
+ def orderable (self ) -> bool :
650
649
"""Return whether this column supports ordering."""
651
650
if self .column .orderable is not None :
652
651
return self .column .orderable
653
652
return self ._table .orderable
654
653
655
654
@property
656
- def verbose_name (self ):
655
+ def verbose_name (self ) -> Union [ str , SafeString ] :
657
656
"""
658
657
Return the verbose name for this column.
659
658
0 commit comments