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 Optional , Dict , Union , List , Iterable , Tuple , overload
32+ from typing_extensions import Literal , TypedDict
3233from urllib .parse import parse_qs , urlsplit , urlunsplit , urlparse , urlunparse , quote , urlencode , unquote
3334from urllib .error import HTTPError
3435from xml .etree import ElementTree as ET
@@ -1335,7 +1336,7 @@ def show_package_trigger_reason(apiurl: str, prj: str, pac: str, repo: str, arch
13351336 raise
13361337
13371338
1338- def show_package_meta (apiurl : str , prj : str , pac : str , meta = False , blame = None ):
1339+ def show_package_meta (apiurl : str , prj : str , pac : str , meta : bool = False , blame = None ) -> List [ bytes ] :
13391340 query : Dict [str , Union [str , int ]] = {}
13401341 if meta :
13411342 query ['meta' ] = 1
@@ -1394,7 +1395,7 @@ def show_scmsync(apiurl, prj, pac=None):
13941395 return project_obj .scmsync
13951396
13961397
1397- def show_devel_project (apiurl , prj , pac ) :
1398+ def show_devel_project (apiurl : str , prj : str , pac : str ) -> Tuple [ Optional [ str ], Optional [ str ]] :
13981399 from . import obs_api
13991400
14001401 package_obj = obs_api .Package .from_api (apiurl , prj , pac )
@@ -1521,7 +1522,7 @@ def is_force_supported(self):
15211522 def __call__ (self , ** kwargs ):
15221523 return self ._delegate (** kwargs )
15231524
1524- def __init__ (self , url , input , change_is_required = False , file_ext = '.xml' , method = None ):
1525+ def __init__ (self , url , input : Union [ List [ str ], str , bytes , List [ bytes ]] , change_is_required = False , file_ext = '.xml' , method = None ):
15251526 if isinstance (url , self ._URLFactory ):
15261527 self ._url_factory = url
15271528 else :
@@ -1608,8 +1609,17 @@ def discard(self):
16081609 os .unlink (self .filename )
16091610
16101611
1612+ MetaType = Literal ['prj' , 'pkg' , 'attribute' , 'prjconf' , 'user' , 'group' , 'pattern' ]
1613+
1614+ class _MetaType (TypedDict ):
1615+ path : str
1616+ template : str
1617+ file_ext : str
1618+
1619+
16111620# different types of metadata
1612- metatypes = {'prj' : {'path' : 'source/%s/_meta' ,
1621+ metatypes : Dict [MetaType , _MetaType ] = {
1622+ 'prj' : {'path' : 'source/%s/_meta' ,
16131623 'template' : new_project_templ ,
16141624 'file_ext' : '.xml'
16151625 },
@@ -1640,7 +1650,7 @@ def discard(self):
16401650 }
16411651
16421652
1643- def meta_exists (metatype : str , path_args = None , template_args = None , create_new = True , apiurl = None ):
1653+ def meta_exists (metatype : MetaType , path_args = None , template_args = None , create_new = True , apiurl = None ):
16441654
16451655 global metatypes
16461656
@@ -1661,7 +1671,7 @@ def meta_exists(metatype: str, path_args=None, template_args=None, create_new=Tr
16611671
16621672
16631673def make_meta_url (
1664- metatype : str ,
1674+ metatype : MetaType ,
16651675 path_args = None ,
16661676 apiurl : Optional [str ] = None ,
16671677 force = False ,
@@ -1704,7 +1714,7 @@ def parse_meta_to_string(data: Union[bytes, list, Iterable]) -> str:
17041714
17051715
17061716def edit_meta (
1707- metatype ,
1717+ metatype : MetaType ,
17081718 path_args = None ,
17091719 data : Optional [List [str ]] = None ,
17101720 template_args = None ,
@@ -3684,6 +3694,7 @@ def attribute_branch_pkg(
36843694 return r
36853695
36863696
3697+ @overload
36873698def branch_pkg (
36883699 apiurl : str ,
36893700 src_project : str ,
@@ -3705,7 +3716,54 @@ def branch_pkg(
37053716 maintenance = False ,
37063717 newinstance = False ,
37073718 disable_build = False ,
3708- ):
3719+ ) -> Tuple [False , Optional [str ], Optional [str ], Optional [str ], Optional [str ]]: ...
3720+
3721+ @overload
3722+ def branch_pkg (
3723+ apiurl : str ,
3724+ src_project : str ,
3725+ src_package : str ,
3726+ nodevelproject = False ,
3727+ rev = None ,
3728+ linkrev = None ,
3729+ target_project : Optional [str ] = None ,
3730+ target_package = None ,
3731+ return_existing = True ,
3732+ msg = "" ,
3733+ force = False ,
3734+ noaccess = False ,
3735+ add_repositories = False ,
3736+ add_repositories_block = None ,
3737+ add_repositories_rebuild = None ,
3738+ extend_package_names = False ,
3739+ missingok = False ,
3740+ maintenance = False ,
3741+ newinstance = False ,
3742+ disable_build = False ,
3743+ ) -> Union [Tuple [True , str , str , None , None ], Tuple [False , Optional [str ], Optional [str ], Optional [str ], Optional [str ]]]: ...
3744+
3745+ def branch_pkg (
3746+ apiurl : str ,
3747+ src_project : str ,
3748+ src_package : str ,
3749+ nodevelproject = False ,
3750+ rev = None ,
3751+ linkrev = None ,
3752+ target_project : Optional [str ] = None ,
3753+ target_package = None ,
3754+ return_existing = False ,
3755+ msg = "" ,
3756+ force = False ,
3757+ noaccess = False ,
3758+ add_repositories = False ,
3759+ add_repositories_block = None ,
3760+ add_repositories_rebuild = None ,
3761+ extend_package_names = False ,
3762+ missingok = False ,
3763+ maintenance = False ,
3764+ newinstance = False ,
3765+ disable_build = False ,
3766+ ) -> Union [Tuple [True , str , str , None , None ], Tuple [False , Optional [str ], Optional [str ], Optional [str ], Optional [str ]]]:
37093767 """
37103768 Branch a package (via API call)
37113769 """
0 commit comments