Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add nox task to verify dependency declarations #236

Open
wants to merge 21 commits into
base: main
Choose a base branch
from

Conversation

Jannis-Mittenzwei
Copy link
Contributor

closes #233

@Jannis-Mittenzwei Jannis-Mittenzwei added the feature Product feature label Aug 20, 2024
@Jannis-Mittenzwei Jannis-Mittenzwei self-assigned this Aug 20, 2024
exasol/toolbox/tools/dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/tools/dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/tools/dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/tools/dependencies_check.py Outdated Show resolved Hide resolved
test/unit/dependencies_check_test.py Show resolved Hide resolved
@Jannis-Mittenzwei Jannis-Mittenzwei force-pushed the feature/#233-add-nox-task-to-verify-dependency-declarations branch from 756d4b8 to 9c33b61 Compare September 3, 2024 09:45
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
…ify-dependency-declarations' into feature/#233-add-nox-task-to-verify-dependency-declarations

# Conflicts:
#	exasol/toolbox/nox/_dependencies_check.py
@Jannis-Mittenzwei Jannis-Mittenzwei force-pushed the feature/#233-add-nox-task-to-verify-dependency-declarations branch from 1ad32ce to 7b88101 Compare September 10, 2024 08:25
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
test/unit/dependencies_check_test.py Show resolved Hide resolved
test/unit/dependencies_check_test.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
exasol/toolbox/nox/_dependencies_check.py Outdated Show resolved Hide resolved
Nicoretti
Nicoretti previously approved these changes Sep 25, 2024
Comment on lines +27 to +29
def __init__(self, pyproject_toml: str):
self.illegal_dict: Dict[str, List[str]] = {}
self.content = pyproject_toml
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

after construction the class should be initialized properly

Comment on lines +31 to +70
def parse(self) -> "Dependencies":
def source_filter(version) -> bool:
for f in self.ILLEGAL_DEPENDENCIES:
if f in version:
return True
return False

def extract_dependencies(section) -> List[str]:
dependencies = []
for name, version in section.items():
if source_filter(version):
dependencies.append(f"{name} = {version}")
return dependencies

illegal: Dict[str, List[str]] = {}
toml = tomlkit.loads(self.content)
poetry = toml.get("tool", {}).get("poetry", {})

part = poetry.get("dependencies", {})
dependencies_list = extract_dependencies(part)
if dependencies_list:
illegal["tool.poetry.dependencies"] = dependencies_list

part = poetry.get("dev", {}).get("dependencies", {})
dependencies_list = extract_dependencies(part)
if dependencies_list:
illegal["tool.poetry.dev.dependencies"] = dependencies_list

part = poetry.get("group", {})
for group, content in part.items():
dependencies_list = extract_dependencies(content.get("dependencies", {}))
if dependencies_list:
illegal[f"tool.poetry.group.{group}.dependencies"] = dependencies_list

self.illegal_dict = illegal
return self

@property
def illegal(self) -> Dict[str, List[str]]:
return self.illegal_dict
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def parse(self) -> "Dependencies":
def source_filter(version) -> bool:
for f in self.ILLEGAL_DEPENDENCIES:
if f in version:
return True
return False
def extract_dependencies(section) -> List[str]:
dependencies = []
for name, version in section.items():
if source_filter(version):
dependencies.append(f"{name} = {version}")
return dependencies
illegal: Dict[str, List[str]] = {}
toml = tomlkit.loads(self.content)
poetry = toml.get("tool", {}).get("poetry", {})
part = poetry.get("dependencies", {})
dependencies_list = extract_dependencies(part)
if dependencies_list:
illegal["tool.poetry.dependencies"] = dependencies_list
part = poetry.get("dev", {}).get("dependencies", {})
dependencies_list = extract_dependencies(part)
if dependencies_list:
illegal["tool.poetry.dev.dependencies"] = dependencies_list
part = poetry.get("group", {})
for group, content in part.items():
dependencies_list = extract_dependencies(content.get("dependencies", {}))
if dependencies_list:
illegal[f"tool.poetry.group.{group}.dependencies"] = dependencies_list
self.illegal_dict = illegal
return self
@property
def illegal(self) -> Dict[str, List[str]]:
return self.illegal_dict
class Dependencies:
def __init__(self, illegal: Dict[str, List[str]] | None):
self._illegal = illegal or {}
@staticmethod
def parse(pyproject_toml: str) -> "Dependencies":
def _source_filter(version) -> bool:
ILLEGAL_SPECIFIERS = ['url', 'git', 'path']
return any(
specifier in version
for specifier in ILLEGAL_SPECIFIERS
)
def _extract_dependencies(section) -> List[str]:
dependencies = []
for name, version in section.items():
if _source_filter(version):
dependencies.append(f"{name} = {version}")
return dependencies
illegal: Dict[str, List[str]] = {}
toml = tomlkit.loads(pyproject_toml)
poetry = toml.get("tool", {}).get("poetry", {})
part = poetry.get("dependencies", {})
dependencies_list = _extract_dependencies(part)
if dependencies_list:
illegal["tool.poetry.dependencies"] = dependencies_list
part = poetry.get("dev", {}).get("dependencies", {})
dependencies_list = _extract_dependencies(part)
if dependencies_list:
illegal["tool.poetry.dev.dependencies"] = dependencies_list
part = poetry.get("group", {})
for group, content in part.items():
dependencies_list = _extract_dependencies(content.get("dependencies", {}))
if dependencies_list:
illegal[f"tool.poetry.group.{group}.dependencies"] = dependencies_list
return Dependencies(illegal)
@property
def illegal(self) -> Dict[str, List[str]]:
return self._illegal

)
def test_dependencies_check_report(toml, expected, capsys):
console = rich.console.Console()
dependencies = Dependencies(toml).parse()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
dependencies = Dependencies(toml).parse()
dependencies = Dependencies.parse(toml)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature Product feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

✨ Add nox task to verify dependency declarations
3 participants