Skip to content

Commit 9608c9d

Browse files
authored
fix: migrate MissingRequiredArgumentError imports to ocp_resources.exceptions (#2657)
* fix: add exceptions import to template_imports in user_code_parser The template_imports set in user_code_parser.py was missing "from ocp_resources.exceptions import MissingRequiredArgumentError", causing duplicate imports when regenerating resource files with --overwrite. Closes #2656 * convert all imports to import from exceptnios * update test to reflect MissingRequiredArgumentError import from exceptions
1 parent 921fffa commit 9608c9d

66 files changed

Lines changed: 171 additions & 69 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

class_generator/parsers/user_code_parser.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ def parse_user_code_from_file(file_path: str) -> tuple[str, str]:
6060
"from typing import Any",
6161
"from ocp_resources.resource import NamespacedResource",
6262
"from ocp_resources.resource import Resource",
63-
"from ocp_resources.resource import NamespacedResource, MissingRequiredArgumentError",
64-
"from ocp_resources.resource import Resource, MissingRequiredArgumentError",
63+
"from ocp_resources.exceptions import MissingRequiredArgumentError",
6564
}
6665

6766
for _import in imports:

class_generator/tests/test_user_code_parser.py

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ def test_parse_file_with_different_template_imports(self):
134134
content = '''# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md
135135
136136
from typing import Any
137-
from ocp_resources.resource import NamespacedResource, MissingRequiredArgumentError
137+
from ocp_resources.exceptions import MissingRequiredArgumentError
138+
from ocp_resources.resource import NamespacedResource
138139
from custom_validators import validate_name
139140
import json
140141
@@ -160,7 +161,8 @@ def validate(self):
160161
assert "from custom_validators import validate_name" in user_imports
161162
assert "import json" in user_imports
162163
assert "from typing import Any" not in user_imports
163-
assert "from ocp_resources.resource import NamespacedResource, MissingRequiredArgumentError" not in user_imports
164+
assert "from ocp_resources.exceptions import MissingRequiredArgumentError" not in user_imports
165+
assert "from ocp_resources.resource import NamespacedResource" not in user_imports
164166

165167
def test_parse_empty_file(self):
166168
"""Test parsing an empty file."""
@@ -203,6 +205,44 @@ class MyResource(Resource):
203205
assert user_code.strip() == "" # Only whitespace after marker
204206
assert user_imports == ""
205207

208+
def test_parse_file_with_exceptions_import(self):
209+
"""Test parsing a file with import from ocp_resources.exceptions module."""
210+
content = '''# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md
211+
212+
from typing import Any
213+
from ocp_resources.resource import NamespacedResource
214+
from ocp_resources.exceptions import MissingRequiredArgumentError
215+
import json
216+
217+
218+
class MyResource(NamespacedResource):
219+
"""My resource class."""
220+
221+
def __init__(self, **kwargs):
222+
super().__init__(**kwargs)
223+
224+
# End of generated code
225+
226+
def custom_method(self):
227+
return True
228+
'''
229+
230+
with tempfile.NamedTemporaryFile(mode="w", suffix=".py", delete=False) as f:
231+
f.write(content)
232+
f.flush()
233+
234+
_user_code, user_imports = parse_user_code_from_file(file_path=f.name)
235+
236+
Path(f.name).unlink()
237+
238+
# Template imports should be filtered out
239+
assert "from ocp_resources.exceptions import MissingRequiredArgumentError" not in user_imports
240+
assert "from typing import Any" not in user_imports
241+
assert "from ocp_resources.resource import NamespacedResource" not in user_imports
242+
243+
# User imports should be preserved
244+
assert "import json" in user_imports
245+
206246
def test_parse_file_with_syntax_error(self):
207247
"""Test parsing a file with syntax errors in imports section."""
208248
content = '''# Generated using https://github.com/RedHatQE/openshift-python-wrapper/blob/main/scripts/resource/README.md

ocp_resources/application_aware_cluster_resource_quota.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
# TODO: update API reference when OCP doc is available
33
from typing import Any
44

5-
from ocp_resources.resource import MissingRequiredArgumentError, Resource
5+
from ocp_resources.exceptions import MissingRequiredArgumentError
6+
from ocp_resources.resource import Resource
67

78

89
class ApplicationAwareClusterResourceQuota(Resource):

ocp_resources/application_aware_resource_quota.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
# TODO: update API reference when OCP doc is available
33
from typing import Any
44

5-
from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
5+
from ocp_resources.exceptions import MissingRequiredArgumentError
6+
from ocp_resources.resource import NamespacedResource
67

78

89
class ApplicationAwareResourceQuota(NamespacedResource):

ocp_resources/authorino.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from typing import Any
55

6-
from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
6+
from ocp_resources.exceptions import MissingRequiredArgumentError
7+
from ocp_resources.resource import NamespacedResource
78

89

910
class Authorino(NamespacedResource):

ocp_resources/catalog_source.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Any
22

3-
from ocp_resources.resource import MissingRequiredArgumentError, NamespacedResource
3+
from ocp_resources.exceptions import MissingRequiredArgumentError
4+
from ocp_resources.resource import NamespacedResource
45

56

67
class CatalogSource(NamespacedResource):

ocp_resources/cluster_resource_quota.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from typing import Any
55

6-
from ocp_resources.resource import MissingRequiredArgumentError, Resource
6+
from ocp_resources.exceptions import MissingRequiredArgumentError
7+
from ocp_resources.resource import Resource
78

89

910
class ClusterResourceQuota(Resource):

ocp_resources/cluster_role.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from ocp_resources.resource import MissingRequiredArgumentError, Resource
1+
from ocp_resources.exceptions import MissingRequiredArgumentError
2+
from ocp_resources.resource import Resource
23

34

45
class ClusterRole(Resource):

ocp_resources/cluster_role_binding.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from ocp_resources.cluster_role import ClusterRole
2-
from ocp_resources.resource import MissingRequiredArgumentError, Resource
2+
from ocp_resources.exceptions import MissingRequiredArgumentError
3+
from ocp_resources.resource import Resource
34

45

56
class ClusterRoleBinding(Resource):

ocp_resources/cluster_user_defined_network.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from typing import Any
55

6-
from ocp_resources.resource import MissingRequiredArgumentError, Resource
6+
from ocp_resources.exceptions import MissingRequiredArgumentError
7+
from ocp_resources.resource import Resource
78

89

910
class ClusterUserDefinedNetwork(Resource):

0 commit comments

Comments
 (0)