aboutsummaryrefslogtreecommitdiff
path: root/flatpak/poetry-to-requirements.py
diff options
context:
space:
mode:
Diffstat (limited to 'flatpak/poetry-to-requirements.py')
-rwxr-xr-xflatpak/poetry-to-requirements.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/flatpak/poetry-to-requirements.py b/flatpak/poetry-to-requirements.py
new file mode 100755
index 00000000..973e3c2e
--- /dev/null
+++ b/flatpak/poetry-to-requirements.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python3
+import toml
+import click
+
+
+def format_version(dep, version):
+ if version == "*":
+ return dep
+ # If it's a dictionary, assume it's in the format {extras = ["socks"], version = "*"}
+ elif isinstance(version, dict) and "version" in version:
+ version = version["version"]
+ if version == "*":
+ return dep
+ elif version.startswith("^"):
+ return f"{dep}>={version[1:]}.0"
+ elif version.startswith((">=", "<=", "!=", "==", "<", ">")):
+ return f"{dep}{version}"
+ else:
+ return f"{dep}=={version}"
+ elif version.startswith("^"):
+ return f"{dep}>={version[1:]}.0"
+ elif version.startswith((">=", "<=", "!=", "==", "<", ">")):
+ return f"{dep}{version}"
+ else:
+ return f"{dep}=={version}"
+
+
+@click.command()
+@click.argument("pyproject_filename")
+def poetry_to_requirements(pyproject_filename):
+ """Convert poetry dependencies in a pyproject.toml to requirements format."""
+ with open(pyproject_filename, "r") as f:
+ data = toml.load(f)
+
+ dependencies = data.get("tool", {}).get("poetry", {}).get("dependencies", {})
+
+ requirements = []
+
+ for dep, version in dependencies.items():
+ if dep == "python" or dep == "onionshare_cli":
+ continue
+
+ formatted = format_version(dep, version)
+ if formatted:
+ requirements.append(formatted)
+
+ for req in requirements:
+ print(req)
+
+
+if __name__ == "__main__":
+ poetry_to_requirements()