Skip to content

Commit 19ff3c9

Browse files
committed
WIP: add a few type hints
1 parent 57a4cdc commit 19ff3c9

2 files changed

Lines changed: 77 additions & 14 deletions

File tree

osc/conf.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import re
4343
import sys
4444
from io import StringIO
45+
from typing import Optional, Tuple
4546
from urllib.parse import urlsplit
4647

4748
from . import credentials
@@ -457,7 +458,11 @@ def apply_option_types(config, conffile=""):
457458
"""
458459

459460

460-
def parse_apisrv_url(scheme, apisrv):
461+
def parse_apisrv_url(scheme: Optional[str], apisrv: str) -> Tuple[str, str, str]:
462+
"""Parses the api server url ``apisrv`` and returns the tuple (scheme, url,
463+
path).
464+
465+
"""
461466
if apisrv.startswith('http://') or apisrv.startswith('https://'):
462467
url = apisrv
463468
elif scheme is not None:
@@ -468,17 +473,17 @@ def parse_apisrv_url(scheme, apisrv):
468473
return scheme, url, path.rstrip('/')
469474

470475

471-
def urljoin(scheme, apisrv, path=''):
472-
return '://'.join([scheme, apisrv]) + path
476+
def urljoin(scheme: str, apisrv: str, path: str='') -> str:
477+
return f"{scheme}://{apisrv}{path}"
473478

474479

475-
def is_known_apiurl(url):
480+
def is_known_apiurl(url: str) -> bool:
476481
"""returns ``True`` if url is a known apiurl"""
477482
apiurl = urljoin(*parse_apisrv_url(None, url))
478483
return apiurl in config['api_host_options']
479484

480485

481-
def extract_known_apiurl(url):
486+
def extract_known_apiurl(url: str) -> Optional[str]:
482487
"""
483488
Return longest prefix of given url that is known apiurl,
484489
None if there is no known apiurl that is prefix of given url.

osc/core.py

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
from http.client import IncompleteRead
3535
from io import StringIO
3636
from pathlib import Path
37-
from typing import Optional, Dict, Union, List, Iterable
37+
from typing import Optional, Dict, Union, List, Iterable, Tuple, overload
38+
from typing_extensions import Literal, TypedDict
3839
from urllib.parse import urlsplit, urlunsplit, urlparse, quote_plus, urlencode, unquote
3940
from urllib.error import HTTPError
4041
from urllib.request import pathname2url
@@ -3760,7 +3761,7 @@ def show_package_trigger_reason(apiurl: str, prj: str, pac: str, repo: str, arch
37603761
raise
37613762

37623763

3763-
def show_package_meta(apiurl: str, prj: str, pac: str, meta=False, blame=None):
3764+
def show_package_meta(apiurl: str, prj: str, pac: str, meta: bool=False, blame=None) -> List[bytes]:
37643765
query: Dict[str, Union[str, int]] = {}
37653766
if meta:
37663767
query['meta'] = 1
@@ -3822,7 +3823,7 @@ def show_scmsync(apiurl, prj, pac=None):
38223823
return node.text
38233824

38243825

3825-
def show_devel_project(apiurl, prj, pac):
3826+
def show_devel_project(apiurl: str, prj: str, pac: str) -> Tuple[Optional[str], Optional[str]]:
38263827
m = show_package_meta(apiurl, prj, pac)
38273828
node = ET.fromstring(b''.join(m)).find('devel')
38283829
if node is None:
@@ -3928,7 +3929,7 @@ def is_force_supported(self):
39283929
def __call__(self, **kwargs):
39293930
return self._delegate(**kwargs)
39303931

3931-
def __init__(self, url, input, change_is_required=False, file_ext='.xml', method=None):
3932+
def __init__(self, url, input: Union[List[str], str, bytes, List[bytes]], change_is_required=False, file_ext='.xml', method=None):
39323933
if isinstance(url, self._URLFactory):
39333934
self._url_factory = url
39343935
else:
@@ -4015,8 +4016,17 @@ def discard(self):
40154016
os.unlink(self.filename)
40164017

40174018

4019+
MetaType = Literal['prj', 'pkg', 'attribute', 'prjconf', 'user', 'group', 'pattern']
4020+
4021+
class _MetaType(TypedDict):
4022+
path: str
4023+
template: str
4024+
file_ext: str
4025+
4026+
40184027
# different types of metadata
4019-
metatypes = {'prj': {'path': 'source/%s/_meta',
4028+
metatypes: Dict[MetaType, _MetaType] = {
4029+
'prj': {'path': 'source/%s/_meta',
40204030
'template': new_project_templ,
40214031
'file_ext': '.xml'
40224032
},
@@ -4047,7 +4057,7 @@ def discard(self):
40474057
}
40484058

40494059

4050-
def meta_exists(metatype: str, path_args=None, template_args=None, create_new=True, apiurl=None):
4060+
def meta_exists(metatype: MetaType, path_args=None, template_args=None, create_new=True, apiurl=None):
40514061

40524062
global metatypes
40534063

@@ -4068,7 +4078,7 @@ def meta_exists(metatype: str, path_args=None, template_args=None, create_new=Tr
40684078

40694079

40704080
def make_meta_url(
4071-
metatype: str,
4081+
metatype: MetaType,
40724082
path_args=None,
40734083
apiurl: Optional[str] = None,
40744084
force=False,
@@ -4111,7 +4121,7 @@ def parse_meta_to_string(data: Union[bytes, list, Iterable]) -> str:
41114121

41124122

41134123
def edit_meta(
4114-
metatype,
4124+
metatype: MetaType,
41154125
path_args=None,
41164126
data: Optional[List[str]] = None,
41174127
template_args=None,
@@ -6050,6 +6060,7 @@ def attribute_branch_pkg(
60506060
return r
60516061

60526062

6063+
@overload
60536064
def branch_pkg(
60546065
apiurl: str,
60556066
src_project: str,
@@ -6071,7 +6082,54 @@ def branch_pkg(
60716082
maintenance=False,
60726083
newinstance=False,
60736084
disable_build=False,
6074-
):
6085+
) -> Tuple[False, Optional[str], Optional[str], Optional[str], Optional[str]]: ...
6086+
6087+
@overload
6088+
def branch_pkg(
6089+
apiurl: str,
6090+
src_project: str,
6091+
src_package: str,
6092+
nodevelproject=False,
6093+
rev=None,
6094+
linkrev=None,
6095+
target_project: Optional[str] = None,
6096+
target_package=None,
6097+
return_existing=True,
6098+
msg="",
6099+
force=False,
6100+
noaccess=False,
6101+
add_repositories=False,
6102+
add_repositories_block=None,
6103+
add_repositories_rebuild=None,
6104+
extend_package_names=False,
6105+
missingok=False,
6106+
maintenance=False,
6107+
newinstance=False,
6108+
disable_build=False,
6109+
) -> Union[Tuple[True, str, str, None, None], Tuple[False, Optional[str], Optional[str], Optional[str], Optional[str]]]: ...
6110+
6111+
def branch_pkg(
6112+
apiurl: str,
6113+
src_project: str,
6114+
src_package: str,
6115+
nodevelproject=False,
6116+
rev=None,
6117+
linkrev=None,
6118+
target_project: Optional[str] = None,
6119+
target_package=None,
6120+
return_existing=False,
6121+
msg="",
6122+
force=False,
6123+
noaccess=False,
6124+
add_repositories=False,
6125+
add_repositories_block=None,
6126+
add_repositories_rebuild=None,
6127+
extend_package_names=False,
6128+
missingok=False,
6129+
maintenance=False,
6130+
newinstance=False,
6131+
disable_build=False,
6132+
) -> Union[Tuple[True, str, str, None, None], Tuple[False, Optional[str], Optional[str], Optional[str], Optional[str]]]:
60756133
"""
60766134
Branch a package (via API call)
60776135
"""

0 commit comments

Comments
 (0)