2828from http .client import IncompleteRead
2929from io import StringIO
3030from pathlib import Path
31- from typing import Optional , Dict , Union , List , Iterable
31+ from typing import TYPE_CHECKING , Any , Optional , Dict , Union , List , Iterable , Tuple , overload
3232from urllib .parse import parse_qs , urlsplit , urlunsplit , urlparse , urlunparse , quote , urlencode , unquote
3333from urllib .error import HTTPError
3434from xml .etree import ElementTree as ET
@@ -1335,7 +1335,7 @@ def show_package_trigger_reason(apiurl: str, prj: str, pac: str, repo: str, arch
13351335 raise
13361336
13371337
1338- def show_package_meta (apiurl : str , prj : str , pac : str , meta = False , blame = None ):
1338+ def show_package_meta (apiurl : str , prj : str , pac : str , meta : bool = False , blame = None ) -> List [ bytes ] :
13391339 query : Dict [str , Union [str , int ]] = {}
13401340 if meta :
13411341 query ['meta' ] = 1
@@ -1394,7 +1394,7 @@ def show_scmsync(apiurl, prj, pac=None):
13941394 return project_obj .scmsync
13951395
13961396
1397- def show_devel_project (apiurl , prj , pac ) :
1397+ def show_devel_project (apiurl : str , prj : str , pac : str ) -> Tuple [ Optional [ str ], Optional [ str ]] :
13981398 from . import obs_api
13991399
14001400 package_obj = obs_api .Package .from_api (apiurl , prj , pac )
@@ -1521,7 +1521,7 @@ def is_force_supported(self):
15211521 def __call__ (self , ** kwargs ):
15221522 return self ._delegate (** kwargs )
15231523
1524- def __init__ (self , url , input , change_is_required = False , file_ext = '.xml' , method = None ):
1524+ def __init__ (self , url , input : Union [ List [ str ], str , bytes , List [ bytes ]] , change_is_required = False , file_ext = '.xml' , method = None ):
15251525 if isinstance (url , self ._URLFactory ):
15261526 self ._url_factory = url
15271527 else :
@@ -1608,8 +1608,20 @@ def discard(self):
16081608 os .unlink (self .filename )
16091609
16101610
1611+ if TYPE_CHECKING :
1612+ from typing import Literal , TypedDict
1613+
1614+ MetaType = Literal ['prj' , 'pkg' , 'attribute' , 'prjconf' , 'user' , 'group' , 'pattern' ]
1615+
1616+ class _MetaType (TypedDict ):
1617+ path : str
1618+ template : str
1619+ file_ext : str
1620+
1621+
16111622# different types of metadata
1612- metatypes = {'prj' : {'path' : 'source/%s/_meta' ,
1623+ metatypes : "Dict[MetaType, _MetaType]" = {
1624+ 'prj' : {'path' : 'source/%s/_meta' ,
16131625 'template' : new_project_templ ,
16141626 'file_ext' : '.xml'
16151627 },
@@ -1640,7 +1652,7 @@ def discard(self):
16401652 }
16411653
16421654
1643- def meta_exists (metatype : str , path_args = None , template_args = None , create_new = True , apiurl = None ):
1655+ def meta_exists (metatype : "MetaType" , path_args = None , template_args = None , create_new = True , apiurl = None ):
16441656
16451657 global metatypes
16461658
@@ -1661,7 +1673,7 @@ def meta_exists(metatype: str, path_args=None, template_args=None, create_new=Tr
16611673
16621674
16631675def make_meta_url (
1664- metatype : str ,
1676+ metatype : "MetaType" ,
16651677 path_args = None ,
16661678 apiurl : Optional [str ] = None ,
16671679 force = False ,
@@ -1704,7 +1716,7 @@ def parse_meta_to_string(data: Union[bytes, list, Iterable]) -> str:
17041716
17051717
17061718def edit_meta (
1707- metatype ,
1719+ metatype : "MetaType" ,
17081720 path_args = None ,
17091721 data : Optional [List [str ]] = None ,
17101722 template_args = None ,
@@ -3684,6 +3696,7 @@ def attribute_branch_pkg(
36843696 return r
36853697
36863698
3699+ @overload
36873700def branch_pkg (
36883701 apiurl : str ,
36893702 src_project : str ,
@@ -3705,7 +3718,54 @@ def branch_pkg(
37053718 maintenance = False ,
37063719 newinstance = False ,
37073720 disable_build = False ,
3708- ):
3721+ ) -> Tuple [False , Optional [str ], Optional [str ], Optional [str ], Optional [str ]]: ...
3722+
3723+ @overload
3724+ def branch_pkg (
3725+ apiurl : str ,
3726+ src_project : str ,
3727+ src_package : str ,
3728+ nodevelproject = False ,
3729+ rev = None ,
3730+ linkrev = None ,
3731+ target_project : Optional [str ] = None ,
3732+ target_package = None ,
3733+ return_existing = True ,
3734+ msg = "" ,
3735+ force = False ,
3736+ noaccess = False ,
3737+ add_repositories = False ,
3738+ add_repositories_block = None ,
3739+ add_repositories_rebuild = None ,
3740+ extend_package_names = False ,
3741+ missingok = False ,
3742+ maintenance = False ,
3743+ newinstance = False ,
3744+ disable_build = False ,
3745+ ) -> Union [Tuple [True , str , str , None , None ], Tuple [False , Optional [str ], Optional [str ], Optional [str ], Optional [str ]]]: ...
3746+
3747+ def branch_pkg (
3748+ apiurl : str ,
3749+ src_project : str ,
3750+ src_package : str ,
3751+ nodevelproject = False ,
3752+ rev = None ,
3753+ linkrev = None ,
3754+ target_project : Optional [str ] = None ,
3755+ target_package = None ,
3756+ return_existing = False ,
3757+ msg = "" ,
3758+ force = False ,
3759+ noaccess = False ,
3760+ add_repositories = False ,
3761+ add_repositories_block = None ,
3762+ add_repositories_rebuild = None ,
3763+ extend_package_names = False ,
3764+ missingok = False ,
3765+ maintenance = False ,
3766+ newinstance = False ,
3767+ disable_build = False ,
3768+ ) -> Union [Tuple [True , str , str , None , None ], Tuple [False , Optional [str ], Optional [str ], Optional [str ], Optional [str ]]]:
37093769 """
37103770 Branch a package (via API call)
37113771 """
0 commit comments