11from collections import UserList
22from datetime import datetime
33from 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+
58from typing_extensions import SupportsIndex
69
710from .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
1312from .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
2421
2522SEMICOLON = ord (b";" )
2623EQUALS = ord (b"=" )
3027
3128
3229class Item (StructuredFieldValue ):
33- def __init__ (self , value : BareItemType = None ) -> None :
30+ def __init__ (self , value : Optional [ BareItemType ] = None ) -> None :
3431 StructuredFieldValue .__init__ (self )
3532 self .value = value
3633 self .params = Parameters ()
@@ -45,6 +42,8 @@ def parse_content(self, data: bytes) -> int:
4542 return bytes_consumed
4643
4744 def __str__ (self ) -> str :
45+ if self .value is None :
46+ return "Item(None)"
4847 return f"{ ser_bare_item (self .value )} { str (self .params )} "
4948
5049 def __eq__ (self , other : Any ) -> bool :
@@ -53,6 +52,7 @@ def __eq__(self, other: Any) -> bool:
5352 return bool (self .value == other )
5453
5554 def to_json (self ) -> JsonItemType :
55+ assert self .value is not None
5656 value = value_to_json (self .value )
5757 return (value , self .params .to_json ())
5858
@@ -104,8 +104,10 @@ def from_json(self, json_data: JsonParamType) -> None:
104104
105105
106106class 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 ])
109111 self .params = Parameters ()
110112
111113 def parse (self , data : bytes ) -> int :
0 commit comments