Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitefc2598

Browse files
committed
Add types to config.py GitConfigParser .__init__() .aquire_lock()
1 parente21d96a commitefc2598

File tree

2 files changed

+27
-18
lines changed

2 files changed

+27
-18
lines changed

‎git/config.py

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,16 @@
2929

3030
importconfigparserascp
3131

32+
frompathlibimportPath
33+
3234
# typing-------------------------------------------------------
3335

34-
fromtypingimportAny,Callable,List,Mapping,TYPE_CHECKING,Tuple,Union,overload
36+
fromtypingimportAny,Callable,IO,List,Dict,Sequence,TYPE_CHECKING,Tuple,Union,cast,overload
3537

36-
fromgit.typesimportLiteral,Lit_config_levels,TBD
38+
fromgit.typesimportLiteral,Lit_config_levels,PathLike,TBD
3739

3840
ifTYPE_CHECKING:
39-
pass
41+
fromgit.repo.baseimportRepo
4042

4143
# -------------------------------------------------------------
4244

@@ -59,7 +61,7 @@
5961
classMetaParserBuilder(abc.ABCMeta):
6062

6163
"""Utlity class wrapping base-class methods into decorators that assure read-only properties"""
62-
def__new__(cls,name:str,bases:TBD,clsdict:Mapping[str,Any])->TBD:
64+
def__new__(cls,name:str,bases:TBD,clsdict:Dict[str,Any])->TBD:
6365
"""
6466
Equip all base-class methods with a needs_values decorator, and all non-const methods
6567
with a set_dirty_and_flush_changes decorator in addition to that."""
@@ -124,7 +126,7 @@ class SectionConstraint(object):
124126
_valid_attrs_= ("get_value","set_value","get","set","getint","getfloat","getboolean","has_option",
125127
"remove_section","remove_option","options")
126128

127-
def__init__(self,config:cp.ConfigParser,section:str)->None:
129+
def__init__(self,config:'GitConfigParser',section:str)->None:
128130
self._config=config
129131
self._section_name=section
130132

@@ -145,7 +147,7 @@ def _call_config(self, method: str, *args: Any, **kwargs: Any) -> Any:
145147
returngetattr(self._config,method)(self._section_name,*args,**kwargs)
146148

147149
@property
148-
defconfig(self)->cp.ConfigParser:
150+
defconfig(self)->'GitConfigParser':
149151
"""return: Configparser instance we constrain"""
150152
returnself._config
151153

@@ -204,7 +206,7 @@ def get(self, key: str, default: Union[Any, None] = None) -> Union[Any, None]:
204206
defgetall(self,key:str)->Any:
205207
returnsuper(_OMD,self).__getitem__(key)
206208

207-
defitems(self)->List[Tuple[str,Any]]:
209+
defitems(self)->List[Tuple[str,Any]]:# type: ignore ## mypy doesn't like overwriting supertype signitures
208210
"""List of (key, last value for key)."""
209211
return [(k,self[k])forkinself]
210212

@@ -271,7 +273,10 @@ class GitConfigParser(with_metaclass(MetaParserBuilder, cp.RawConfigParser, obje
271273
# list of RawConfigParser methods able to change the instance
272274
_mutating_methods_= ("add_section","remove_section","remove_option","set")
273275

274-
def__init__(self,file_or_files=None,read_only=True,merge_includes=True,config_level=None,repo=None):
276+
def__init__(self,file_or_files:Union[None,PathLike,IO,Sequence[Union[PathLike,IO]]]=None,
277+
read_only:bool=True,merge_includes:bool=True,
278+
config_level:Union[Lit_config_levels,None]=None,
279+
repo:Union['Repo',None]=None)->None:
275280
"""Initialize a configuration reader to read the given file_or_files and to
276281
possibly allow changes to it by setting read_only False
277282
@@ -297,11 +302,13 @@ def __init__(self, file_or_files=None, read_only=True, merge_includes=True, conf
297302
self._proxies=self._dict()
298303

299304
iffile_or_filesisnotNone:
300-
self._file_or_files=file_or_files
305+
self._file_or_files=file_or_files# type: Union[PathLike, IO, Sequence[Union[PathLike, IO]]]
301306
else:
302307
ifconfig_levelisNone:
303308
ifread_only:
304-
self._file_or_files= [get_config_path(f)forfinCONFIG_LEVELSiff!='repository']
309+
self._file_or_files= [get_config_path(f)# type: ignore
310+
forfinCONFIG_LEVELS# Can type f properly when 3.5 dropped
311+
iff!='repository']
305312
else:
306313
raiseValueError("No configuration level or configuration files specified")
307314
else:
@@ -312,20 +319,21 @@ def __init__(self, file_or_files=None, read_only=True, merge_includes=True, conf
312319
self._is_initialized=False
313320
self._merge_includes=merge_includes
314321
self._repo=repo
315-
self._lock=None
322+
self._lock=None# type: Union['LockFile', None]
316323
self._acquire_lock()
317324

318-
def_acquire_lock(self):
325+
def_acquire_lock(self)->None:
319326
ifnotself._read_only:
320327
ifnotself._lock:
321-
ifisinstance(self._file_or_files, (tuple,list)):
328+
ifisinstance(self._file_or_files, (tuple,list,Sequence)):
322329
raiseValueError(
323330
"Write-ConfigParsers can operate on a single file only, multiple files have been passed")
324331
# END single file check
325332

326-
file_or_files=self._file_or_files
327-
ifnotisinstance(self._file_or_files,str):
328-
file_or_files=self._file_or_files.name
333+
ifnotisinstance(self._file_or_files, (str,Path)):# cannot narrow by os._pathlike until 3.5 dropped
334+
file_or_files=cast(IO,self._file_or_files).name# type: PathLike
335+
else:
336+
file_or_files=self._file_or_files
329337
# END get filename from handle/stream
330338
# initialize lock base - we want to write
331339
self._lock=self.t_lock(file_or_files)
@@ -366,7 +374,8 @@ def release(self) -> None:
366374
# Usually when shutting down the interpreter, don'y know how to fix this
367375
pass
368376
finally:
369-
self._lock._release_lock()
377+
ifself._lockisnotNone:
378+
self._lock._release_lock()
370379

371380
defoptionxform(self,optionstr):
372381
"""Do not transform options in any way when writing"""

‎mypy.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
[mypy]
33

44
# TODO: enable when we've fully annotated everything
5-
disallow_untyped_defs = True
5+
#disallow_untyped_defs = True
66

77
# TODO: remove when 'gitdb' is fully annotated
88
[mypy-gitdb.*]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp