Skip to content

Commit 169136d

Browse files
mmathesiussgallagher
authored andcommitted
Enable Python bindings for enhanced Modulemd.read_packager_file/string()
Signed-off-by: Merlin Mathesius <[email protected]>
1 parent 4939077 commit 169136d

File tree

3 files changed

+226
-4
lines changed

3 files changed

+226
-4
lines changed

modulemd/include/modulemd-2.0/modulemd.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ ModulemdModuleIndex *
343343
modulemd_load_string (const gchar *yaml_string, GError **error);
344344

345345
/**
346-
* modulemd_read_packager_file:
346+
* modulemd_read_packager_file: (skip)
347347
* @yaml_path: (in): A path to a YAML file containing a packager document.
348348
* @object: (out): (transfer full): A newly allocated #ModulemdModuleStreamV2 or
349349
* #ModulemdPackagerV3 object initialized with the content from @yaml_path.
@@ -362,7 +362,7 @@ modulemd_read_packager_file (const gchar *yaml_path,
362362
GError **error);
363363

364364
/**
365-
* modulemd_read_packager_file_ext:
365+
* modulemd_read_packager_file_ext: (rename-to modulemd_read_packager_file)
366366
* @yaml_path: (in): A path to a YAML file containing a packager document.
367367
* @object: (out): (transfer full): A newly allocated #ModulemdModuleStreamV2 or
368368
* #ModulemdPackagerV3 object initialized with the content from @yaml_path.
@@ -389,7 +389,7 @@ modulemd_read_packager_file_ext (const gchar *yaml_path,
389389
GError **error);
390390

391391
/**
392-
* modulemd_read_packager_string:
392+
* modulemd_read_packager_string: (skip)
393393
* @yaml_string: (in): A YAML string containing a packager document.
394394
* @object: (out): (transfer full): A newly allocated #ModulemdModuleStreamV2 or
395395
* #ModulemdPackagerV3 object initialized with the content from @yaml_string.
@@ -408,7 +408,7 @@ modulemd_read_packager_string (const gchar *yaml_string,
408408
GError **error);
409409

410410
/**
411-
* modulemd_read_packager_string_ext:
411+
* modulemd_read_packager_string_ext: (rename-to modulemd_read_packager_string)
412412
* @yaml_string: (in): A YAML string containing a packager document.
413413
* @object: (out): (transfer full): A newly allocated #ModulemdModuleStreamV2 or
414414
* #ModulemdPackagerV3 object initialized with the content from @yaml_string.

modulemd/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ endforeach
352352

353353
python_tests = {
354354
'buildopts' : 'tests/ModulemdTests/buildopts.py',
355+
'common' : 'tests/ModulemdTests/common.py',
355356
'componentrpm' : 'tests/ModulemdTests/componentrpm.py',
356357
'defaults' : 'tests/ModulemdTests/defaults.py',
357358
'defaultsv1' : 'tests/ModulemdTests/defaultsv1.py',
Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
import json
2+
import logging
3+
import os
4+
import sys
5+
6+
try:
7+
import unittest
8+
import gi
9+
10+
gi.require_version("Modulemd", "2.0")
11+
from gi.repository import GLib
12+
from gi.repository import Modulemd
13+
except ImportError:
14+
# Return error 77 to skip this test on platforms without the necessary
15+
# python modules
16+
sys.exit(77)
17+
18+
from base import TestBase
19+
20+
logging.basicConfig(level=logging.DEBUG)
21+
22+
23+
class TestCommon(TestBase):
24+
def test_packager_read_file(self):
25+
# We have a chicken-egg problem with overrides, since they can only
26+
# be tested if they are already installed. This means they need to
27+
# be run in the CI. In order to avoid changes to these tests or the
28+
# overrides breaking things, we'll skip them if the appropriate
29+
# override is not installed.
30+
if not (
31+
"_overrides_module" in dir(Modulemd)
32+
and hasattr(gi.overrides.Modulemd, "read_packager_file")
33+
):
34+
logging.debug(
35+
"read_packager_file() override not installed, skipping tests"
36+
)
37+
return
38+
39+
# Validate that the PackagerV2 specification parses correctly
40+
doc = Modulemd.read_packager_file(
41+
os.path.join(
42+
self.source_root, "yaml_specs/modulemd_packager_v2.yaml"
43+
),
44+
)
45+
self.assertIsNotNone(doc)
46+
# Once read in, a modulemd-packager v2 document is a ModuleStream of the
47+
# same version.
48+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
49+
# Confirm module and stream names are undefined
50+
self.assertIsNone(doc.get_module_name())
51+
self.assertIsNone(doc.get_stream_name())
52+
53+
# Read the PackagerV2 specification with module/stream name overrides
54+
doc = Modulemd.read_packager_file(
55+
os.path.join(
56+
self.source_root, "yaml_specs/modulemd_packager_v2.yaml"
57+
),
58+
"modulename-override",
59+
"streamname-override",
60+
)
61+
self.assertIsNotNone(doc)
62+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
63+
# Confirm module and stream names were set
64+
self.assertEqual(doc.get_module_name(), "modulename-override")
65+
self.assertEqual(doc.get_stream_name(), "streamname-override")
66+
67+
# Valid PackagerV3 file
68+
doc = Modulemd.read_packager_file(
69+
os.path.join(
70+
self.source_root, "yaml_specs/modulemd_packager_v3.yaml"
71+
),
72+
)
73+
self.assertIsNotNone(doc)
74+
self.assertIs(type(doc), Modulemd.PackagerV3)
75+
76+
# Read PackagerV3 with module/stream name overrides
77+
doc = Modulemd.read_packager_file(
78+
os.path.join(
79+
self.source_root, "yaml_specs/modulemd_packager_v3.yaml"
80+
),
81+
"modulename-override",
82+
"streamname-override",
83+
)
84+
self.assertIsNotNone(doc)
85+
self.assertIs(type(doc), Modulemd.PackagerV3)
86+
# Confirm module and stream names were set
87+
self.assertEqual(doc.get_module_name(), "modulename-override")
88+
self.assertEqual(doc.get_stream_name(), "streamname-override")
89+
90+
# Validate that the ModuleStreamV2 specification parses correctly
91+
doc = Modulemd.read_packager_file(
92+
os.path.join(
93+
self.source_root, "yaml_specs/modulemd_stream_v2.yaml"
94+
),
95+
)
96+
self.assertIsNotNone(doc)
97+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
98+
# Confirm module and stream names are correct
99+
self.assertEqual(doc.get_module_name(), "foo")
100+
self.assertEqual(doc.get_stream_name(), "latest")
101+
102+
# Read the ModuleStreamV2 specification with module/stream name overrides
103+
doc = Modulemd.read_packager_file(
104+
os.path.join(
105+
self.source_root, "yaml_specs/modulemd_stream_v2.yaml"
106+
),
107+
"modulename-override",
108+
"streamname-override",
109+
)
110+
self.assertIsNotNone(doc)
111+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
112+
# Confirm module and stream names were set
113+
self.assertEqual(doc.get_module_name(), "modulename-override")
114+
self.assertEqual(doc.get_stream_name(), "streamname-override")
115+
116+
def test_packager_read_string(self):
117+
# We have a chicken-egg problem with overrides, since they can only
118+
# be tested if they are already installed. This means they need to
119+
# be run in the CI. In order to avoid changes to these tests or the
120+
# overrides breaking things, we'll skip them if the appropriate
121+
# override is not installed.
122+
if not (
123+
"_overrides_module" in dir(Modulemd)
124+
and hasattr(gi.overrides.Modulemd, "read_packager_string")
125+
):
126+
logging.debug(
127+
"read_packager_string() override not installed, skipping tests"
128+
)
129+
return
130+
131+
# PackagerV2
132+
minimal_valid = """---
133+
document: modulemd-packager
134+
version: 2
135+
data:
136+
summary: A minimal valid module
137+
description: A minimalistic module description
138+
license:
139+
module:
140+
- MIT
141+
...
142+
"""
143+
doc = Modulemd.read_packager_string(minimal_valid)
144+
self.assertIsNotNone(doc)
145+
# Once read in, a modulemd-packager document is a ModuleStream of the
146+
# same version.
147+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
148+
# Confirm module and stream names are undefined
149+
self.assertIsNone(doc.get_module_name())
150+
self.assertIsNone(doc.get_stream_name())
151+
152+
# Read again with module/stream name overrides
153+
doc = Modulemd.read_packager_string(
154+
minimal_valid, "modulename-override", "streamname-override",
155+
)
156+
self.assertIsNotNone(doc)
157+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
158+
# Confirm module and stream names were set
159+
self.assertEqual(doc.get_module_name(), "modulename-override")
160+
self.assertEqual(doc.get_stream_name(), "streamname-override")
161+
162+
# PackagerV3
163+
minimal_valid = """---
164+
document: modulemd-packager
165+
version: 3
166+
data:
167+
summary: A minimal valid module
168+
description: A minimalistic module description
169+
license:
170+
- MIT
171+
...
172+
"""
173+
doc = Modulemd.read_packager_string(minimal_valid)
174+
self.assertIsNotNone(doc)
175+
self.assertIs(type(doc), Modulemd.PackagerV3)
176+
# Confirm module and stream names are undefined
177+
self.assertIsNone(doc.get_module_name())
178+
self.assertIsNone(doc.get_stream_name())
179+
180+
# Read again with module/stream name overrides
181+
doc = Modulemd.read_packager_string(
182+
minimal_valid, "modulename-override", "streamname-override",
183+
)
184+
self.assertIsNotNone(doc)
185+
self.assertIs(type(doc), Modulemd.PackagerV3)
186+
# Confirm module and stream names were set
187+
self.assertEqual(doc.get_module_name(), "modulename-override")
188+
self.assertEqual(doc.get_stream_name(), "streamname-override")
189+
190+
# ModuleStreamV2
191+
minimal_valid = """---
192+
document: modulemd-stream
193+
version: 2
194+
data:
195+
summary: A minimal valid module
196+
description: A minimalistic module description
197+
license:
198+
module:
199+
- MIT
200+
...
201+
"""
202+
doc = Modulemd.read_packager_string(minimal_valid)
203+
self.assertIsNotNone(doc)
204+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
205+
# Confirm module and stream names are undefined
206+
self.assertIsNone(doc.get_module_name())
207+
self.assertIsNone(doc.get_stream_name())
208+
209+
# Read again with module/stream name overrides
210+
doc = Modulemd.read_packager_string(
211+
minimal_valid, "modulename-override", "streamname-override",
212+
)
213+
self.assertIsNotNone(doc)
214+
self.assertIs(type(doc), Modulemd.ModuleStreamV2)
215+
# Confirm module and stream names were set
216+
self.assertEqual(doc.get_module_name(), "modulename-override")
217+
self.assertEqual(doc.get_stream_name(), "streamname-override")
218+
219+
220+
if __name__ == "__main__":
221+
unittest.main()

0 commit comments

Comments
 (0)