ocean icon indicating copy to clipboard operation
ocean copied to clipboard

[Core] Base URL formatting in Ocean class to ensure trailing slashes are removed from base URLs

Open shalev007 opened this issue 7 months ago • 5 comments

User description

Description

I'll break down the changes we made in a What-Why-How format:

What: We modified the base_url property in port_ocean/ocean.py to handle trailing slashes in URLs by adding rstrip('/') to the return value. The property now returns the base URL with any trailing slashes removed.

Why:

  1. To prevent double slashes in webhook URLs that are constructed using this base URL
  2. To ensure consistent URL formatting across all integrations

How:

  1. We modified the return statement to:
    • Add a fallback empty string (or "") to handle None cases
    • Wrap the expression in parentheses for clarity
    • Add rstrip('/') to remove trailing slashes

Type of change

Please leave one option from the following and delete the rest:

  • [X] Bug fix (non-breaking change which fixes an issue)
  • [ ] New feature (non-breaking change which adds functionality)
  • [ ] New Integration (non-breaking change which adds a new integration)
  • [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • [ ] Non-breaking change (fix of existing functionality that will not change current behavior)
  • [ ] Documentation (added/updated documentation)

All tests should be run against the port production environment(using a testing org).

Core testing checklist

  • [ ] Integration able to create all default resources from scratch
  • [ ] Resync finishes successfully
  • [ ] Resync able to create entities
  • [ ] Resync able to update entities
  • [ ] Resync able to detect and delete entities
  • [ ] Scheduled resync able to abort existing resync and start a new one
  • [ ] Tested with at least 2 integrations from scratch
  • [ ] Tested with Kafka and Polling event listeners
  • [ ] Tested deletion of entities that don't pass the selector

Integration testing checklist

  • [ ] Integration able to create all default resources from scratch
  • [ ] Resync able to create entities
  • [ ] Resync able to update entities
  • [ ] Resync able to detect and delete entities
  • [ ] Resync finishes successfully
  • [ ] If new resource kind is added or updated in the integration, add example raw data, mapping and expected result to the examples folder in the integration directory.
  • [ ] If resource kind is updated, run the integration with the example data and check if the expected result is achieved
  • [ ] If new resource kind is added or updated, validate that live-events for that resource are working as expected
  • [ ] Docs PR link here

Preflight checklist

  • [ ] Handled rate limiting
  • [ ] Handled pagination
  • [ ] Implemented the code in async
  • [ ] Support Multi account

Screenshots

Include screenshots from your environment showing how the resources of the integration will look.

API Documentation

Provide links to the API documentation used for this integration.


PR Type

Bug fix


Description

  • Ensures base_url property removes trailing slashes from URLs

  • Prevents double slashes in constructed webhook URLs

  • Adds fallback to empty string for missing base URL values


Changes walkthrough 📝

Relevant files
Bug fix
ocean.py
Strip trailing slashes from base_url property                       

port_ocean/ocean.py

  • Modified base_url property to strip trailing slashes from URLs
  • Added fallback to empty string if base URL is missing
  • Ensures consistent URL formatting and prevents double slashes
  • +3/-1     

    Need help?
  • Type /help how to ... in the comments thread for any questions about Qodo Merge usage.
  • Check out the documentation for more information.
  • shalev007 avatar May 14 '25 15:05 shalev007

    Qodo Merge was enabled for this repository. To continue using it, please link your Git account with your Qodo account here.

    PR Reviewer Guide 🔍

    Here are some key observations to aid the review process:

    ⏱️ Estimated effort to review: 1 🔵⚪⚪⚪⚪
    🧪 No relevant tests
    🔒 No security concerns identified
    ⚡ Recommended focus areas for review

    Edge Case Handling

    The code now handles None values with a fallback to empty string, but it might be worth considering how the code behaves if the base_url contains only slashes (e.g., "///"). The current implementation would return an empty string, which might not be the expected behavior.

        self.config.base_url or integration_config.get("app_host") or ""
    ).rstrip("/")
    

    qodo-code-review[bot] avatar May 14 '25 15:05 qodo-code-review[bot]

    Qodo Merge was enabled for this repository. To continue using it, please link your Git account with your Qodo account here.

    PR Code Suggestions ✨

    Explore these optional code suggestions:

    CategorySuggestion                                                                                                                                    Impact
    Possible issue
    Handle potential None values

    The current implementation strips trailing slashes but doesn't handle potential
    None values from self.config.base_url or integration_config.get("app_host").
    This could cause a TypeError if either returns None. Add type checking or use
    string coercion.

    port_ocean/ocean.py [145-147]

     return (
    -    self.config.base_url or integration_config.get("app_host") or ""
    +    (self.config.base_url or integration_config.get("app_host") or "")
     ).rstrip("/")
    
    • [ ] Apply / Chat
    Suggestion importance[1-10]: 7

    __

    Why: The suggestion correctly points out the risk of a TypeError if self.config.base_url or integration_config.get("app_host") are None, but the current code already uses or "" to ensure a string is always returned, making the suggestion a minor improvement in clarity rather than a critical fix.

    Medium
    • [ ] Update

    qodo-code-review[bot] avatar May 14 '25 15:05 qodo-code-review[bot]

    This pull request is automatically being deployed by Amplify Hosting (learn more).

    Access this pull request here: https://pr-1629.d1ftd8v2gowp8w.amplifyapp.com

    Code Coverage Artifact 📈: https://github.com/port-labs/ocean/actions/runs/15024234056/artifacts/3123856837

    Code Coverage Total Percentage: 80.53%

    github-actions[bot] avatar May 14 '25 15:05 github-actions[bot]

    Code Coverage Artifact 📈: https://github.com/port-labs/ocean/actions/runs/15135054776/artifacts/3158905617

    Code Coverage Total Percentage: 80.65%

    github-actions[bot] avatar May 20 '25 10:05 github-actions[bot]