1
1
from collections import UserList
2
2
from datetime import datetime
3
3
from decimal import Decimal
4
- from typing import List as _List , Tuple , Union , Any , Iterable , cast
4
+ from typing import Any , Iterable
5
+ from typing import List as _List
6
+ from typing import Optional , Tuple , Union , cast
7
+
5
8
from typing_extensions import SupportsIndex
6
9
7
10
from .boolean import parse_boolean , ser_boolean
8
- from .byteseq import parse_byteseq , ser_byteseq , BYTE_DELIMIT
9
- from .decimal import ser_decimal
10
- from .integer import parse_number , ser_integer , NUMBER_START_CHARS
11
- from .string import parse_string , ser_string , DQUOTE
12
- from .token import parse_token , ser_token , Token , TOKEN_START_CHARS
11
+ from .byteseq import BYTE_DELIMIT , parse_byteseq , ser_byteseq
13
12
from .date import parse_date , ser_date
14
- from .display_string import parse_display_string , ser_display_string , DisplayString
15
- from .types import BareItemType , JsonItemType , JsonParamType , JsonInnerListType
16
- from .util import (
17
- StructuredFieldValue ,
18
- discard_ows ,
19
- parse_key ,
20
- ser_key ,
21
- )
22
- from .util_json import value_to_json , value_from_json
23
-
13
+ from .decimal import ser_decimal
14
+ from .display_string import DisplayString , parse_display_string , ser_display_string
15
+ from .integer import NUMBER_START_CHARS , parse_number , ser_integer
16
+ from .string import DQUOTE , parse_string , ser_string
17
+ from .token import TOKEN_START_CHARS , Token , parse_token , ser_token
18
+ from .types import BareItemType , JsonInnerListType , JsonItemType , JsonParamType
19
+ from .util import StructuredFieldValue , discard_ows , parse_key , ser_key
20
+ from .util_json import value_from_json , value_to_json
24
21
25
22
SEMICOLON = ord (b";" )
26
23
EQUALS = ord (b"=" )
30
27
31
28
32
29
class Item (StructuredFieldValue ):
33
- def __init__ (self , value : BareItemType = None ) -> None :
30
+ def __init__ (self , value : Optional [ BareItemType ] = None ) -> None :
34
31
StructuredFieldValue .__init__ (self )
35
32
self .value = value
36
33
self .params = Parameters ()
@@ -45,6 +42,8 @@ def parse_content(self, data: bytes) -> int:
45
42
return bytes_consumed
46
43
47
44
def __str__ (self ) -> str :
45
+ if self .value is None :
46
+ return "Item(None)"
48
47
return f"{ ser_bare_item (self .value )} { str (self .params )} "
49
48
50
49
def __eq__ (self , other : Any ) -> bool :
@@ -53,6 +52,7 @@ def __eq__(self, other: Any) -> bool:
53
52
return bool (self .value == other )
54
53
55
54
def to_json (self ) -> JsonItemType :
55
+ assert self .value is not None
56
56
value = value_to_json (self .value )
57
57
return (value , self .params .to_json ())
58
58
@@ -104,8 +104,10 @@ def from_json(self, json_data: JsonParamType) -> None:
104
104
105
105
106
106
class InnerList (UserList ):
107
- def __init__ (self , values : _List [Union [Item , SingleItemType ]] = None ) -> None :
108
- UserList .__init__ (self , [itemise (v ) for v in values or []])
107
+ def __init__ (self , values : Optional [_List [Union [Item , SingleItemType ]]] = None ) -> None :
108
+ if values is None :
109
+ values = []
110
+ UserList .__init__ (self , [itemise (v ) for v in values ])
109
111
self .params = Parameters ()
110
112
111
113
def parse (self , data : bytes ) -> int :
0 commit comments