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

fix: setup.py update using script #261

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 35 additions & 6 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,48 @@
"""
# UPDATED VIA SEMGREP - if you need to remove/modify this method remove this line and add a comment specifying why.

# e.g. {"django": "Django", "confluent-kafka": "confluent_kafka[avro]"}
by_canonical_name = {}

def check_name_consistent(package):
"""

Check warning on line 25 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L22-L25

Added lines #L22 - L25 were not covered by tests
Raise exception if package is named different ways.

This ensures that packages are named consistently so we can match
constraints to packages. It also ensures that if we require a package
with extras we don't constrain it without mentioning the extras (since
that too would interfere with matching constraints.)
"""
canonical = package.lower().replace('_', '-').split('[')[0]
seen_spelling = by_canonical_name.get(canonical)

Check warning on line 34 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L33-L34

Added lines #L33 - L34 were not covered by tests
if seen_spelling is None:
by_canonical_name[canonical] = package
elif seen_spelling != package:
raise Exception(
f'Encountered both "{seen_spelling}" and "{package}" in requirements '

Check warning on line 39 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L39

Added line #L39 was not covered by tests
'and constraints files; please use just one or the other.'
)

requirements = {}
constraint_files = set()

# groups "my-package-name<=x.y.z,..." into ("my-package-name", "<=x.y.z,...")
requirement_line_regex = re.compile(r"([a-zA-Z0-9-_.]+)([<>=][^#\s]+)?")
# groups "pkg<=x.y.z,..." into ("pkg", "<=x.y.z,...")
re_package_name_base_chars = r"a-zA-Z0-9\-_." # chars allowed in base package name
# Two groups: name[maybe,extras], and optionally a constraint
requirement_line_regex = re.compile(
r"([%s]+(?:\[[%s,\s]+\])?)([<>=][^#\s]+)?"

Check warning on line 50 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L47-L50

Added lines #L47 - L50 were not covered by tests
% (re_package_name_base_chars, re_package_name_base_chars)
)

def add_version_constraint_or_raise(current_line, current_requirements, add_if_not_present):
regex_match = requirement_line_regex.match(current_line)
if regex_match:
package = regex_match.group(1)
version_constraints = regex_match.group(2)
check_name_consistent(package)

Check warning on line 59 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L59

Added line #L59 was not covered by tests
existing_version_constraints = current_requirements.get(package, None)
# it's fine to add constraints to an unconstrained package, but raise an error if there are already
# constraints in place
# It's fine to add constraints to an unconstrained package,

Check warning on line 61 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L61

Added line #L61 was not covered by tests
# but raise an error if there are already constraints in place.
if existing_version_constraints and existing_version_constraints != version_constraints:
raise BaseException(f'Multiple constraint definitions found for {package}:'
f' "{existing_version_constraints}" and "{version_constraints}".'
Expand All @@ -40,7 +68,8 @@
if add_if_not_present or package in current_requirements:
current_requirements[package] = version_constraints

# process .in files and store the path to any constraint files that are pulled in
# Read requirements from .in files and store the path to any
# constraint files that are pulled in.
for path in requirements_paths:
with open(path) as reqs:
for line in reqs:
Expand All @@ -49,7 +78,7 @@
if line and line.startswith('-c') and not line.startswith('-c http'):
constraint_files.add(os.path.dirname(path) + '/' + line.split('#')[0].replace('-c', '').strip())

# process constraint files and add any new constraints found to existing requirements
# process constraint files: add constraints to existing requirements
for constraint_file in constraint_files:
with open(constraint_file) as reader:
for line in reader:
Expand Down
Loading