|
40 | 40 | fromioimportBytesIO |
41 | 41 |
|
42 | 42 | T_ConfigParser=TypeVar('T_ConfigParser',bound='GitConfigParser') |
| 43 | +T_OMD_value=TypeVar('T_OMD_value',str,bytes,int,float,bool) |
43 | 44 |
|
44 | 45 | ifsys.version_info[:3]< (3,7,2): |
45 | 46 | # typing.Ordereddict not added until py 3.7.2 |
46 | 47 | fromcollectionsimportOrderedDict# type: ignore # until 3.6 dropped |
47 | 48 | OrderedDict_OMD=OrderedDict# type: ignore # until 3.6 dropped |
48 | 49 | else: |
49 | 50 | fromtypingimportOrderedDict# type: ignore # until 3.6 dropped |
50 | | -OrderedDict_OMD=OrderedDict[str,List[_T]]# type: ignore[assignment, misc] |
| 51 | +OrderedDict_OMD=OrderedDict[str,List[T_OMD_value]]# type: ignore[assignment, misc] |
51 | 52 |
|
52 | 53 | # ------------------------------------------------------------- |
53 | 54 |
|
@@ -97,23 +98,23 @@ def __new__(cls, name: str, bases: TBD, clsdict: Dict[str, Any]) -> TBD: |
97 | 98 | returnnew_type |
98 | 99 |
|
99 | 100 |
|
100 | | -defneeds_values(func:Callable)->Callable: |
| 101 | +defneeds_values(func:Callable[...,_T])->Callable[...,_T]: |
101 | 102 | """Returns method assuring we read values (on demand) before we try to access them""" |
102 | 103 |
|
103 | 104 | @wraps(func) |
104 | | -defassure_data_present(self,*args:Any,**kwargs:Any)->Any: |
| 105 | +defassure_data_present(self:GitConfigParser,*args:Any,**kwargs:Any)->_T: |
105 | 106 | self.read() |
106 | 107 | returnfunc(self,*args,**kwargs) |
107 | 108 | # END wrapper method |
108 | 109 | returnassure_data_present |
109 | 110 |
|
110 | 111 |
|
111 | | -defset_dirty_and_flush_changes(non_const_func:Callable)->Callable: |
| 112 | +defset_dirty_and_flush_changes(non_const_func:Callable[...,_T])->Callable[...,_T]: |
112 | 113 | """Return method that checks whether given non constant function may be called. |
113 | 114 | If so, the instance will be set dirty. |
114 | 115 | Additionally, we flush the changes right to disk""" |
115 | 116 |
|
116 | | -defflush_changes(self,*args:Any,**kwargs:Any)->Any: |
| 117 | +defflush_changes(self:GitConfigParser,*args:Any,**kwargs:Any)->_T: |
117 | 118 | rval=non_const_func(self,*args,**kwargs) |
118 | 119 | self._dirty=True |
119 | 120 | self.write() |
@@ -356,7 +357,7 @@ def __enter__(self) -> 'GitConfigParser': |
356 | 357 | self._acquire_lock() |
357 | 358 | returnself |
358 | 359 |
|
359 | | -def__exit__(self,exception_type,exception_value,traceback)->None: |
| 360 | +def__exit__(self,*args:Any)->None: |
360 | 361 | self.release() |
361 | 362 |
|
362 | 363 | defrelease(self)->None: |
@@ -613,12 +614,15 @@ def read(self) -> None: # type: ignore[override] |
613 | 614 | def_write(self,fp:IO)->None: |
614 | 615 | """Write an .ini-format representation of the configuration state in |
615 | 616 | git compatible format""" |
616 | | -defwrite_section(name,section_dict): |
| 617 | +defwrite_section(name:str,section_dict:_OMD)->None: |
617 | 618 | fp.write(("[%s]\n"%name).encode(defenc)) |
| 619 | + |
| 620 | +values:Sequence[Union[str,bytes,int,float,bool]] |
618 | 621 | for (key,values)insection_dict.items_all(): |
619 | 622 | ifkey=="__name__": |
620 | 623 | continue |
621 | 624 |
|
| 625 | +v:Union[str,bytes,int,float,bool] |
622 | 626 | forvinvalues: |
623 | 627 | fp.write(("\t%s = %s\n"% (key,self._value_to_string(v).replace('\n','\n\t'))).encode(defenc)) |
624 | 628 | # END if key is not __name__ |
|