Skip to content

Commit 0d6fdff

Browse files
committed
Use typeguard during tests and in osc-wrapper.py
1 parent 2408417 commit 0d6fdff

7 files changed

Lines changed: 76 additions & 29 deletions

File tree

.github/workflows/tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ jobs:
104104
- name: "Install packages"
105105
run: |
106106
sudo apt-get -y update
107-
sudo apt-get -y --no-install-recommends install python3-behave diffstat diffutils python3 python3-cryptography python3-pip python3-rpm python3-setuptools python3-urllib3
107+
sudo apt-get -y --no-install-recommends install python3-behave diffstat diffutils python3 python3-cryptography python3-pip python3-rpm python3-setuptools python3-typeguard python3-urllib3
108108
109109
- name: "Checkout sources"
110110
uses: actions/checkout@v3

contrib/osc.spec

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030
%bcond_with fdupes
3131
%endif
3232

33+
# use typeguard during build on distros where typeguard is available
34+
%if (0%{?suse_version} > 1500 || 0%{?fedora} >= 37)
35+
%bcond_without typeguard
36+
%else
37+
%bcond_with typeguard
38+
%endif
39+
3340
%define argparse_manpage_pkg argparse-manpage
3441
%define obs_build_pkg obs-build
3542
%define openssh_pkg openssh
@@ -68,6 +75,9 @@ BuildRequires: %{use_python_pkg}-cryptography
6875
BuildRequires: %{use_python_pkg}-devel >= 3.6
6976
BuildRequires: %{use_python_pkg}-rpm
7077
BuildRequires: %{use_python_pkg}-setuptools
78+
%if %{with typeguard}
79+
BuildRequires: %{use_python_pkg}-typeguard
80+
%endif
7181
BuildRequires: %{use_python_pkg}-urllib3
7282
BuildRequires: diffstat
7383
%if %{with fdupes}

osc-wrapper.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,28 @@
44
This wrapper allows osc to be called from the source directory during development.
55
"""
66

7+
8+
# developers and early adopters have typeguard enabled
9+
# so they can catch and report issues early
10+
try:
11+
from typeguard import install_import_hook
12+
except ImportError:
13+
install_import_hook = None
14+
15+
if install_import_hook is None:
16+
try:
17+
from typeguard.importhook import install_import_hook
18+
except ImportError:
19+
install_import_hook = None
20+
21+
if install_import_hook:
22+
# install typeguard import hook only if available
23+
install_import_hook("osc")
24+
else:
25+
import osc.oscerr
26+
raise osc.oscerr.PackageNotInstalled("python3-typeguard")
27+
28+
729
import osc.babysitter
830

931
osc.babysitter.main()

osc/commandline.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -584,10 +584,10 @@ def pop_args(
584584
args,
585585
arg1_name: str = None,
586586
arg1_is_optional: bool = False,
587-
arg1_default: str = None,
587+
arg1_default: Optional[str] = None,
588588
arg2_name: str = None,
589589
arg2_is_optional: bool = False,
590-
arg2_default: str = None,
590+
arg2_default: Optional[str] = None,
591591
):
592592
"""
593593
Pop 2 arguments from `args`.
@@ -658,9 +658,9 @@ def pop_args(
658658
def pop_project_package_from_args(
659659
args: List[str],
660660
project_is_optional: bool = False,
661-
default_project: str = None,
661+
default_project: Optional[str] = None,
662662
package_is_optional: bool = False,
663-
default_package: str = None,
663+
default_package: Optional[str] = None,
664664
):
665665
"""
666666
Pop project and package from given `args`.
@@ -729,9 +729,9 @@ def pop_project_package_from_args(
729729
def pop_repository_arch_from_args(
730730
args: List[str],
731731
repository_is_optional: bool = False,
732-
default_repository: str = None,
732+
default_repository: Optional[str] = None,
733733
arch_is_optional: bool = False,
734-
default_arch: str = None,
734+
default_arch: Optional[str] = None,
735735
):
736736
"""
737737
Pop repository and arch from given `args`.
@@ -768,13 +768,13 @@ def pop_repository_arch_from_args(
768768
def pop_project_package_repository_arch_from_args(
769769
args: List[str],
770770
project_is_optional: bool = False,
771-
default_project: str = None,
771+
default_project: Optional[str] = None,
772772
package_is_optional: bool = False,
773-
default_package: str = None,
773+
default_package: Optional[str] = None,
774774
repository_is_optional: bool = False,
775-
default_repository: str = None,
775+
default_repository: Optional[str] = None,
776776
arch_is_optional: bool = False,
777-
default_arch: str = None,
777+
default_arch: Optional[str] = None,
778778
):
779779
"""
780780
Pop project, package, repository and arch from given `args`.
@@ -854,13 +854,13 @@ def pop_project_package_repository_arch_from_args(
854854
def pop_project_package_targetproject_targetpackage_from_args(
855855
args: List[str],
856856
project_is_optional: bool = False,
857-
default_project: str = None,
857+
default_project: Optional[str] = None,
858858
package_is_optional: bool = False,
859-
default_package: str = None,
859+
default_package: Optional[str] = None,
860860
target_project_is_optional: bool = False,
861-
default_target_project: str = None,
861+
default_target_project: Optional[str] = None,
862862
target_package_is_optional: bool = False,
863-
default_target_package: str = None,
863+
default_target_package: Optional[str] = None,
864864
):
865865
"""
866866
Pop project, package, target project and target package from given `args`.

osc/core.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,7 +1192,7 @@ def __str__(self):
11921192
@staticmethod
11931193
def init_project(
11941194
apiurl: str,
1195-
dir: Path,
1195+
dir: str,
11961196
project,
11971197
package_tracking=True,
11981198
getPackageList=True,
@@ -2176,7 +2176,7 @@ def status(self, n):
21762176

21772177
return state
21782178

2179-
def get_diff(self, revision=None, ignoreUnversioned=False):
2179+
def get_diff(self, revision: Optional[int] = None, ignoreUnversioned=False):
21802180
diff_hdr = b'Index: %s\n'
21812181
diff_hdr += b'===================================================================\n'
21822182
kept = []
@@ -2274,7 +2274,7 @@ def diff_add_delete(fname, add, revision):
22742274
continue
22752275
elif state == ' ' and revision is None:
22762276
continue
2277-
elif not revision_is_empty(revision) and self.findfilebyname(f.name).md5 == f.md5 and state != 'M':
2277+
elif not revision_is_empty(revision) and self.findfilebyname(f.name).md5 == f.md5 and state != "M":
22782278
continue
22792279
yield [diff_hdr % f.name.encode()]
22802280
if revision is None:
@@ -3739,7 +3739,7 @@ def meta_get_project_list(apiurl: str, deleted=False):
37393739
return sorted(node.get('name') for node in root if node.get('name'))
37403740

37413741

3742-
def show_project_meta(apiurl: str, prj: str, rev=None, blame=None):
3742+
def show_project_meta(apiurl: str, prj: str, rev: Optional[int] = None, blame=None):
37433743
query = {}
37443744
if blame:
37453745
query['view'] = "blame"
@@ -3766,7 +3766,7 @@ def show_project_meta(apiurl: str, prj: str, rev=None, blame=None):
37663766
return f.readlines()
37673767

37683768

3769-
def show_project_conf(apiurl: str, prj: str, rev=None, blame=None):
3769+
def show_project_conf(apiurl: str, prj: str, rev: Optional[int] = None, blame=None):
37703770
query = {}
37713771
url = None
37723772
if not revision_is_empty(rev):
@@ -4196,7 +4196,7 @@ def show_files_meta(
41964196
apiurl: str,
41974197
prj: str,
41984198
pac: str,
4199-
revision=None,
4199+
revision: Optional[int] = None,
42004200
expand=False,
42014201
linkrev=None,
42024202
linkrepair=False,
@@ -4843,7 +4843,7 @@ def get_request_collection(
48434843
package=None,
48444844
states=None,
48454845
review_states=None,
4846-
types: List[str] = None,
4846+
types: Optional[List[str]] = None,
48474847
ids=None,
48484848
withfullhistory=False
48494849
):
@@ -5388,18 +5388,18 @@ def server_diff(
53885388
apiurl: str,
53895389
old_project: str,
53905390
old_package: str,
5391-
old_revision: str,
5391+
old_revision: Optional[str],
53925392
new_project: str,
53935393
new_package: str,
5394-
new_revision: str,
5394+
new_revision: Optional[str],
53955395
unified=False,
53965396
missingok=False,
53975397
meta=False,
53985398
expand=True,
53995399
onlyissues=False,
54005400
full=True,
54015401
xml=False,
5402-
files: list = None,
5402+
files: Optional[list] = None,
54035403
):
54045404
query: Dict[str, Union[str, int]] = {"cmd": "diff"}
54055405
if expand:
@@ -5454,17 +5454,17 @@ def server_diff_noex(
54545454
apiurl: str,
54555455
old_project: str,
54565456
old_package: str,
5457-
old_revision: str,
5457+
old_revision: Optional[str],
54585458
new_project: str,
54595459
new_package: str,
5460-
new_revision: str,
5460+
new_revision: Optional[str],
54615461
unified=False,
54625462
missingok=False,
54635463
meta=False,
54645464
expand=True,
54655465
onlyissues=False,
54665466
xml=False,
5467-
files: list = None,
5467+
files: Optional[list] = None,
54685468
):
54695469
try:
54705470
return server_diff(apiurl,
@@ -7709,7 +7709,7 @@ def owner(
77097709
return res
77107710

77117711

7712-
def set_link_rev(apiurl: str, project: str, package: str, revision="", expand=False, msg: str=None):
7712+
def set_link_rev(apiurl: str, project: str, package: str, revision="", expand=False, msg: Optional[str] = None):
77137713
url = makeurl(apiurl, ["source", project, package, "_link"])
77147714
try:
77157715
f = http_GET(url)

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ install_requires =
4242
cryptography
4343
# rpm is not available on pip, install a matching package manually prior installing osc
4444
rpm
45+
typeguard
4546
urllib3
4647

4748
[options.extras_require]

tests/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
try:
2+
from typeguard import install_import_hook
3+
except ImportError:
4+
install_import_hook = None
5+
6+
if not install_import_hook:
7+
try:
8+
from typeguard.importhook import install_import_hook
9+
except ImportError:
10+
install_import_hook = None
11+
12+
if install_import_hook:
13+
# install typeguard import hook only if available
14+
install_import_hook("osc")

0 commit comments

Comments
 (0)