diff --git a/dev-python/chromadb/Manifest b/dev-python/chromadb/Manifest
new file mode 100644
index 000000000..aa4a2fb44
--- /dev/null
+++ b/dev-python/chromadb/Manifest
@@ -0,0 +1 @@
+DIST chromadb-1.0.20.tar.gz 1244999 BLAKE2B 3a9f99153f77679d444d107d3f04f3ebfaf30b2e04935fc6a34e1fcf013ce796450a715487b22c4091e764ef313b80a517c7d76ec93a88b4bb395d9d63f3c8ef SHA512 a093bbcaeb7fc0bd4bb02bfb8a8efab100107faa57b3ae8fdf95b4e2ed5107470df629be9bc522b8ed26627eefacf22585f4aae7673b7a40da5d5c45b3dab4a2
diff --git a/dev-python/chromadb/chromadb-1.0.20.ebuild b/dev-python/chromadb/chromadb-1.0.20.ebuild
new file mode 100644
index 000000000..15810e2a0
--- /dev/null
+++ b/dev-python/chromadb/chromadb-1.0.20.ebuild
@@ -0,0 +1,51 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=maturin
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Embedding database for LLM apps"
+HOMEPAGE="https://pypi.org/project/chromadb/"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+#KEYWORDS="~amd64 ~arm64 ~x86"
+
+# >=dev-python/build-1.0.3[${PYTHON_USEDEP}]
+# FIXME: WiP, add missing deps
+RDEPEND="
+ >=dev-python/pydantic-1.9[${PYTHON_USEDEP}]
+ >=dev-python/pybase64-1.4.1[${PYTHON_USEDEP}]
+ >=dev-python/uvicorn-0.18.3[standard,${PYTHON_USEDEP}]
+ >=dev-python/numpy-1.22.5[${PYTHON_USEDEP}]
+ >=dev-python/posthog-2.4.0[${PYTHON_USEDEP}]
+ >=dev-python/typing_extensions-4.5.0[${PYTHON_USEDEP}]
+ >=dev-python/onnxruntime-1.14.1[${PYTHON_USEDEP}]
+ >=dev-python/opentelemetry-api-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/opentelemetry-exporter-otlp-proto-grpc-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/opentelemetry-sdk-1.2.0[${PYTHON_USEDEP}]
+ >=dev-python/tokenizers-0.13.2[${PYTHON_USEDEP}]
+ >=dev-python/pypika-0.48.9[${PYTHON_USEDEP}]
+ >=dev-python/tqdm-4.65.0[${PYTHON_USEDEP}]
+ >=dev-python/overrides-7.3.1[${PYTHON_USEDEP}]
+ >=dev-python/grpcio-1.58.0[${PYTHON_USEDEP}]
+ >=dev-python/bcrypt-4.0.1[${PYTHON_USEDEP}]
+ >=dev-python/typer-0.9.0[${PYTHON_USEDEP}]
+ >=dev-python/kubernetes-28.1.0[${PYTHON_USEDEP}]
+ >=dev-python/tenacity-8.2.3[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-6.0.0[${PYTHON_USEDEP}]
+ >=dev-python/mmh3-4.0.1[${PYTHON_USEDEP}]
+ >=dev-python/orjson-3.9.12[${PYTHON_USEDEP}]
+ >=dev-python/httpx-0.27.0[${PYTHON_USEDEP}]
+ >=dev-python/rich-10.11.0[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-4.19.0[${PYTHON_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="test"
+#distutils_enable_tests pytest
diff --git a/dev-python/chromadb/metadata.xml b/dev-python/chromadb/metadata.xml
new file mode 100644
index 000000000..d9b283672
--- /dev/null
+++ b/dev-python/chromadb/metadata.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ unknown@pentoo.ch
+ Author Unknown
+
+
+
+
+
diff --git a/dev-python/pyghidra-mcp/metadata.xml b/dev-python/pyghidra-mcp/metadata.xml
new file mode 100644
index 000000000..d9b283672
--- /dev/null
+++ b/dev-python/pyghidra-mcp/metadata.xml
@@ -0,0 +1,11 @@
+
+
+
+
+ unknown@pentoo.ch
+ Author Unknown
+
+
+
+
+
diff --git a/dev-python/pyghidra-mcp/pyghidra-mcp-0.1.8.ebuild b/dev-python/pyghidra-mcp/pyghidra-mcp-0.1.8.ebuild
new file mode 100644
index 000000000..5ed008813
--- /dev/null
+++ b/dev-python/pyghidra-mcp/pyghidra-mcp-0.1.8.ebuild
@@ -0,0 +1,29 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{11..13} )
+
+inherit distutils-r1 pypi
+
+DESCRIPTION="Python Command-Line Ghidra MCP"
+HOMEPAGE="https://pypi.org/project/pyghidra-mcp/"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+#RDEPEND=""
+DEPEND="${RDEPEND}
+ >=dev-python/click-8.2.1[${PYTHON_USEDEP}]
+ >=dev-python/mcp-1.9.4[cli,${PYTHON_USEDEP}]
+ >=dev-python/pyghidra-2.1.0[${PYTHON_USEDEP}]
+ >=dev-python/chromadb-0.5.5[${PYTHON_USEDEP}]
+
+"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="test"
+#distutils_enable_tests pytest
diff --git a/scripts/python_dependencies.py b/scripts/python_dependencies.py
index d42d017dc..e56b3ef21 100755
--- a/scripts/python_dependencies.py
+++ b/scripts/python_dependencies.py
@@ -10,6 +10,10 @@ import re
import os
import tomli
+#from packaging.requirements import InvalidRequirement, Requirement
+#import packaging.specifiers
+#from packaging.version import Version
+
__author__ = "Anton Bolshakov"
__license__ = "GPL-3"
__email__ = "blshkv@pentoo.ch"
@@ -95,20 +99,41 @@ def portage_mapping(replace_string):
return result
+
def pyproject_toml():
try:
with open('./pyproject.toml', 'rb') as f:
try:
print("pyproject.toml found")
- # FIXME: support this:
- #dependencies = tomli.load(f)['project']['dependencies']
- dependencies = tomli.load(f)['tool']['poetry']['dependencies']
+ parsed_toml = tomli.load(f)
+ if "project" in parsed_toml:
+ # Example:
+ # [project]
+ # dependencies = [ "build >= 1.0.3", "pydantic >= 1.9" ]
+ dependencies_list = parsed_toml["project"]["dependencies"]
+ i = iter(dependencies_list)
+ dependencies=dict.fromkeys(i, "*")
+
+ #for i, entry in enumerate(dependencies_list, 1):
+ # if not isinstance(entry, str):
+ # raise TypeError(f'Dependency #{i} of field `project.dependencies` must be a string')
+ # try:
+ # req = Requirement(entry)
+ # print(f"[DEBUG] specifier {req.specifier}")
+ # # it would be set or specifier
+ # spec = SpecifierSet(req.specifier)
+ # spec = Specifier(req.specifier)
+ #print(f"[DEBUG] requirements {req.name}")
+ # except InvalidRequirement as e:
+ # raise ValueError(f'Dependency #{i} of field `project.dependencies` is invalid: {e}')
+
+ elif "tool" in parsed_toml:
+ # Example:
+ # [tool.poetry.dependencies]
+ # requests = "^2.13.0"
+ dependencies = parsed_toml['tool']['poetry']['dependencies']
except:
try:
- # FIXME: add support pyproject dependencies = [], see fastapi as an example
- # Dependency specification in pyproject.toml
- # https://peps.python.org/pep-0631/
-
# https://stackoverflow.com/questions/49689880/proper-way-to-parse-requirements-file-after-pip-upgrade-to-pip-10-x-x
# FIXME: use https://pypi.org/project/requirements-parser
# or pkg_resources.parse_requirements(value)
@@ -128,12 +153,12 @@ def pyproject_toml():
except:
# FIXME:
# build-backend = "setuptools.build_meta"
- print("Unable to find 'poetry' dependencies, trying setuptools instead")
+ print("Unable to find pyproject dependencies, trying setuptools instead")
return 1
except FileNotFoundError:
return 1
- #Debug
- print("DEBUG: the following deps found:", dependencies) # List of static requirements
+
+# print("DEBUG: the following deps found:", dependencies) # List of static requirements
for key, value in dependencies.items():
if key == "python":
continue
@@ -185,8 +210,10 @@ def distutils_setup():
print("\"")
def main():
- if pyproject_toml():
- distutils_setup()
+ pyproject_toml()
+
+ #if pyproject_toml():
+ # distutils_setup()
if __name__ == '__main__':
main()