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 has_upper_bound method to VersionConstraint #833

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

radoering
Copy link
Member

@radoering radoering commented Feb 4, 2025

Required for python-poetry/poetry#10146

  • Added tests for changed code.
  • Updated documentation for changed code.

Summary by Sourcery

Tests:

  • Add tests for the has_upper_bound method.

Copy link

sourcery-ai bot commented Feb 4, 2025

Reviewer's Guide by Sourcery

This pull request adds a has_upper_bound method to the VersionConstraint class and implements it for the existing constraint types.

Class diagram for VersionConstraint hierarchy with new has_upper_bound method

classDiagram
    class VersionConstraint {
        <<abstract>>
        +is_any(): bool
        +is_simple(): bool
        +has_upper_bound(): bool
        +allows(version: Version): bool
    }
    class EmptyConstraint {
        +is_any(): bool
        +is_simple(): bool
        +has_upper_bound(): bool
        +allows(version: Version): bool
    }
    class VersionRangeConstraint {
        +allowed_max(): Version
        +has_upper_bound(): bool
        +allows_lower(other: VersionRangeConstraint): bool
    }
    class VersionUnion {
        -_ranges: List[VersionConstraint]
        +is_any(): bool
        +is_simple(): bool
        +has_upper_bound(): bool
        +allows(version: Version): bool
    }

    VersionConstraint <|-- EmptyConstraint
    VersionConstraint <|-- VersionRangeConstraint
    VersionConstraint <|-- VersionUnion

    note for VersionConstraint "New abstract method has_upper_bound added"
    note for EmptyConstraint "Always returns True"
    note for VersionRangeConstraint "Returns True if max is not None"
    note for VersionUnion "Returns True if all constraints have upper bounds"
Loading

File-Level Changes

Change Details Files
Introduce has_upper_bound method in VersionConstraint and implement it in subclasses.
  • Added abstract method has_upper_bound to VersionConstraint.
  • Implemented has_upper_bound for EmptyConstraint to return True.
  • Implemented has_upper_bound for VersionRangeConstraint to check if max is not None.
  • Implemented has_upper_bound for VersionUnion to check if all constraints have an upper bound.
src/poetry/core/constraints/version/version_constraint.py
src/poetry/core/constraints/version/empty_constraint.py
src/poetry/core/constraints/version/version_range_constraint.py
src/poetry/core/constraints/version/version_union.py
Add tests for the has_upper_bound method.
  • Added a new test case test_has_upper_bound with various constraints and expected results.
tests/constraints/version/test_version_constraint.py

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!
  • Generate a plan of action for an issue: Comment @sourcery-ai plan on
    an issue to generate a plan of action for it.

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey @radoering - I've reviewed your changes and found some issues that need to be addressed.

Blocking issues:

  • The has_upper_bound() implementation is incorrect - it returns True when any constraint has no upper bound (link)

Overall Comments:

  • The has_upper_bound() implementation in VersionUnion appears incorrect. It should return true only if ALL ranges have upper bounds, not if ANY range lacks an upper bound. The current logic is inverted.
  • Documentation is missing for the new has_upper_bound() method. Please add docstrings explaining the method's purpose and behavior.
Here's what I looked at during the review
  • 🔴 General issues: 1 blocking issue
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

src/poetry/core/constraints/version/version_union.py Outdated Show resolved Hide resolved
@radoering radoering force-pushed the version-constraint-upper-bound branch 2 times, most recently from 1b89b47 to b8be63c Compare February 4, 2025 17:21
@radoering
Copy link
Member Author

@sourcery-ai review

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey @radoering - I've reviewed your changes - here's some feedback:

Overall Comments:

  • Please add documentation (docstrings) for the new has_upper_bound method explaining what it means for a version constraint to have an upper bound
Here's what I looked at during the review
  • 🟢 General issues: all looks good
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@radoering radoering force-pushed the version-constraint-upper-bound branch from b8be63c to 87da248 Compare February 4, 2025 19:07
@radoering radoering requested a review from a team February 6, 2025 18:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants