Skip to content

Commit 422e9ec

Browse files
committed
pip: Handle sys_platform environment marker
1 parent 9f38c30 commit 422e9ec

File tree

1 file changed

+47
-3
lines changed

1 file changed

+47
-3
lines changed

pip/flatpak-pip-generator.py

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,13 +289,56 @@ def get_flatpak_runtime_scope(runtime: str) -> str:
289289
sys.exit(f"Runtime {runtime} not found for user or system")
290290

291291

292+
def handle_req_env_markers(requirements_text: str) -> str:
293+
def handle_sys_platform(marker: str) -> bool:
294+
pattern = r'sys_platform\s*(==|!=)\s*["\']([^"\']+)["\']'
295+
296+
for match in re.finditer(pattern, marker, re.IGNORECASE):
297+
op, platform = match.group(1), match.group(2).lower()
298+
if (op == "==" and not platform.startswith("linux")) or (
299+
op == "!=" and platform.startswith("linux")
300+
):
301+
return False
302+
return True
303+
304+
marker_handlers = (handle_sys_platform,)
305+
306+
filtered_lines = []
307+
ignored_lines = []
308+
309+
for line in requirements_text.split("\n"):
310+
stripped = line.strip()
311+
312+
if not stripped or stripped.startswith("#"):
313+
filtered_lines.append(line)
314+
continue
315+
316+
if ";" in line:
317+
marker = line.split(";", 1)[1].strip()
318+
should_include = all(handler(marker) for handler in marker_handlers)
319+
else:
320+
should_include = True
321+
322+
if should_include:
323+
filtered_lines.append(line)
324+
else:
325+
ignored_lines.append(line)
326+
327+
if ignored_lines:
328+
print(f"Ignored packages: {ignored_lines}")
329+
330+
return "\n".join(filtered_lines)
331+
332+
292333
packages = []
293334
if opts.requirements_file:
294335
requirements_file_input = os.path.expanduser(opts.requirements_file)
295336
try:
296337
with open(requirements_file_input) as in_req_file:
297338
reqs = parse_continuation_lines(in_req_file)
298-
reqs_as_str = "\n".join([r.split("--hash")[0] for r in reqs])
339+
reqs_as_str = handle_req_env_markers(
340+
"\n".join([r.split("--hash")[0] for r in reqs])
341+
)
299342
reqs_list_raw = reqs_as_str.splitlines()
300343
py_version_regex = re.compile(
301344
r";.*python_version .+$"
@@ -348,11 +391,12 @@ def get_flatpak_runtime_scope(runtime: str) -> str:
348391
requirements_file_output = req_file.name
349392

350393
elif opts.packages:
351-
packages = list(requirements.parse("\n".join(opts.packages)))
394+
filtered_packages_str = handle_req_env_markers("\n".join(opts.packages))
395+
packages = list(requirements.parse(filtered_packages_str))
352396
with tempfile.NamedTemporaryFile(
353397
"w", delete=False, prefix="requirements."
354398
) as req_file:
355-
req_file.write("\n".join(opts.packages))
399+
req_file.write(filtered_packages_str)
356400
requirements_file_output = req_file.name
357401
elif not len(sys.argv) > 1:
358402
sys.exit("Please specifiy either packages or requirements file argument")

0 commit comments

Comments
 (0)