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

Merged
merged 1 commit into from
Feb 12, 2025
Merged
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 @@ -19,20 +19,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 = {}

Check warning on line 23 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L23

Added line #L23 was not covered by tests

def check_name_consistent(package):

Check warning on line 25 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L25

Added line #L25 was 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 35 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L34-L35

Added lines #L34 - L35 were not covered by tests
if seen_spelling is None:
by_canonical_name[canonical] = package

Check warning on line 37 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L37

Added line #L37 was not covered by tests
elif seen_spelling != package:
raise Exception(

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
f'Encountered both "{seen_spelling}" and "{package}" in requirements '
'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

Check warning on line 48 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L48

Added line #L48 was not covered by tests
# Two groups: name[maybe,extras], and optionally a constraint
requirement_line_regex = re.compile(

Check warning on line 50 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L50

Added line #L50 was not covered by tests
r"([%s]+(?:\[[%s,\s]+\])?)([<>=][^#\s]+)?"
% (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 60 in setup.py

View check run for this annotation

Codecov / codecov/patch

setup.py#L60

Added line #L60 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,
# 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 @@ -41,7 +69,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 @@ -50,7 +79,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