diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f6d21e6b2..f5489a97a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,23 @@ +# Karrio 2025.5rc17 + +## Changes + +### Fix + +- fix: resolved module import error for karrio.server.admin.schemas.orgs in tenant GraphQL schema +- fix: enhanced UPS tracking status codes with comprehensive API documentation mapping +- fix: optimize N+1 query issues in tracking/shipment GraphQL resolvers with proper relationship prefetching +- fix: optimize N+1 query issues in constance configuration loading with bulk database operations +- fix: optimize N+1 query issues in data archiving tasks with bulk deletion for organization links +- fix: optimize N+1 query issues in carrier/organization access filtering for proxy endpoints +- fix: optimize N+1 query issues in tenant domain/client lookups with relationship prefetching +- fix: enhance all manager model querysets with organization relationship prefetching for multi-tenant mode +- fix: improve archiving query performance with optimized existence checks and batch processing +- fix: add database indexes for archiving date-based filters to reduce query execution time +- fix: refactor workflow scheduler error handling with cleaner diagnostic functions +- fix: add workflow-trigger table diagnostic migration for production database issues +- fix: resolve APILog proxy model index conflicts in Django migrations + # Karrio 2025.5rc16 ## Changes diff --git a/apps/api/karrio/server/VERSION b/apps/api/karrio/server/VERSION index b6b53465ce..e20c571b45 100644 --- a/apps/api/karrio/server/VERSION +++ b/apps/api/karrio/server/VERSION @@ -1 +1 @@ -2025.5rc16 \ No newline at end of file +2025.5rc17 \ No newline at end of file diff --git a/apps/www/openapi.yml b/apps/www/openapi.yml index eda54b3773..80857db3d4 100644 --- a/apps/www/openapi.yml +++ b/apps/www/openapi.yml @@ -14,7 +14,7 @@ info: ## Versioning When backwards-incompatible changes are made to the API, a new, dated version is released. - The current version is `2025.5rc16`. + The current version is `2025.5rc17`. Read our API changelog to learn more about backwards compatibility. @@ -84,7 +84,7 @@ info: All API requests must be made over [HTTPS](http://en.wikipedia.org/wiki/HTTP_Secure). API requests without authentication will also fail. title: Karrio API - version: 2025.5rc16 + version: 2025.5rc17 paths: /: get: diff --git a/bin/deploy-hobby b/bin/deploy-hobby index c056ebe15d..7409a85b6d 100755 --- a/bin/deploy-hobby +++ b/bin/deploy-hobby @@ -2,7 +2,7 @@ set -e -export KARRIO_TAG="${KARRIO_TAG:-2025.5rc16}" +export KARRIO_TAG="${KARRIO_TAG:-2025.5rc17}" export SENTRY_DSN="${SENTRY_DSN:-'https://public@sentry.example.com/1'}" SECRET_KEY=$(head -c 28 /dev/urandom | sha224sum -b | head -c 56) @@ -22,7 +22,7 @@ echo "" if ! [ -z "$1" ]; then export KARRIO_TAG=$1 else - echo "What version of Karrio would you like to install? (We default to '2025.5rc16')" + echo "What version of Karrio would you like to install? (We default to '2025.5rc17')" echo "You can check out available versions here: https://hub.docker.com/r/karrio/server/tags" read -r KARRIO_TAG_READ if [ -z "$KARRIO_TAG_READ" ]; then diff --git a/bin/deploy-insiders b/bin/deploy-insiders index e6b523eabb..872d1b6a8e 100755 --- a/bin/deploy-insiders +++ b/bin/deploy-insiders @@ -2,7 +2,7 @@ set -e -export KARRIO_TAG="${KARRIO_TAG:-2025.5rc16}" +export KARRIO_TAG="${KARRIO_TAG:-2025.5rc17}" export SENTRY_DSN="${SENTRY_DSN:-'https://public@sentry.example.com/1'}" SECRET_KEY=$(head -c 28 /dev/urandom | sha224sum -b | head -c 56) diff --git a/bin/update-source-version-freeze b/bin/update-source-version-freeze index e6529b2dea..c00557d390 100755 --- a/bin/update-source-version-freeze +++ b/bin/update-source-version-freeze @@ -96,23 +96,20 @@ generate_source_requirements() { egg_name="${BASH_REMATCH[3]}" subdir="${BASH_REMATCH[4]}" - # Handle different repository paths based on repo_type - case $repo in - "karrio-insiders") - subdir="ee/insiders/${subdir#../../ee/insiders/}" - ;; - "karrio-platform") - subdir="ee/platform/${subdir#../../ee/platform/}" - ;; - "karrio") - # Keep the subdirectory as is - ;; - "community") - # Remove existing community/plugins/ prefix if it exists, then add it back - subdir="${subdir#community/plugins/}" - subdir="community/plugins/${subdir}" - ;; - esac + # Handle different repository paths based on actual subdirectory structure + if [[ $subdir =~ ^../../ee/insiders/ ]]; then + # Remove ../../ee/insiders/ prefix to get direct path + subdir="${subdir#../../ee/insiders/}" + elif [[ $subdir =~ ^../../ee/platform/ ]]; then + # Remove ../../ee/platform/ prefix to get direct path + subdir="${subdir#../../ee/platform/}" + elif [[ $subdir =~ ^community/plugins/ ]]; then + # Keep community/plugins/ paths as-is + subdir="$subdir" + else + # Keep other subdirectories as-is (modules/, apps/, etc.) + subdir="$subdir" + fi # Replace git URL with local file path echo "${egg_name} @ file://\${PWD}/${subdir}" >>"$TMP_FILE" @@ -130,6 +127,56 @@ generate_source_requirements() { mv "$TMP_FILE" "$output_file" } +# Function to generate PyPI requirements for platform (special handling for karrio_server_tenants) +generate_platform_pypi_requirements() { + local input_file=$1 + local output_file=$2 + + echo "Generating ${output_file} with PyPI packages (keeping karrio_server_tenants as git)..." + + # Get target version + local target_version=$(cat apps/api/karrio/server/VERSION) + + # Create a temporary file + TMP_FILE=$(mktemp) + + # Copy the header (--extra-index-url line) + grep "^--extra-index" "$input_file" >"$TMP_FILE" + + # Process each line + while IFS= read -r line; do + if [[ $line == -e\ git+https://github.com/* ]]; then + # Extract egg name from git URL + if [[ $line =~ \#egg=([^&]+) ]]; then + egg_name="${BASH_REMATCH[1]}" + + # Keep karrio_server_tenants as git, convert all others to PyPI + if [[ "$egg_name" == "karrio_server_tenants" ]]; then + # Clean up the subdirectory path by removing ../../ prefix + cleaned_line=$(echo "$line" | sed 's|subdirectory=../../|subdirectory=|') + echo "$cleaned_line" >>"$TMP_FILE" + else + # Convert to PyPI package + pypi_package=$(convert_egg_to_pypi "$egg_name") + echo "$pypi_package==$target_version" >>"$TMP_FILE" + fi + else + # If we can't extract egg name, keep the original line + echo "$line" >>"$TMP_FILE" + fi + elif [[ $line != --extra-index* ]]; then + # Copy non-git requirements as-is + echo "$line" >>"$TMP_FILE" + fi + done <"$input_file" + + # Add a newline at the end + echo "" >>"$TMP_FILE" + + # Replace the original file + mv "$TMP_FILE" "$output_file" +} + # Generate source requirements for each variant generate_source_requirements "requirements.txt" "source.requirements.txt" "base" generate_source_requirements "requirements.insiders.txt" "source.requirements.insiders.txt" "insiders" @@ -141,6 +188,10 @@ generate_pypi_requirements "requirements.txt" "requirements.txt" # Generate PyPI requirements for insiders (convert git URLs to PyPI package versions) generate_pypi_requirements "requirements.insiders.txt" "requirements.insiders.txt" +# Generate PyPI requirements for platform (convert git URLs to PyPI package versions, but keep karrio_server_tenants as git) +generate_platform_pypi_requirements "requirements.platform.txt" "requirements.platform.txt" + echo "Generated source requirements files from requirements files" echo "Updated requirements.txt with PyPI package versions" echo "Updated requirements.insiders.txt with PyPI package versions" +echo "Updated requirements.platform.txt with PyPI package versions (except karrio_server_tenants)" diff --git a/bin/upgrade-hobby b/bin/upgrade-hobby index 963a8775f5..0d352c51fd 100755 --- a/bin/upgrade-hobby +++ b/bin/upgrade-hobby @@ -41,7 +41,7 @@ else fi [[ -f ".env" ]] && export $(cat .env | xargs) || (echo "No .env file found. Please create it with SECRET_KEY and DOMAIN set." && exit 1) -export KARRIO_TAG="${KARRIO_TAG:-2025.5rc16}" +export KARRIO_TAG="${KARRIO_TAG:-2025.5rc17}" # get karrio scripts mkdir -p ./karrio diff --git a/community b/community index 8ae3d895cb..f91ae56f39 160000 --- a/community +++ b/community @@ -1 +1 @@ -Subproject commit 8ae3d895cb6547fad675345aefc310314b08ec93 +Subproject commit f91ae56f393a4d0a3af0e536a1021798784dada6 diff --git a/docker/.env b/docker/.env index 7b10e0bd19..87b61b2484 100644 --- a/docker/.env +++ b/docker/.env @@ -30,7 +30,7 @@ REDIS_PORT=6379 # API - Configuration for the Nginx Reverse proxy. ############ -KARRIO_TAG=2025.5rc16 +KARRIO_TAG=2025.5rc17 KARRIO_HTTP_PORT=5002 ############ diff --git a/ee/insiders b/ee/insiders index c30046dfe3..daf37722b4 160000 --- a/ee/insiders +++ b/ee/insiders @@ -1 +1 @@ -Subproject commit c30046dfe3be15d3044c4c4061ba5791d5498c52 +Subproject commit daf37722b48febbf4c63ee99ebed416f528385a5 diff --git a/ee/platform b/ee/platform index a09789f35b..4f9b6904c1 160000 --- a/ee/platform +++ b/ee/platform @@ -1 +1 @@ -Subproject commit a09789f35b06bec4f644bf01693b748b17d66a4c +Subproject commit 4f9b6904c17ff3173c663ca3bc9e50966458d8bd diff --git a/modules/cli/pyproject.toml b/modules/cli/pyproject.toml index bfdc1f550b..d0719e7430 100644 --- a/modules/cli/pyproject.toml +++ b/modules/cli/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio-cli" -version = "2025.5rc16" +version = "2025.5rc17" description = "Command line interface for Karrio" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/australiapost/pyproject.toml b/modules/connectors/australiapost/pyproject.toml index 2791426b48..196e6ae938 100644 --- a/modules/connectors/australiapost/pyproject.toml +++ b/modules/connectors/australiapost/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_australiapost" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - Australia Post Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/canadapost/pyproject.toml b/modules/connectors/canadapost/pyproject.toml index 06f601c7ad..e7ce3805bb 100644 --- a/modules/connectors/canadapost/pyproject.toml +++ b/modules/connectors/canadapost/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_canadapost" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - Canada Post Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/dhl_express/pyproject.toml b/modules/connectors/dhl_express/pyproject.toml index 38b786da0e..767523444b 100644 --- a/modules/connectors/dhl_express/pyproject.toml +++ b/modules/connectors/dhl_express/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_dhl_express" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - DHL Express Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/dhl_parcel_de/pyproject.toml b/modules/connectors/dhl_parcel_de/pyproject.toml index 3cae081c51..55d155b97a 100644 --- a/modules/connectors/dhl_parcel_de/pyproject.toml +++ b/modules/connectors/dhl_parcel_de/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_dhl_parcel_de" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - DHL Parcel DE Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/dhl_poland/pyproject.toml b/modules/connectors/dhl_poland/pyproject.toml index aeda54294f..ffbb0f26e5 100644 --- a/modules/connectors/dhl_poland/pyproject.toml +++ b/modules/connectors/dhl_poland/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_dhl_poland" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - DHL Parcel Poland Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/dhl_universal/pyproject.toml b/modules/connectors/dhl_universal/pyproject.toml index 47504b23bf..1fcfc4f2ba 100644 --- a/modules/connectors/dhl_universal/pyproject.toml +++ b/modules/connectors/dhl_universal/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_dhl_universal" -version = "2025.5rc16" +version = "2025.5rc17" description = "DHL Universal Tracking karrio extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/fedex/pyproject.toml b/modules/connectors/fedex/pyproject.toml index 8a766fcc71..b4d166b0d4 100644 --- a/modules/connectors/fedex/pyproject.toml +++ b/modules/connectors/fedex/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_fedex" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - FedEx Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/generic/pyproject.toml b/modules/connectors/generic/pyproject.toml index c3e559928c..113caba19d 100644 --- a/modules/connectors/generic/pyproject.toml +++ b/modules/connectors/generic/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_generic" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - Custom carrier Shipping extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/laposte/pyproject.toml b/modules/connectors/laposte/pyproject.toml index 73c7ac80c4..78f373d6f7 100644 --- a/modules/connectors/laposte/pyproject.toml +++ b/modules/connectors/laposte/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_laposte" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - La Poste Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/purolator/pyproject.toml b/modules/connectors/purolator/pyproject.toml index 93dfafd770..330c865f2b 100644 --- a/modules/connectors/purolator/pyproject.toml +++ b/modules/connectors/purolator/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_purolator" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - Purolator Shipping extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/seko/pyproject.toml b/modules/connectors/seko/pyproject.toml index c6e9f3ddab..b803abc874 100644 --- a/modules/connectors/seko/pyproject.toml +++ b/modules/connectors/seko/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_seko" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - SEKO Logistics Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/sendle/pyproject.toml b/modules/connectors/sendle/pyproject.toml index 00f4e10847..60bf45ec70 100644 --- a/modules/connectors/sendle/pyproject.toml +++ b/modules/connectors/sendle/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_sendle" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - Sendle Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/ups/karrio/providers/ups/units.py b/modules/connectors/ups/karrio/providers/ups/units.py index 8361375ff7..18544fa5d7 100644 --- a/modules/connectors/ups/karrio/providers/ups/units.py +++ b/modules/connectors/ups/karrio/providers/ups/units.py @@ -631,12 +631,52 @@ class UploadDocumentType(utils.StrEnum): class TrackingStatus(utils.Enum): - on_hold = ["X"] - pending = ["MP"] - delivered = ["D"] - in_transit = [""] - delivery_failed = ["RS"] - out_for_delivery = ["OT"] + # Based on UPS API documentation - Status types and codes + # D = delivery information, I = in-progress, M/MV = manifest, U = update, X = exception + + # Delivered statuses + delivered = ["D", "FS", "KB", "F4"] # D=delivered type, FS=final status, KB=delivered, F4=delivered code + + # In-transit/processing statuses + in_transit = ["I", "OR", "DP", "AA", "AR", "AF", "AL", "OD", "DS", "IH", "AP"] + # I=in-progress, OR=origin scan, DP=departure scan, AA=arrival scan, AR=arrival scan + # AF=arrival facility, AL=arrival location, OD=on delivery vehicle, DS=departure scan + # IH=in-transit hub, AP=arrival at post office + + # Pending/manifest statuses + pending = ["M", "MV", "MP", "XD", "OA", "DD"] # M=manifest, MV=manifest void, MP=manifest pickup + # XD=signature required, OA=order assigned, DD=data downloaded + + # Out for delivery + out_for_delivery = ["OT", "OD", "OF", "DL"] # OT=out for delivery, OD=on delivery vehicle + # OF=out for final delivery, DL=delivery in progress + + # On hold/exception statuses + on_hold = ["X", "EX", "HX", "HD", "HI", "HS", "HU", "NH"] # X=exception type + # EX=exception, HX=hold exception, HD=hold at depot, HI=hold instruction + # HS=hold at station, HU=hold until, NH=no such number + + # Delivery failed/returned statuses + delivery_failed = ["RS", "RT", "RF", "RH", "UR", "UF", "CC"] # RS=return to sender + # RT=return to, RF=refused, RH=return home, UR=undeliverable return + # UF=unable to forward, CC=call center + + # Cancelled/void statuses + cancelled = ["VD", "CA", "CN", "CV"] # VD=void, CA=cancelled, CN=cancel, CV=cancel void + + # Ready for pickup + ready_for_pickup = ["RP", "UU", "PU", "AC", "WC"] # RP=ready for pickup, UU=unable to deliver + # PU=pickup, AC=available for collection, WC=will call + + # Delivery delayed + delivery_delayed = ["DY", "DE", "DD", "SD"] # DY=delay, DE=delayed, DD=delivery date, SD=service delay + + # Return to sender + return_to_sender = ["RS", "RT", "RH", "RU"] # RS=return to sender, RT=return to + # RH=return home, RU=return undeliverable + + # Unknown/unrecognized statuses + unknown = [] # For any unrecognized status codes # from https://developer.ups.com/api/reference/rating/appendix?loc=en_US diff --git a/modules/connectors/ups/pyproject.toml b/modules/connectors/ups/pyproject.toml index 4fb9f04eb8..bc96a29c21 100644 --- a/modules/connectors/ups/pyproject.toml +++ b/modules/connectors/ups/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_ups" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - UPS Shipping extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/usps/pyproject.toml b/modules/connectors/usps/pyproject.toml index f387868e46..100b336084 100644 --- a/modules/connectors/usps/pyproject.toml +++ b/modules/connectors/usps/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_usps" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - USPS Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/connectors/usps_international/pyproject.toml b/modules/connectors/usps_international/pyproject.toml index c26a2f102a..cab4e91160 100644 --- a/modules/connectors/usps_international/pyproject.toml +++ b/modules/connectors/usps_international/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_usps_international" -version = "2025.5rc16" +version = "2025.5rc17" description = "Karrio - USPS Shipping Extension" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/core/karrio/server/core/migrations/0006_add_api_log_requested_at_index.py b/modules/core/karrio/server/core/migrations/0006_add_api_log_requested_at_index.py new file mode 100644 index 0000000000..504bbf0ae1 --- /dev/null +++ b/modules/core/karrio/server/core/migrations/0006_add_api_log_requested_at_index.py @@ -0,0 +1,22 @@ +# Generated migration to add index to APIRequestLog table for archiving performance + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0005_alter_metafield_type_alter_metafield_value'), + ] + + operations = [ + migrations.RunSQL( + # Create index on requested_at for archiving queries + sql=[ + "CREATE INDEX IF NOT EXISTS api_log_requested_at_idx ON rest_framework_tracking_apirequestlog (requested_at);", + ], + reverse_sql=[ + "DROP INDEX IF EXISTS api_log_requested_at_idx;", + ], + ), + ] \ No newline at end of file diff --git a/modules/core/karrio/server/providers/models/carrier.py b/modules/core/karrio/server/providers/models/carrier.py index 975ddbdb14..37c0faa0fe 100644 --- a/modules/core/karrio/server/providers/models/carrier.py +++ b/modules/core/karrio/server/providers/models/carrier.py @@ -35,7 +35,14 @@ def get_queryset(self): class CarrierManager(Manager): def get_queryset(self): - return super().get_queryset().filter(is_system=False) + return ( + super() + .get_queryset() + .prefetch_related( + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) + .filter(is_system=False) + ) class SystemCarrierManager(models.Manager): @@ -45,6 +52,7 @@ def get_queryset(self): .get_queryset() .prefetch_related( "configs", + *(("active_orgs",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), ) .select_related( "created_by", diff --git a/modules/core/karrio/server/tracing/migrations/0007_tracingrecord_tracing_created_at_idx.py b/modules/core/karrio/server/tracing/migrations/0007_tracingrecord_tracing_created_at_idx.py new file mode 100644 index 0000000000..b556f46a15 --- /dev/null +++ b/modules/core/karrio/server/tracing/migrations/0007_tracingrecord_tracing_created_at_idx.py @@ -0,0 +1,19 @@ +# Generated by Django 5.2.5 on 2025-08-23 00:22 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("tracing", "0006_alter_tracingrecord_options_and_more"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddIndex( + model_name="tracingrecord", + index=models.Index(fields=["created_at"], name="tracing_created_at_idx"), + ), + ] diff --git a/modules/core/karrio/server/tracing/models.py b/modules/core/karrio/server/tracing/models.py index 714839e9ca..c3ecfe073a 100644 --- a/modules/core/karrio/server/tracing/models.py +++ b/modules/core/karrio/server/tracing/models.py @@ -46,6 +46,8 @@ class Meta: condition=models.Q(meta__workflow_id__isnull=False), name="workflow_idx", ), + # Index for archiving queries based on creation date + models.Index(fields=["created_at"], name="tracing_created_at_idx"), ] id = models.CharField( diff --git a/modules/core/pyproject.toml b/modules/core/pyproject.toml index df9aee24ff..380b2da412 100644 --- a/modules/core/pyproject.toml +++ b/modules/core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_core" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API Core module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/data/pyproject.toml b/modules/data/pyproject.toml index 86ac2e82d0..0d3f944c9b 100644 --- a/modules/data/pyproject.toml +++ b/modules/data/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_data" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API data import/export module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/documents/pyproject.toml b/modules/documents/pyproject.toml index bf74743a50..c0056428fb 100644 --- a/modules/documents/pyproject.toml +++ b/modules/documents/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_documents" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API apps module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/events/karrio/server/events/migrations/0010_event_event_created_at_idx.py b/modules/events/karrio/server/events/migrations/0010_event_event_created_at_idx.py new file mode 100644 index 0000000000..9c70c1d02f --- /dev/null +++ b/modules/events/karrio/server/events/migrations/0010_event_event_created_at_idx.py @@ -0,0 +1,19 @@ +# Generated by Django 5.2.5 on 2025-08-23 00:22 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("events", "0009_alter_webhook_enabled_events"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddIndex( + model_name="event", + index=models.Index(fields=["created_at"], name="event_created_at_idx"), + ), + ] diff --git a/modules/events/karrio/server/events/models.py b/modules/events/karrio/server/events/models.py index 9a03e7a002..730efdf17b 100644 --- a/modules/events/karrio/server/events/models.py +++ b/modules/events/karrio/server/events/models.py @@ -64,6 +64,8 @@ class Meta: condition=models.Q(data__id__isnull=False), name="event_object_idx", ), + # Index for archiving queries based on creation date + models.Index(fields=["created_at"], name="event_created_at_idx"), ] id = models.CharField( diff --git a/modules/events/karrio/server/events/task_definitions/base/archiving.py b/modules/events/karrio/server/events/task_definitions/base/archiving.py index 4aee449522..9736e3975e 100644 --- a/modules/events/karrio/server/events/task_definitions/base/archiving.py +++ b/modules/events/karrio/server/events/task_definitions/base/archiving.py @@ -24,35 +24,147 @@ def run_data_archiving(*args, **kwargs): days=conf.settings.TRACKER_DATA_RETENTION ) - shipping_data = manager.Shipment.objects.filter(created_at__lt=shipment_retention) - tracking_Data = manager.Tracking.objects.filter(created_at__lt=tracker_retention) - tracing_data = tracing.TracingRecord.objects.filter(created_at__lt=log_retention) - api_log_data = core.APILog.objects.filter(requested_at__lt=log_retention) - order_data = orders.Order.objects.filter(created_at__lt=order_retention) - event_data = events.Event.objects.filter(created_at__lt=log_retention) - - if any(tracing_data): + # Use efficient existence checks and batch processing + BATCH_SIZE = 1000 # Process in batches to avoid memory issues + + # Optimize querysets by only selecting required fields for existence checks + tracing_exists = tracing.TracingRecord.objects.filter(created_at__lt=log_retention).exists() + event_exists = events.Event.objects.filter(created_at__lt=log_retention).exists() + api_log_exists = core.APILog.objects.filter(requested_at__lt=log_retention).exists() + tracking_exists = manager.Tracking.objects.filter(created_at__lt=tracker_retention).exists() + shipping_exists = manager.Shipment.objects.filter(created_at__lt=shipment_retention).exists() + order_exists = orders.Order.objects.filter(created_at__lt=order_retention).exists() + + if tracing_exists: logger.info(">> archiving SDK tracing backlog...") - utils.failsafe(lambda: tracing_data.delete()) + tracing_data = tracing.TracingRecord.objects.filter(created_at__lt=log_retention) + utils.failsafe(lambda: _bulk_delete_tracing_data(tracing_data)) - if any(event_data): + if event_exists: logger.info(">> archiving events backlog...") + event_data = events.Event.objects.filter(created_at__lt=log_retention) utils.failsafe(lambda: event_data.delete()) - if any(api_log_data): + if api_log_exists: logger.info(">> archiving API request logs backlog...") + api_log_data = core.APILog.objects.filter(requested_at__lt=log_retention) utils.failsafe(lambda: api_log_data.delete()) - if any(tracking_Data): + if tracking_exists: logger.info(">> archiving tracking data backlog...") - utils.failsafe(lambda: tracking_Data.delete()) + tracking_data = manager.Tracking.objects.filter(created_at__lt=tracker_retention) + utils.failsafe(lambda: _bulk_delete_tracking_data(tracking_data)) - if any(shipping_data): + if shipping_exists: logger.info(">> archiving shipping data backlog...") - utils.failsafe(lambda: shipping_data.delete()) + shipping_data = manager.Shipment.objects.filter(created_at__lt=shipment_retention) + utils.failsafe(lambda: _bulk_delete_shipment_data(shipping_data)) - if any(order_data): + if order_exists: logger.info(">> archiving order data backlog...") - utils.failsafe(lambda: order_data.delete()) + order_data = orders.Order.objects.filter(created_at__lt=order_retention) + utils.failsafe(lambda: _bulk_delete_order_data(order_data)) logger.info("> ending scheduled backlog archiving!") + + +def _bulk_delete_tracing_data(tracing_queryset): + """Bulk delete tracing data to avoid N+1 queries with organization links.""" + BATCH_SIZE = 1000 + + try: + from karrio.server.orgs.models import TracingRecordLink + + # Process in batches to avoid memory issues + total_deleted = 0 + while True: + # Get a batch of IDs to delete + batch_ids = list(tracing_queryset.values_list('id', flat=True)[:BATCH_SIZE]) + + if not batch_ids: + break + + # Bulk delete TracingRecordLink entries first to avoid CASCADE N+1 queries + TracingRecordLink.objects.filter(item_id__in=batch_ids).delete() + + # Delete the tracing records in this batch + deleted_count = tracing_queryset.filter(id__in=batch_ids).delete()[0] + total_deleted += deleted_count + + logger.info(f"Deleted {deleted_count} tracing records (total: {total_deleted})") + + except ImportError: + # Organizations module not installed, just delete in batches + total_deleted = 0 + while True: + # Get a batch to delete + batch_ids = list(tracing_queryset.values_list('id', flat=True)[:BATCH_SIZE]) + + if not batch_ids: + break + + deleted_count = tracing_queryset.filter(id__in=batch_ids).delete()[0] + total_deleted += deleted_count + + logger.info(f"Deleted {deleted_count} tracing records (total: {total_deleted})") + + +def _bulk_delete_tracking_data(tracking_queryset): + """Bulk delete tracking data to avoid N+1 queries with organization links.""" + try: + from karrio.server.orgs.models import TrackingLink + + # Get the tracking record IDs that will be deleted + tracking_ids = list(tracking_queryset.values_list('id', flat=True)) + + if tracking_ids: + # Bulk delete TrackingLink entries first to avoid CASCADE N+1 queries + TrackingLink.objects.filter(item_id__in=tracking_ids).delete() + + # Now delete the tracking records themselves + tracking_queryset.delete() + + except ImportError: + # Organizations module not installed, just delete normally + tracking_queryset.delete() + + +def _bulk_delete_shipment_data(shipment_queryset): + """Bulk delete shipment data to avoid N+1 queries with organization links.""" + try: + from karrio.server.orgs.models import ShipmentLink + + # Get the shipment record IDs that will be deleted + shipment_ids = list(shipment_queryset.values_list('id', flat=True)) + + if shipment_ids: + # Bulk delete ShipmentLink entries first to avoid CASCADE N+1 queries + ShipmentLink.objects.filter(item_id__in=shipment_ids).delete() + + # Now delete the shipment records themselves + shipment_queryset.delete() + + except ImportError: + # Organizations module not installed, just delete normally + shipment_queryset.delete() + + +def _bulk_delete_order_data(order_queryset): + """Bulk delete order data to avoid N+1 queries with organization links.""" + try: + from karrio.server.orgs.models import OrderLink + + # Get the order record IDs that will be deleted + order_ids = list(order_queryset.values_list('id', flat=True)) + + if order_ids: + # Bulk delete OrderLink entries first to avoid CASCADE N+1 queries + OrderLink.objects.filter(item_id__in=order_ids).delete() + + # Now delete the order records themselves + order_queryset.delete() + + except ImportError: + # Organizations module not installed, just delete normally + order_queryset.delete() + diff --git a/modules/events/pyproject.toml b/modules/events/pyproject.toml index b40d80f9ac..29b1739572 100644 --- a/modules/events/pyproject.toml +++ b/modules/events/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_events" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API Events module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/graph/pyproject.toml b/modules/graph/pyproject.toml index 050f5e79a1..83ff38a8f8 100644 --- a/modules/graph/pyproject.toml +++ b/modules/graph/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_graph" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API Graph module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/manager/karrio/server/manager/migrations/0064_shipment_shipment_created_at_idx_and_more.py b/modules/manager/karrio/server/manager/migrations/0064_shipment_shipment_created_at_idx_and_more.py new file mode 100644 index 0000000000..0080b77783 --- /dev/null +++ b/modules/manager/karrio/server/manager/migrations/0064_shipment_shipment_created_at_idx_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.5 on 2025-08-23 00:22 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("manager", "0063_alter_commodity_value_currency"), + ("providers", "0084_alter_servicelevel_currency"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddIndex( + model_name="shipment", + index=models.Index(fields=["created_at"], name="shipment_created_at_idx"), + ), + migrations.AddIndex( + model_name="tracking", + index=models.Index(fields=["created_at"], name="tracking_created_at_idx"), + ), + ] diff --git a/modules/manager/karrio/server/manager/models.py b/modules/manager/karrio/server/manager/models.py index 3868c9b910..df25d911f6 100644 --- a/modules/manager/karrio/server/manager/models.py +++ b/modules/manager/karrio/server/manager/models.py @@ -19,18 +19,38 @@ class AddressManager(models.Manager): def get_queryset(self): - return super().get_queryset().defer("validation") + return ( + super() + .get_queryset() + .defer("validation") + .prefetch_related( + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) + ) class ParcelManager(models.Manager): def get_queryset(self): - return super().get_queryset().prefetch_related("items") + return ( + super() + .get_queryset() + .prefetch_related( + "items", + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) + ) class CommodityManager(models.Manager): def get_queryset(self): return ( - super().get_queryset().select_related("parent").prefetch_related("children") + super() + .get_queryset() + .select_related("parent") + .prefetch_related( + "children", + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) ) @@ -40,7 +60,10 @@ def get_queryset(self): super() .get_queryset() .select_related("duty_billing_address") - .prefetch_related("commodities") + .prefetch_related( + "commodities", + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) ) @@ -50,7 +73,10 @@ def get_queryset(self): super() .get_queryset() .select_related("pickup_carrier") - .prefetch_related("shipments") + .prefetch_related( + "shipments", + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) ) @@ -74,6 +100,7 @@ def get_queryset(self): .prefetch_related( "parcels", "carriers", + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), ) ) @@ -83,26 +110,42 @@ def get_queryset(self): return ( super() .get_queryset() - .defer("shipment") - .prefetch_related( - "tracking_carrier", - ) .select_related( "created_by", + "tracking_carrier", + "shipment", + "shipment__recipient", + "shipment__shipper", + ) + .prefetch_related( + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), ) ) class DocumentUploadRecordManager(models.Manager): def get_queryset(self): - return super().get_queryset().select_related("upload_carrier") + return ( + super() + .get_queryset() + .select_related("upload_carrier") + .prefetch_related( + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) + ) class ManifestManager(models.Manager): def get_queryset(self): # Load manifest details and associated carrier data efficiently return ( - super().get_queryset().select_related("manifest_carrier").defer("manifest") + super() + .get_queryset() + .select_related("manifest_carrier") + .defer("manifest") + .prefetch_related( + *(("org",) if conf.settings.MULTI_ORGANIZATIONS else tuple()), + ) ) @@ -536,6 +579,10 @@ class Meta: verbose_name = "Tracking Status" verbose_name_plural = "Tracking Statuses" ordering = ["-created_at"] + indexes = [ + # Index for archiving queries based on creation date + models.Index(fields=["created_at"], name="tracking_created_at_idx"), + ] id = models.CharField( max_length=50, @@ -676,6 +723,8 @@ class Meta: condition=models.Q(meta__object_id__isnull=False), name="shipment_service_idx", ), + # Index for archiving queries based on creation date + models.Index(fields=["created_at"], name="shipment_created_at_idx"), ] id = models.CharField( diff --git a/modules/manager/pyproject.toml b/modules/manager/pyproject.toml index 63f95ed0c2..a706a68193 100644 --- a/modules/manager/pyproject.toml +++ b/modules/manager/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_manager" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API Shipments manager module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/orders/karrio/server/orders/migrations/0017_order_order_created_at_idx.py b/modules/orders/karrio/server/orders/migrations/0017_order_order_created_at_idx.py new file mode 100644 index 0000000000..ed7afc0cbe --- /dev/null +++ b/modules/orders/karrio/server/orders/migrations/0017_order_order_created_at_idx.py @@ -0,0 +1,20 @@ +# Generated by Django 5.2.5 on 2025-08-23 00:22 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("manager", "0064_shipment_shipment_created_at_idx_and_more"), + ("orders", "0016_order_shipments"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AddIndex( + model_name="order", + index=models.Index(fields=["created_at"], name="order_created_at_idx"), + ), + ] diff --git a/modules/orders/karrio/server/orders/models.py b/modules/orders/karrio/server/orders/models.py index 2a8736514a..919badbc69 100644 --- a/modules/orders/karrio/server/orders/models.py +++ b/modules/orders/karrio/server/orders/models.py @@ -74,6 +74,10 @@ class Meta: verbose_name = "Order" verbose_name_plural = "Orders" ordering = ["-created_at"] + indexes = [ + # Index for archiving queries based on creation date + models.Index(fields=["created_at"], name="order_created_at_idx"), + ] id = models.CharField( max_length=50, diff --git a/modules/orders/pyproject.toml b/modules/orders/pyproject.toml index 2b7ee52a90..0cb6faae23 100644 --- a/modules/orders/pyproject.toml +++ b/modules/orders/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_orders" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API orders module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/pricing/pyproject.toml b/modules/pricing/pyproject.toml index 7e8f410565..fa19862462 100644 --- a/modules/pricing/pyproject.toml +++ b/modules/pricing/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_pricing" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API Pricing panel" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/proxy/pyproject.toml b/modules/proxy/pyproject.toml index 80721fca07..5d8e25e30f 100644 --- a/modules/proxy/pyproject.toml +++ b/modules/proxy/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio_server_proxy" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API Proxy module" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/sdk/pyproject.toml b/modules/sdk/pyproject.toml index d61145d59b..f60db2cbde 100644 --- a/modules/sdk/pyproject.toml +++ b/modules/sdk/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "karrio" -version = "2025.5rc16" +version = "2025.5rc17" description = "Multi-carrier shipping API integration with python" readme = "README.md" requires-python = ">=3.11" diff --git a/modules/soap/pyproject.toml b/modules/soap/pyproject.toml index b6fb1d2f33..b0cc83a44f 100644 --- a/modules/soap/pyproject.toml +++ b/modules/soap/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "py-soap" -version = "2025.5rc16" +version = "2025.5rc17" description = "SOAP client library" requires-python = ">=3.11" license = "Apache-2.0" diff --git a/packages/types/rest/api.ts b/packages/types/rest/api.ts index 575ff22e55..79bae526d0 100644 --- a/packages/types/rest/api.ts +++ b/packages/types/rest/api.ts @@ -2,9 +2,9 @@ /* eslint-disable */ /** * Karrio API - * Karrio is a multi-carrier shipping API that simplifies the integration of logistics carrier services. The Karrio API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. The Karrio API differs for every account as we release new versions. These docs are customized to your version of the API. ## Versioning When backwards-incompatible changes are made to the API, a new, dated version is released. The current version is `2025.5rc16`. Read our API changelog to learn more about backwards compatibility. As a precaution, use API versioning to check a new API version before committing to an upgrade. ## Environments The Karrio API offer the possibility to create and retrieve certain objects in `test_mode`. In development, it is therefore possible to add carrier connections, get live rates, buy labels, create trackers and schedule pickups in `test_mode`. ## Pagination All top-level API resources have support for bulk fetches via \"list\" API methods. For instance, you can list addresses, list shipments, and list trackers. These list API methods share a common structure, taking at least these two parameters: limit, and offset. Karrio utilizes offset-based pagination via the offset and limit parameters. Both parameters take a number as value (see below) and return objects in reverse chronological order. The offset parameter returns objects listed after an index. The limit parameter take a limit on the number of objects to be returned from 1 to 100. ```json { \"count\": 100, \"next\": \"/v1/shipments?limit=25&offset=50\", \"previous\": \"/v1/shipments?limit=25&offset=25\", \"results\": [ { ... }, ] } ``` ## Metadata Updateable Karrio objects—including Shipment and Order have a metadata parameter. You can use this parameter to attach key-value data to these Karrio objects. Metadata is useful for storing additional, structured information on an object. As an example, you could store your user\'s full name and corresponding unique identifier from your system on a Karrio Order object. Do not store any sensitive information as metadata. ## Authentication API keys are used to authenticate requests. You can view and manage your API keys in the Dashboard. Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth. Authentication to the API is performed via HTTP Basic Auth. Provide your API token as the basic auth username value. You do not need to provide a password. ```shell $ curl https://instance.api.com/v1/shipments \\ -u key_xxxxxx: # The colon prevents curl from asking for a password. ``` If you need to authenticate via bearer auth (e.g., for a cross-origin request), use `-H \"Authorization: Token key_xxxxxx\"` instead of `-u key_xxxxxx`. All API requests must be made over [HTTPS](http://en.wikipedia.org/wiki/HTTP_Secure). API requests without authentication will also fail. + * Karrio is a multi-carrier shipping API that simplifies the integration of logistics carrier services. The Karrio API is organized around REST. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. The Karrio API differs for every account as we release new versions. These docs are customized to your version of the API. ## Versioning When backwards-incompatible changes are made to the API, a new, dated version is released. The current version is `2025.5rc17`. Read our API changelog to learn more about backwards compatibility. As a precaution, use API versioning to check a new API version before committing to an upgrade. ## Environments The Karrio API offer the possibility to create and retrieve certain objects in `test_mode`. In development, it is therefore possible to add carrier connections, get live rates, buy labels, create trackers and schedule pickups in `test_mode`. ## Pagination All top-level API resources have support for bulk fetches via \"list\" API methods. For instance, you can list addresses, list shipments, and list trackers. These list API methods share a common structure, taking at least these two parameters: limit, and offset. Karrio utilizes offset-based pagination via the offset and limit parameters. Both parameters take a number as value (see below) and return objects in reverse chronological order. The offset parameter returns objects listed after an index. The limit parameter take a limit on the number of objects to be returned from 1 to 100. ```json { \"count\": 100, \"next\": \"/v1/shipments?limit=25&offset=50\", \"previous\": \"/v1/shipments?limit=25&offset=25\", \"results\": [ { ... }, ] } ``` ## Metadata Updateable Karrio objects—including Shipment and Order have a metadata parameter. You can use this parameter to attach key-value data to these Karrio objects. Metadata is useful for storing additional, structured information on an object. As an example, you could store your user\'s full name and corresponding unique identifier from your system on a Karrio Order object. Do not store any sensitive information as metadata. ## Authentication API keys are used to authenticate requests. You can view and manage your API keys in the Dashboard. Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth. Authentication to the API is performed via HTTP Basic Auth. Provide your API token as the basic auth username value. You do not need to provide a password. ```shell $ curl https://instance.api.com/v1/shipments \\ -u key_xxxxxx: # The colon prevents curl from asking for a password. ``` If you need to authenticate via bearer auth (e.g., for a cross-origin request), use `-H \"Authorization: Token key_xxxxxx\"` instead of `-u key_xxxxxx`. All API requests must be made over [HTTPS](http://en.wikipedia.org/wiki/HTTP_Secure). API requests without authentication will also fail. * - * The version of the OpenAPI document: 2025.5rc16 + * The version of the OpenAPI document: 2025.5rc17 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/requirements.insiders.txt b/requirements.insiders.txt index ec23b59c99..194938f704 100644 --- a/requirements.insiders.txt +++ b/requirements.insiders.txt @@ -50,46 +50,46 @@ jsonschema==4.25.1 jsonschema-specifications==2025.4.1 jstruct==2021.11 jwcrypto==1.5.6 -karrio==2025.5rc16 -karrio-australiapost==2025.5rc16 -karrio-canadapost==2025.5rc16 -karrio-chronopost==2025.5rc16 -karrio-dhl-express==2025.5rc16 -karrio-dhl-parcel-de==2025.5rc16 -karrio-dhl-poland==2025.5rc16 -karrio-dhl-universal==2025.5rc16 -karrio-dpd==2025.5rc16 -karrio-dtdc==2025.5rc16 -karrio-easypost==2025.5rc16 -karrio-easyship==2025.5rc16 -karrio-eshipper==2025.5rc16 -karrio-fedex==2025.5rc16 -karrio-freightcom==2025.5rc16 -karrio-generic==2025.5rc16 -karrio-laposte==2025.5rc16 -karrio-purolator==2025.5rc16 -karrio-sapient==2025.5rc16 -karrio-seko==2025.5rc16 -karrio-sendle==2025.5rc16 -karrio-server==2025.5rc16 -karrio-server-admin==2025.5rc16 -karrio-server-apps==2025.5rc16 -karrio-server-audit==2025.5rc16 -karrio-server-automation==2025.5rc16 -karrio-server-cloud==2025.5rc16 -karrio-server-core==2025.5rc16 -karrio-server-data==2025.5rc16 -karrio-server-documents==2025.5rc16 -karrio-server-events==2025.5rc16 -karrio-server-graph==2025.5rc16 -karrio-server-manager==2025.5rc16 -karrio-server-orders==2025.5rc16 -karrio-server-orgs==2025.5rc16 -karrio-server-pricing==2025.5rc16 -karrio-server-proxy==2025.5rc16 -karrio-ups==2025.5rc16 -karrio-usps==2025.5rc16 -karrio-usps-international==2025.5rc16 +karrio==2025.5rc17 +karrio-australiapost==2025.5rc17 +karrio-canadapost==2025.5rc17 +karrio-chronopost==2025.5rc17 +karrio-dhl-express==2025.5rc17 +karrio-dhl-parcel-de==2025.5rc17 +karrio-dhl-poland==2025.5rc17 +karrio-dhl-universal==2025.5rc17 +karrio-dpd==2025.5rc17 +karrio-dtdc==2025.5rc17 +karrio-easypost==2025.5rc17 +karrio-easyship==2025.5rc17 +karrio-eshipper==2025.5rc17 +karrio-fedex==2025.5rc17 +karrio-freightcom==2025.5rc17 +karrio-generic==2025.5rc17 +karrio-laposte==2025.5rc17 +karrio-purolator==2025.5rc17 +karrio-sapient==2025.5rc17 +karrio-seko==2025.5rc17 +karrio-sendle==2025.5rc17 +karrio-server==2025.5rc17 +karrio-server-admin==2025.5rc17 +karrio-server-apps==2025.5rc17 +karrio-server-audit==2025.5rc17 +karrio-server-automation==2025.5rc17 +karrio-server-cloud==2025.5rc17 +karrio-server-core==2025.5rc17 +karrio-server-data==2025.5rc17 +karrio-server-documents==2025.5rc17 +karrio-server-events==2025.5rc17 +karrio-server-graph==2025.5rc17 +karrio-server-manager==2025.5rc17 +karrio-server-orders==2025.5rc17 +karrio-server-orgs==2025.5rc17 +karrio-server-pricing==2025.5rc17 +karrio-server-proxy==2025.5rc17 +karrio-ups==2025.5rc17 +karrio-usps==2025.5rc17 +karrio-usps-international==2025.5rc17 lia-web==0.2.3 lxml==4.9.4 lxml-stubs==0.5.1 @@ -99,7 +99,7 @@ oauthlib==3.3.1 packaging==25.0 phonenumbers==9.0.12 pillow==11.3.0 -posthog==6.6.0 +posthog==6.6.1 psutil==7.0.0 psycopg2-binary==2.9.10 py-soap==2020.3.2 diff --git a/requirements.platform.txt b/requirements.platform.txt index 84c902f405..20180784ec 100644 --- a/requirements.platform.txt +++ b/requirements.platform.txt @@ -51,47 +51,47 @@ jsonschema==4.25.1 jsonschema-specifications==2025.4.1 jstruct==2021.11 jwcrypto==1.5.6 --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio&subdirectory=modules/sdk --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_australiapost&subdirectory=modules/connectors/australiapost --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_canadapost&subdirectory=modules/connectors/canadapost --e git+https://github.com/karrioapi/community.git@8ae3d895cb6547fad675345aefc310314b08ec93#egg=karrio_chronopost&subdirectory=community/plugins/chronopost --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_dhl_express&subdirectory=modules/connectors/dhl_express --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_dhl_parcel_de&subdirectory=modules/connectors/dhl_parcel_de --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_dhl_poland&subdirectory=modules/connectors/dhl_poland --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_dhl_universal&subdirectory=modules/connectors/dhl_universal --e git+https://github.com/karrioapi/community.git@8ae3d895cb6547fad675345aefc310314b08ec93#egg=karrio_dpd&subdirectory=community/plugins/dpd --e git+https://github.com/karrioapi/karrio-insiders.git@c30046dfe3be15d3044c4c4061ba5791d5498c52#egg=karrio_dtdc&subdirectory=../../ee/insiders/modules/connectors/dtdc --e git+https://github.com/karrioapi/community.git@8ae3d895cb6547fad675345aefc310314b08ec93#egg=karrio_easypost&subdirectory=community/plugins/easypost --e git+https://github.com/karrioapi/community.git@8ae3d895cb6547fad675345aefc310314b08ec93#egg=karrio_easyship&subdirectory=community/plugins/easyship --e git+https://github.com/karrioapi/community.git@8ae3d895cb6547fad675345aefc310314b08ec93#egg=karrio_eshipper&subdirectory=community/plugins/eshipper --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_fedex&subdirectory=modules/connectors/fedex --e git+https://github.com/karrioapi/community.git@8ae3d895cb6547fad675345aefc310314b08ec93#egg=karrio_freightcom&subdirectory=community/plugins/freightcom --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_generic&subdirectory=modules/connectors/generic --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_laposte&subdirectory=modules/connectors/laposte --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_purolator&subdirectory=modules/connectors/purolator --e git+https://github.com/karrioapi/community.git@8ae3d895cb6547fad675345aefc310314b08ec93#egg=karrio_sapient&subdirectory=community/plugins/sapient --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_seko&subdirectory=modules/connectors/seko --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_sendle&subdirectory=modules/connectors/sendle --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server&subdirectory=apps/api --e git+https://github.com/karrioapi/karrio-insiders.git@c30046dfe3be15d3044c4c4061ba5791d5498c52#egg=karrio_server_admin&subdirectory=../../ee/insiders/modules/admin --e git+https://github.com/karrioapi/karrio-insiders.git@c30046dfe3be15d3044c4c4061ba5791d5498c52#egg=karrio_server_apps&subdirectory=../../ee/insiders/modules/apps --e git+https://github.com/karrioapi/karrio-insiders.git@c30046dfe3be15d3044c4c4061ba5791d5498c52#egg=karrio_server_audit&subdirectory=../../ee/insiders/modules/audit --e git+https://github.com/karrioapi/karrio-insiders.git@c30046dfe3be15d3044c4c4061ba5791d5498c52#egg=karrio_server_automation&subdirectory=../../ee/insiders/modules/automation --e git+https://github.com/karrioapi/karrio-insiders.git@c30046dfe3be15d3044c4c4061ba5791d5498c52#egg=karrio_server_cloud&subdirectory=../../ee/insiders/modules/cloud --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_core&subdirectory=modules/core --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_data&subdirectory=modules/data --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_documents&subdirectory=modules/documents --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_events&subdirectory=modules/events --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_graph&subdirectory=modules/graph --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_manager&subdirectory=modules/manager --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_orders&subdirectory=modules/orders --e git+https://github.com/karrioapi/karrio-insiders.git@c30046dfe3be15d3044c4c4061ba5791d5498c52#egg=karrio_server_orgs&subdirectory=../../ee/insiders/modules/orgs --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_pricing&subdirectory=modules/pricing --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_server_proxy&subdirectory=modules/proxy --e git+https://github.com/karrioapi/karrio-platform.git@a09789f35b06bec4f644bf01693b748b17d66a4c#egg=karrio_server_tenants&subdirectory=../../ee/platform/modules/tenants --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_ups&subdirectory=modules/connectors/ups --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_usps&subdirectory=modules/connectors/usps --e git+https://github.com/karrioapi/karrio.git@25f73f76c71f93ed8e24ac6ded75a5ef4c00b650#egg=karrio_usps_international&subdirectory=modules/connectors/usps_international +karrio==2025.5rc17 +karrio-australiapost==2025.5rc17 +karrio-canadapost==2025.5rc17 +karrio-chronopost==2025.5rc17 +karrio-dhl-express==2025.5rc17 +karrio-dhl-parcel-de==2025.5rc17 +karrio-dhl-poland==2025.5rc17 +karrio-dhl-universal==2025.5rc17 +karrio-dpd==2025.5rc17 +karrio-dtdc==2025.5rc17 +karrio-easypost==2025.5rc17 +karrio-easyship==2025.5rc17 +karrio-eshipper==2025.5rc17 +karrio-fedex==2025.5rc17 +karrio-freightcom==2025.5rc17 +karrio-generic==2025.5rc17 +karrio-laposte==2025.5rc17 +karrio-purolator==2025.5rc17 +karrio-sapient==2025.5rc17 +karrio-seko==2025.5rc17 +karrio-sendle==2025.5rc17 +karrio-server==2025.5rc17 +karrio-server-admin==2025.5rc17 +karrio-server-apps==2025.5rc17 +karrio-server-audit==2025.5rc17 +karrio-server-automation==2025.5rc17 +karrio-server-cloud==2025.5rc17 +karrio-server-core==2025.5rc17 +karrio-server-data==2025.5rc17 +karrio-server-documents==2025.5rc17 +karrio-server-events==2025.5rc17 +karrio-server-graph==2025.5rc17 +karrio-server-manager==2025.5rc17 +karrio-server-orders==2025.5rc17 +karrio-server-orgs==2025.5rc17 +karrio-server-pricing==2025.5rc17 +karrio-server-proxy==2025.5rc17 +-e git+https://github.com/karrioapi/karrio-platform.git@4f9b6904c17ff3173c663ca3bc9e50966458d8bd#egg=karrio_server_tenants&subdirectory=ee/platform/modules/tenants +karrio-ups==2025.5rc17 +karrio-usps==2025.5rc17 +karrio-usps-international==2025.5rc17 lia-web==0.2.3 lxml==4.9.4 lxml-stubs==0.5.1 @@ -101,7 +101,7 @@ oauthlib==3.3.1 packaging==25.0 phonenumbers==9.0.12 pillow==11.3.0 -posthog==6.6.0 +posthog==6.6.1 psutil==7.0.0 psycopg2-binary==2.9.10 py-soap==2020.3.2 @@ -140,3 +140,4 @@ webencodings==0.5.1 whitenoise==6.9.0 xmltodict==0.14.2 zopfli==0.2.3.post1 + diff --git a/requirements.txt b/requirements.txt index 22bf408c43..c569c78212 100644 --- a/requirements.txt +++ b/requirements.txt @@ -46,39 +46,39 @@ jsonschema==4.25.1 jsonschema-specifications==2025.4.1 jstruct==2021.11 jwcrypto==1.5.6 -karrio==2025.5rc16 -karrio-australiapost==2025.5rc16 -karrio-canadapost==2025.5rc16 -karrio-chronopost==2025.5rc16 -karrio-dhl-express==2025.5rc16 -karrio-dhl-parcel-de==2025.5rc16 -karrio-dhl-poland==2025.5rc16 -karrio-dhl-universal==2025.5rc16 -karrio-dpd==2025.5rc16 -karrio-easypost==2025.5rc16 -karrio-easyship==2025.5rc16 -karrio-eshipper==2025.5rc16 -karrio-fedex==2025.5rc16 -karrio-freightcom==2025.5rc16 -karrio-generic==2025.5rc16 -karrio-laposte==2025.5rc16 -karrio-purolator==2025.5rc16 -karrio-sapient==2025.5rc16 -karrio-seko==2025.5rc16 -karrio-sendle==2025.5rc16 -karrio-server==2025.5rc16 -karrio-server-core==2025.5rc16 -karrio-server-data==2025.5rc16 -karrio-server-documents==2025.5rc16 -karrio-server-events==2025.5rc16 -karrio-server-graph==2025.5rc16 -karrio-server-manager==2025.5rc16 -karrio-server-orders==2025.5rc16 -karrio-server-pricing==2025.5rc16 -karrio-server-proxy==2025.5rc16 -karrio-ups==2025.5rc16 -karrio-usps==2025.5rc16 -karrio-usps-international==2025.5rc16 +karrio==2025.5rc17 +karrio-australiapost==2025.5rc17 +karrio-canadapost==2025.5rc17 +karrio-chronopost==2025.5rc17 +karrio-dhl-express==2025.5rc17 +karrio-dhl-parcel-de==2025.5rc17 +karrio-dhl-poland==2025.5rc17 +karrio-dhl-universal==2025.5rc17 +karrio-dpd==2025.5rc17 +karrio-easypost==2025.5rc17 +karrio-easyship==2025.5rc17 +karrio-eshipper==2025.5rc17 +karrio-fedex==2025.5rc17 +karrio-freightcom==2025.5rc17 +karrio-generic==2025.5rc17 +karrio-laposte==2025.5rc17 +karrio-purolator==2025.5rc17 +karrio-sapient==2025.5rc17 +karrio-seko==2025.5rc17 +karrio-sendle==2025.5rc17 +karrio-server==2025.5rc17 +karrio-server-core==2025.5rc17 +karrio-server-data==2025.5rc17 +karrio-server-documents==2025.5rc17 +karrio-server-events==2025.5rc17 +karrio-server-graph==2025.5rc17 +karrio-server-manager==2025.5rc17 +karrio-server-orders==2025.5rc17 +karrio-server-pricing==2025.5rc17 +karrio-server-proxy==2025.5rc17 +karrio-ups==2025.5rc17 +karrio-usps==2025.5rc17 +karrio-usps-international==2025.5rc17 lia-web==0.2.3 lxml==4.9.4 lxml-stubs==0.5.1 @@ -88,7 +88,7 @@ oauthlib==3.3.1 packaging==25.0 phonenumbers==9.0.12 pillow==11.3.0 -posthog==6.6.0 +posthog==6.6.1 psutil==7.0.0 psycopg2-binary==2.9.10 py-soap==2020.3.2 diff --git a/schemas/openapi.yml b/schemas/openapi.yml index 9d6f17dd87..3535d9b7eb 100644 --- a/schemas/openapi.yml +++ b/schemas/openapi.yml @@ -14,7 +14,7 @@ info: ## Versioning When backwards-incompatible changes are made to the API, a new, dated version is released. - The current version is `2025.5rc16`. + The current version is `2025.5rc17`. Read our API changelog to learn more about backwards compatibility. @@ -84,7 +84,7 @@ info: All API requests must be made over [HTTPS](http://en.wikipedia.org/wiki/HTTP_Secure). API requests without authentication will also fail. title: Karrio API - version: 2025.5rc16 + version: 2025.5rc17 paths: /: get: diff --git a/source.requirements.insiders.txt b/source.requirements.insiders.txt index d7298846a9..4882de6ec6 100644 --- a/source.requirements.insiders.txt +++ b/source.requirements.insiders.txt @@ -59,7 +59,7 @@ karrio_dhl_parcel_de @ file://${PWD}/modules/connectors/dhl_parcel_de karrio_dhl_poland @ file://${PWD}/modules/connectors/dhl_poland karrio_dhl_universal @ file://${PWD}/modules/connectors/dhl_universal karrio_dpd @ file://${PWD}/community/plugins/dpd -karrio_dtdc @ file://${PWD}/ee/insiders/modules/connectors/dtdc +karrio_dtdc @ file://${PWD}/modules/connectors/dtdc karrio_easypost @ file://${PWD}/community/plugins/easypost karrio_easyship @ file://${PWD}/community/plugins/easyship karrio_eshipper @ file://${PWD}/community/plugins/eshipper @@ -72,11 +72,11 @@ karrio_sapient @ file://${PWD}/community/plugins/sapient karrio_seko @ file://${PWD}/modules/connectors/seko karrio_sendle @ file://${PWD}/modules/connectors/sendle karrio_server @ file://${PWD}/apps/api -karrio_server_admin @ file://${PWD}/ee/insiders/modules/admin -karrio_server_apps @ file://${PWD}/ee/insiders/modules/apps -karrio_server_audit @ file://${PWD}/ee/insiders/modules/audit -karrio_server_automation @ file://${PWD}/ee/insiders/modules/automation -karrio_server_cloud @ file://${PWD}/ee/insiders/modules/cloud +karrio_server_admin @ file://${PWD}/modules/admin +karrio_server_apps @ file://${PWD}/modules/apps +karrio_server_audit @ file://${PWD}/modules/audit +karrio_server_automation @ file://${PWD}/modules/automation +karrio_server_cloud @ file://${PWD}/modules/cloud karrio_server_core @ file://${PWD}/modules/core karrio_server_data @ file://${PWD}/modules/data karrio_server_documents @ file://${PWD}/modules/documents @@ -84,7 +84,7 @@ karrio_server_events @ file://${PWD}/modules/events karrio_server_graph @ file://${PWD}/modules/graph karrio_server_manager @ file://${PWD}/modules/manager karrio_server_orders @ file://${PWD}/modules/orders -karrio_server_orgs @ file://${PWD}/ee/insiders/modules/orgs +karrio_server_orgs @ file://${PWD}/modules/orgs karrio_server_pricing @ file://${PWD}/modules/pricing karrio_server_proxy @ file://${PWD}/modules/proxy karrio_ups @ file://${PWD}/modules/connectors/ups @@ -99,7 +99,7 @@ oauthlib==3.3.1 packaging==25.0 phonenumbers==9.0.12 pillow==11.3.0 -posthog==6.6.0 +posthog==6.6.1 psutil==7.0.0 psycopg2-binary==2.9.10 py-soap==2020.3.2 diff --git a/source.requirements.platform.txt b/source.requirements.platform.txt index 336273b59e..effb28d2b5 100644 --- a/source.requirements.platform.txt +++ b/source.requirements.platform.txt @@ -60,7 +60,7 @@ karrio_dhl_parcel_de @ file://${PWD}/modules/connectors/dhl_parcel_de karrio_dhl_poland @ file://${PWD}/modules/connectors/dhl_poland karrio_dhl_universal @ file://${PWD}/modules/connectors/dhl_universal karrio_dpd @ file://${PWD}/community/plugins/dpd -karrio_dtdc @ file://${PWD}/ee/insiders/modules/connectors/dtdc +karrio_dtdc @ file://${PWD}/modules/connectors/dtdc karrio_easypost @ file://${PWD}/community/plugins/easypost karrio_easyship @ file://${PWD}/community/plugins/easyship karrio_eshipper @ file://${PWD}/community/plugins/eshipper @@ -73,11 +73,11 @@ karrio_sapient @ file://${PWD}/community/plugins/sapient karrio_seko @ file://${PWD}/modules/connectors/seko karrio_sendle @ file://${PWD}/modules/connectors/sendle karrio_server @ file://${PWD}/apps/api -karrio_server_admin @ file://${PWD}/ee/insiders/modules/admin -karrio_server_apps @ file://${PWD}/ee/insiders/modules/apps -karrio_server_audit @ file://${PWD}/ee/insiders/modules/audit -karrio_server_automation @ file://${PWD}/ee/insiders/modules/automation -karrio_server_cloud @ file://${PWD}/ee/insiders/modules/cloud +karrio_server_admin @ file://${PWD}/modules/admin +karrio_server_apps @ file://${PWD}/modules/apps +karrio_server_audit @ file://${PWD}/modules/audit +karrio_server_automation @ file://${PWD}/modules/automation +karrio_server_cloud @ file://${PWD}/modules/cloud karrio_server_core @ file://${PWD}/modules/core karrio_server_data @ file://${PWD}/modules/data karrio_server_documents @ file://${PWD}/modules/documents @@ -85,10 +85,10 @@ karrio_server_events @ file://${PWD}/modules/events karrio_server_graph @ file://${PWD}/modules/graph karrio_server_manager @ file://${PWD}/modules/manager karrio_server_orders @ file://${PWD}/modules/orders -karrio_server_orgs @ file://${PWD}/ee/insiders/modules/orgs +karrio_server_orgs @ file://${PWD}/modules/orgs karrio_server_pricing @ file://${PWD}/modules/pricing karrio_server_proxy @ file://${PWD}/modules/proxy -karrio_server_tenants @ file://${PWD}/ee/platform/modules/tenants +karrio_server_tenants @ file://${PWD}/modules/tenants karrio_ups @ file://${PWD}/modules/connectors/ups karrio_usps @ file://${PWD}/modules/connectors/usps karrio_usps_international @ file://${PWD}/modules/connectors/usps_international @@ -101,7 +101,7 @@ oauthlib==3.3.1 packaging==25.0 phonenumbers==9.0.12 pillow==11.3.0 -posthog==6.6.0 +posthog==6.6.1 psutil==7.0.0 psycopg2-binary==2.9.10 py-soap==2020.3.2 diff --git a/source.requirements.txt b/source.requirements.txt index 3351372a61..4b666c8587 100644 --- a/source.requirements.txt +++ b/source.requirements.txt @@ -88,7 +88,7 @@ oauthlib==3.3.1 packaging==25.0 phonenumbers==9.0.12 pillow==11.3.0 -posthog==6.6.0 +posthog==6.6.1 psutil==7.0.0 psycopg2-binary==2.9.10 py-soap==2020.3.2