2
0
mirror of https://github.com/frappe/bench.git synced 2024-11-16 01:57:08 +00:00

Merge pull request #1323 from gavindsouza/dev-deps-toml

feat: Dev Dependencies via pyproject.toml
This commit is contained in:
gavin 2022-06-17 18:02:22 +05:30 committed by GitHub
commit 28549ff139
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 24 deletions

View File

@ -155,10 +155,13 @@ class Bench(Base, Validator):
def get_installed_apps(self) -> List:
"""Returns list of installed apps on bench, not in excluded_apps.txt
"""
apps = [app for app in self.apps if app not in self.excluded_apps]
apps.remove("frappe")
apps.insert(0, "frappe")
return apps
try:
installed_packages = get_cmd_output(f"{self.python} -m pip freeze", cwd=self.name)
except Exception:
installed_packages = []
is_installed = lambda app: app in installed_packages
return [app for app in self.apps if app not in self.excluded_apps and is_installed(app)]
class BenchApps(MutableSequence):
@ -262,23 +265,14 @@ class BenchApps(MutableSequence):
)
def initialize_apps(self):
is_installed = lambda app: app in installed_packages
try:
installed_packages = get_cmd_output(f"{self.bench.python} -m pip freeze", cwd=self.bench.name)
except Exception:
self.apps = []
return
try:
self.apps = [
x
for x in os.listdir(os.path.join(self.bench.name, "apps"))
if (
is_frappe_app(os.path.join(self.bench.name, "apps", x))
and is_installed(x)
)
if is_frappe_app(os.path.join(self.bench.name, "apps", x))
]
self.apps.remove("frappe")
self.apps.insert(0, "frappe")
except FileNotFoundError:
self.apps = []
@ -438,8 +432,7 @@ class BenchSetup(Base):
"""
from bench.app import App
if not apps:
apps = self.bench.get_installed_apps()
apps = apps or self.bench.apps
self.pip()
@ -456,8 +449,7 @@ class BenchSetup(Base):
"""
import bench.cli
if not apps:
apps = self.bench.get_installed_apps()
apps = apps or self.bench.apps
quiet_flag = "" if bench.cli.verbose else "--quiet"

View File

@ -84,21 +84,44 @@ def install_python_dev_dependencies(bench_path=".", apps=None, verbose=False):
apps = bench.get_installed_apps()
for app in apps:
pyproject_deps = None
app_path = os.path.join(bench_path, "apps", app)
pyproject_path = os.path.join(app_path, "pyproject.toml")
dev_requirements_path = os.path.join(app_path, "dev-requirements.txt")
if os.path.exists(dev_requirements_path):
if os.path.exists(pyproject_path):
pyproject_deps = _generate_dev_deps_pattern(pyproject_path)
if pyproject_deps:
bench.run(f"{bench.python} -m pip install {quiet_flag} --upgrade {pyproject_deps}")
if not pyproject_deps and os.path.exists(dev_requirements_path):
bench.run(f"{bench.python} -m pip install {quiet_flag} --upgrade -r {dev_requirements_path}")
def _generate_dev_deps_pattern(pyproject_path):
try:
from tomli import loads
except ImportError:
from tomllib import loads
requirements_pattern = ""
pyroject_config = loads(open(pyproject_path).read())
try:
for pkg, version in pyroject_config['tool']['bench']['dev-dependencies'].items():
op = "=" if "=" not in version else ""
requirements_pattern += f"{pkg}{op}{version} "
except KeyError:
pass
return requirements_pattern
def update_yarn_packages(bench_path=".", apps=None):
from bench.bench import Bench
bench = Bench(bench_path)
if not apps:
apps = bench.get_installed_apps()
apps = apps or bench.apps
apps_dir = os.path.join(bench.name, "apps")