Tiny, production-minded helper for the Shopify Admin GraphQL API
Project description
Shopify GraphQL Helper
Tiny, production‑minded helpers for the Shopify Admin GraphQL API.
Shopify's official Python SDK exposes GraphQL().execute only; this
package adds sessions, automatic cursor pagination, and per‑shop
throttling.
Features:
- 🚀 Simple, focused API for Shopify GraphQL Admin API
- 🔄 Automatic cursor-based pagination
- ⚡ Built-in request throttling
- 🔒 Thread-safe implementation
- 🧩 Transport layer abstraction
Note: This is not an official Shopify package.
Installation
pip install shopify-gql-helper
Quickstart
query = """
query ($first:Int!, $after:String) {
products(first:$first, after:$after, query:"status:ACTIVE") {
pageInfo { hasNextPage endCursor }
nodes { id legacyResourceId title handle }
}
}
"""
from shopify_gql_helper import ShopifySession, execute, cursor_pages
session = ShopifySession("https://example.myshopify.com", "shpca_123")
# One-off request
data = execute(session, query, {"first": 1})
# Stream all products
for product in cursor_pages(session, query, ["data", "products"]):
print(product["id"], product["title"])
connection_path lists the keys from the response root to the desired
connection, so ["data", "products"] points to data.products above.
Additional GraphQL variables can be supplied via the optional variables argument.
Throttling
Shopify uses a leaky bucket policy.
ShopifySession coordinates requests per shop through a shared
ThrottleController. Adjust min_bucket (default 50) and min_sleep
(default 1.0s) to tune how aggressively you consume the bucket. Reuse a
single ShopifySession per shop to avoid fighting the throttling
limits.
Configuration
ShopifySession
from shopify_gql_helper import ShopifySession
# Required parameters
session = ShopifySession(
shop_url="https://your-store.myshopify.com",
access_token="shpca_your_access_token"
)
# Optional parameters
session = ShopifySession(
shop_url="https://your-store.myshopify.com",
access_token="shpca_your_access_token",
api_version="2025-01", # default
min_bucket=50, # minimum available requests before throttling
min_sleep=1.0, # minimum sleep time between requests (seconds)
)
Throttling
Shopify uses a leaky bucket policy.
ShopifySession coordinates requests per shop through a shared
ThrottleController.
Important: Reuse a single ShopifySession per shop to properly respect rate limits.
Retries
Requests use a thread-local requests.Session with urllib3's Retry to handle
connect/read errors and 429/5xx responses with exponential backoff. Retry
counts can be tuned via SHOPIFY_GQL_RETRIES or
RequestsTransport(retries=...). A small amount of random jitter is added to
backoff delays (configurable via SHOPIFY_GQL_JITTER or
RequestsTransport(jitter=...)), and Retry-After headers are honored. By
default, a Connection: close header is sent with each request; pass
force_close=False to RequestsTransport to enable persistent connections.
Custom Transport
You can provide a custom transport that implements the Transport protocol:
from shopify_gql_helper.transport import Transport
class CustomTransport(Transport):
def post(self, url: str, headers: dict, json: dict, timeout: float):
raise NotImplementedError
Development
# Install with development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=shopify_gql_helper
Limitations / Roadmap
- Bulk operations
- Nested pagination (e.g., products → variants)
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
This project is not affiliated with Shopify Inc. Shopify is a registered trademark of Shopify Inc.
MIT. Not affiliated with Shopify.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file shopify_gql_helper-0.1.3.tar.gz.
File metadata
- Download URL: shopify_gql_helper-0.1.3.tar.gz
- Upload date:
- Size: 14.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6bc558b9dca4a5d307b9ebfe018faf1e6be0bc59c1882e92c37d4e6afe0219d6
|
|
| MD5 |
19ddda2d902704c128cee8a9a386b2ae
|
|
| BLAKE2b-256 |
819f46b2b9c620fa82dd00952e23490678cf9d2349ec5266c00f23865b644acf
|
Provenance
The following attestation bundles were made for shopify_gql_helper-0.1.3.tar.gz:
Publisher:
upload-python-package.yml on tulayha/shopify-gql-helper-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shopify_gql_helper-0.1.3.tar.gz -
Subject digest:
6bc558b9dca4a5d307b9ebfe018faf1e6be0bc59c1882e92c37d4e6afe0219d6 - Sigstore transparency entry: 452675182
- Sigstore integration time:
-
Permalink:
tulayha/shopify-gql-helper-py@7c984951dbb57bc59c8439e9484eaca6308f955c -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/tulayha
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
upload-python-package.yml@7c984951dbb57bc59c8439e9484eaca6308f955c -
Trigger Event:
release
-
Statement type:
File details
Details for the file shopify_gql_helper-0.1.3-py3-none-any.whl.
File metadata
- Download URL: shopify_gql_helper-0.1.3-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ebc6c23d2a8bb6e2c381975bb89afd9c159c9e59897a75a6b8310edfdbe9c04
|
|
| MD5 |
9144e880d1c6a95cc4de6d0ede3782a2
|
|
| BLAKE2b-256 |
be8b71e87489348f615a7290f222ec3b68bb5cc643a11ce0d945772e87d1f99a
|
Provenance
The following attestation bundles were made for shopify_gql_helper-0.1.3-py3-none-any.whl:
Publisher:
upload-python-package.yml on tulayha/shopify-gql-helper-py
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
shopify_gql_helper-0.1.3-py3-none-any.whl -
Subject digest:
7ebc6c23d2a8bb6e2c381975bb89afd9c159c9e59897a75a6b8310edfdbe9c04 - Sigstore transparency entry: 452675207
- Sigstore integration time:
-
Permalink:
tulayha/shopify-gql-helper-py@7c984951dbb57bc59c8439e9484eaca6308f955c -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/tulayha
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
upload-python-package.yml@7c984951dbb57bc59c8439e9484eaca6308f955c -
Trigger Event:
release
-
Statement type: