Name | etsy-python JSON |
Version |
1.0.20
JSON |
| download |
home_page | None |
Summary | Etsy API Client Library for Python |
upload_time | 2025-08-22 12:18:08 |
maintainer | None |
docs_url | None |
author | Amit Ray |
requires_python | None |
license | None |
keywords |
python
etsy
api
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
<p align="center">
<h1 align="center">Etsy API Client Library for Python</h1>
</p>
<p align="center">
<img src="https://img.shields.io/pypi/v/etsy-python?style=for-the-badge&color=0080ff&style=default" alt="PyPI version">
<img src="https://img.shields.io/github/license/amitray007/etsy-python-sdk?style=default&color=0080ff" alt="license">
<img src="https://img.shields.io/github/last-commit/amitray007/etsy-python-sdk?style=default&color=0080ff" alt="last-commit">
<img src="https://img.shields.io/github/languages/top/amitray007/etsy-python-sdk?style=default&color=0080ff" alt="repo-top-language">
<p>
<p align="center">
<img src="https://www.etsy.com/images/apps/documentation/edc_badge3.gif" alt="etsy-api-badge">
</p>
---
## Table of Contents
- [Overview](#overview)
- [Features](#features)
- [Requirements](#requirements)
- [Installation](#installation)
- [Install from PyPI](#install-from-pypi)
- [Install from Source](#install-from-source)
- [Dependencies](#dependencies)
- [Quick Start](#quick-start)
- [1. Authentication Setup](#1-authentication-setup)
- [2. Initialize Client Session](#2-initialize-client-session)
- [3. Make API Calls](#3-make-api-calls)
- [Usage Examples](#usage-examples)
- [Managing Listings](#managing-listings)
- [Working with Receipts](#working-with-receipts)
- [Uploading Images](#uploading-images)
- [Handling Shipping Profiles](#handling-shipping-profiles)
- [Token Management with Callback](#token-management-with-callback)
- [API Resources](#api-resources)
- [Core Resources](#core-resources)
- [Media Resources](#media-resources)
- [Commerce Resources](#commerce-resources)
- [Shop Management](#shop-management)
- [Error Handling](#error-handling)
- [Environment Configuration](#environment-configuration)
- [Project Structure](#project-structure)
- [Contributing](#contributing)
- [Development Setup](#development-setup)
- [Support](#support)
- [License](#license)
- [Changelog](#changelog)
---
## Overview
A comprehensive Python client library for the Etsy API v3, providing a modern, type-safe interface for interacting with the Etsy marketplace. This SDK simplifies OAuth 2.0 authentication, automatic token refresh, and provides complete coverage of Etsy's API endpoints.
## Features
✨ **Complete API Coverage** - Full support for Etsy API v3 endpoints including:
- Listings management (create, update, delete, search)
- Shop operations (sections, policies, production partners)
- Receipt and transaction handling
- Shipping profiles and destinations
- Product taxonomy and attributes
- File, image, and video uploads
- Reviews and payment processing
🔐 **Robust Authentication** - OAuth 2.0 with PKCE support:
- Secure authorization code flow
- Automatic token refresh before expiry
- Custom token synchronization callbacks
- Session management with timezone-aware expiry handling
🏗️ **Developer-Friendly Architecture**:
- Type-safe request/response models using dataclasses
- Comprehensive enum definitions for API parameters
- Consistent error handling with detailed exceptions
- Rate limiting information in responses
- Clean separation of concerns with resource-based structure
⚡ **Production Ready**:
- Built-in retry logic for failed requests
- Configurable environments (production/staging)
- Extensive error handling and validation
- Support for file uploads and multipart requests
## Requirements
- Python 3.8 or higher
- An Etsy App API Key (get one at [Etsy Developers](https://www.etsy.com/developers))
## Installation
### Install from PyPI
```bash
pip install etsy-python
```
### Install from Source
```bash
git clone https://github.com/amitray007/etsy-python-sdk.git
cd etsy-python-sdk
pip install -e .
```
### Dependencies
The SDK requires:
- `requests>=2.32.2` - HTTP client library
- `requests-oauthlib>=1.3.1` - OAuth 2.0 support
## Quick Start
### 1. Authentication Setup
```python
from etsy_python.v3.auth.OAuth import EtsyOAuth
# Initialize OAuth client
oauth = EtsyOAuth(
keystring="your_api_key",
redirect_uri="http://localhost:8000/callback",
scopes=["listings_r", "listings_w", "shops_r", "shops_w"]
)
# Get authorization URL
auth_url, state = oauth.get_auth_code()
print(f"Visit this URL to authorize: {auth_url}")
# After user authorizes, set the authorization code
oauth.set_authorisation_code(code="auth_code_from_callback", state=state)
# Get access token
token_data = oauth.get_access_token()
```
### 2. Initialize Client Session
```python
from datetime import datetime
from etsy_python.v3.resources.Session import EtsyClient
# Create client with tokens
client = EtsyClient(
keystring="your_api_key",
access_token=token_data["access_token"],
refresh_token=token_data["refresh_token"],
expiry=datetime.utcnow() + timedelta(seconds=token_data["expires_in"])
)
```
### 3. Make API Calls
```python
from etsy_python.v3.resources.Listing import ListingResource
from etsy_python.v3.enums.Listing import State, SortOn, SortOrder
# Initialize resource
listing_resource = ListingResource(session=client)
# Get active listings for a shop
response = listing_resource.get_listings_by_shop(
shop_id=12345,
state=State.ACTIVE,
limit=25,
sort_on=SortOn.CREATED,
sort_order=SortOrder.DESC
)
print(f"Found {len(response.message['results'])} listings")
```
## Usage Examples
### Managing Listings
```python
from etsy_python.v3.models.Listing import CreateDraftListingRequest
from etsy_python.v3.enums.Listing import WhoMade, WhenMade
# Create a draft listing
draft_listing = CreateDraftListingRequest(
title="Handmade Ceramic Mug",
description="Beautiful handcrafted ceramic mug",
price=25.00,
quantity=10,
who_made=WhoMade.I_DID,
when_made=WhenMade.MADE_TO_ORDER,
taxonomy_id=1234,
tags=["ceramic", "mug", "handmade"]
)
response = listing_resource.create_draft_listing(
shop_id=12345,
listing=draft_listing
)
```
### Working with Receipts
```python
from etsy_python.v3.resources.Receipt import ReceiptResource
from etsy_python.v3.models.Receipt import CreateReceiptShipmentRequest
receipt_resource = ReceiptResource(session=client)
# Get shop receipts
receipts = receipt_resource.get_shop_receipts(
shop_id=12345,
limit=50
)
# Create shipment for a receipt
shipment_request = CreateReceiptShipmentRequest(
tracking_number="1Z999AA10123456784",
carrier_name="USPS",
notification_sent=True
)
receipt_resource.create_receipt_shipment(
shop_id=12345,
receipt_id=67890,
shipment=shipment_request
)
```
### Uploading Images
```python
from etsy_python.v3.resources.ListingImage import ListingImageResource
from etsy_python.v3.models.Listing import UploadListingImageRequest
image_resource = ListingImageResource(session=client)
# Upload image to listing
with open("product_photo.jpg", "rb") as image_file:
upload_request = UploadListingImageRequest(
image=image_file,
alt_text="Front view of ceramic mug"
)
response = image_resource.upload_listing_image(
shop_id=12345,
listing_id=67890,
image=upload_request
)
```
### Handling Shipping Profiles
```python
from etsy_python.v3.resources.ShippingProfile import ShippingProfileResource
from etsy_python.v3.models.ShippingProfile import CreateShopShippingProfileRequest
from etsy_python.v3.enums.ShippingProfile import ProcessingTimeUnit
shipping_resource = ShippingProfileResource(session=client)
# Create shipping profile
profile_request = CreateShopShippingProfileRequest(
title="Standard Shipping",
processing_time_value=3,
processing_time_unit=ProcessingTimeUnit.BUSINESS_DAYS,
origin_country_iso="US",
primary_cost=5.00,
secondary_cost=2.00
)
response = shipping_resource.create_shop_shipping_profile(
shop_id=12345,
profile=profile_request
)
```
### Token Management with Callback
```python
def save_tokens_to_database(access_token, refresh_token, expiry):
"""Custom function to persist tokens"""
# Your database logic here
pass
# Initialize client with token sync callback
client = EtsyClient(
keystring="your_api_key",
access_token=access_token,
refresh_token=refresh_token,
expiry=expiry,
sync_refresh=save_tokens_to_database
)
# Tokens will be automatically refreshed and saved when expired
```
## API Resources
The SDK provides comprehensive coverage of Etsy API v3 resources:
### Core Resources
- **Listing** - Create, read, update, delete listings
- **Shop** - Manage shop information and settings
- **Receipt** - Handle orders and transactions
- **User** - User profiles and addresses
- **ShippingProfile** - Configure shipping options
### Media Resources
- **ListingImage** - Upload and manage listing images
- **ListingVideo** - Upload and manage listing videos
- **ListingFile** - Digital file management
### Commerce Resources
- **ListingInventory** - Stock and SKU management
- **Payment** - Payment processing and ledger entries
- **Review** - Customer reviews management
### Shop Management
- **ShopSection** - Organize listings into sections
- **ShopReturnPolicy** - Define return policies
- **ShopProductionPartner** - Manage production partners
## Error Handling
The SDK provides detailed error information through custom exceptions:
```python
from etsy_python.v3.exceptions.RequestException import RequestException
try:
response = listing_resource.get_listing(listing_id=12345)
except RequestException as e:
print(f"Error Code: {e.code}")
print(f"Error Message: {e.error}")
print(f"Error Description: {e.type}")
# Rate limit information (if available)
if e.rate_limits:
print(f"Daily Limit: {e.rate_limits.limit_per_day}")
print(f"Remaining Today: {e.rate_limits.remaining_today}")
```
## Environment Configuration
Configure the SDK environment using environment variables:
```bash
# Set environment (defaults to PROD)
export ETSY_ENV=PROD
```
## Project Structure
```
etsy-python-sdk/
├── etsy_python/
│ └── v3/
│ ├── auth/ # OAuth authentication
│ ├── common/ # Shared utilities
│ ├── enums/ # API enum definitions
│ ├── exceptions/ # Custom exceptions
│ ├── models/ # Request/response models
│ └── resources/ # API endpoint implementations
├── setup.py # Package configuration
├── LICENSE # MIT License
└── README.md # Documentation
```
## Contributing
We welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.
### Automatic Versioning
This project uses automatic semantic versioning based on commit messages:
- **Commits with `breaking:` or `BREAKING CHANGE`** → Major version bump (1.0.0 → 2.0.0)
- **Commits with `feat:` or containing `feature`** → Minor version bump (1.0.0 → 1.1.0)
- **All other commits** → Patch version bump (1.0.0 → 1.0.1)
The version is automatically bumped when changes are pushed to the `master` branch, and the package is automatically published to PyPI.
#### Skipping CI/CD
To skip the automatic versioning and publishing workflow, include one of these phrases in your commit message:
- `[skip ci]`
- `[ci skip]`
- `skip ci`
- `[no ci]`
Example:
```bash
git commit -m "docs: update README [skip ci]"
```
#### Manual Release (for maintainers)
For local testing or manual releases:
```bash
# Install development dependencies
pip install -e .
# Create a patch release
python scripts/release.py patch
# Create a minor release
python scripts/release.py minor
# Create a major release
python scripts/release.py major
# Dry run (local only, no push)
python scripts/release.py patch --no-push
```
### Development Setup
1. Fork the repository
2. Clone your fork:
```bash
git clone https://github.com/yourusername/etsy-python-sdk.git
cd etsy-python-sdk
```
3. Create a virtual environment:
```bash
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
```
4. Install dependencies:
```bash
pip install -r etsy_python/requirements.txt
```
5. Create a feature branch:
```bash
git checkout -b feature/your-feature-name
```
6. Make your changes and commit:
```bash
git commit -m "Add your feature"
```
7. Push and create a pull request
## Support
- **Documentation**: [GitHub Wiki](https://github.com/amitray007/etsy-python-sdk/wiki)
- **Issues**: [GitHub Issues](https://github.com/amitray007/etsy-python-sdk/issues)
- **Etsy API Docs**: [developers.etsy.com](https://developers.etsy.com/documentation)
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Changelog
See [Releases](https://github.com/amitray007/etsy-python-sdk/releases) for full changelog.
---
<p align="center">Made with ❤️ for the Etsy developer community</p>
Raw data
{
"_id": null,
"home_page": null,
"name": "etsy-python",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "python, etsy, api",
"author": "Amit Ray",
"author_email": "mail@amitray.dev",
"download_url": "https://files.pythonhosted.org/packages/f1/a0/219f8359f85340eb09e4a19b32e1508d8fb882e6af3dad447e663e547fba/etsy_python-1.0.20.tar.gz",
"platform": null,
"description": "\n<p align=\"center\">\n <h1 align=\"center\">Etsy API Client Library for Python</h1>\n</p>\n\n<p align=\"center\">\n <img src=\"https://img.shields.io/pypi/v/etsy-python?style=for-the-badge&color=0080ff&style=default\" alt=\"PyPI version\">\n\t<img src=\"https://img.shields.io/github/license/amitray007/etsy-python-sdk?style=default&color=0080ff\" alt=\"license\">\n\t<img src=\"https://img.shields.io/github/last-commit/amitray007/etsy-python-sdk?style=default&color=0080ff\" alt=\"last-commit\">\n\t<img src=\"https://img.shields.io/github/languages/top/amitray007/etsy-python-sdk?style=default&color=0080ff\" alt=\"repo-top-language\">\n<p>\n\n<p align=\"center\">\n <img src=\"https://www.etsy.com/images/apps/documentation/edc_badge3.gif\" alt=\"etsy-api-badge\">\n</p>\n\n---\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Features](#features)\n- [Requirements](#requirements)\n- [Installation](#installation)\n - [Install from PyPI](#install-from-pypi)\n - [Install from Source](#install-from-source)\n - [Dependencies](#dependencies)\n- [Quick Start](#quick-start)\n - [1. Authentication Setup](#1-authentication-setup)\n - [2. Initialize Client Session](#2-initialize-client-session)\n - [3. Make API Calls](#3-make-api-calls)\n- [Usage Examples](#usage-examples)\n - [Managing Listings](#managing-listings)\n - [Working with Receipts](#working-with-receipts)\n - [Uploading Images](#uploading-images)\n - [Handling Shipping Profiles](#handling-shipping-profiles)\n - [Token Management with Callback](#token-management-with-callback)\n- [API Resources](#api-resources)\n - [Core Resources](#core-resources)\n - [Media Resources](#media-resources)\n - [Commerce Resources](#commerce-resources)\n - [Shop Management](#shop-management)\n- [Error Handling](#error-handling)\n- [Environment Configuration](#environment-configuration)\n- [Project Structure](#project-structure)\n- [Contributing](#contributing)\n - [Development Setup](#development-setup)\n- [Support](#support)\n- [License](#license)\n- [Changelog](#changelog)\n\n---\n\n## Overview\n\nA comprehensive Python client library for the Etsy API v3, providing a modern, type-safe interface for interacting with the Etsy marketplace. This SDK simplifies OAuth 2.0 authentication, automatic token refresh, and provides complete coverage of Etsy's API endpoints.\n\n## Features\n\n\u2728 **Complete API Coverage** - Full support for Etsy API v3 endpoints including:\n\n- Listings management (create, update, delete, search)\n- Shop operations (sections, policies, production partners)\n- Receipt and transaction handling\n- Shipping profiles and destinations\n- Product taxonomy and attributes\n- File, image, and video uploads\n- Reviews and payment processing\n\n\ud83d\udd10 **Robust Authentication** - OAuth 2.0 with PKCE support:\n\n- Secure authorization code flow\n- Automatic token refresh before expiry\n- Custom token synchronization callbacks\n- Session management with timezone-aware expiry handling\n\n\ud83c\udfd7\ufe0f **Developer-Friendly Architecture**:\n\n- Type-safe request/response models using dataclasses\n- Comprehensive enum definitions for API parameters\n- Consistent error handling with detailed exceptions\n- Rate limiting information in responses\n- Clean separation of concerns with resource-based structure\n\n\u26a1 **Production Ready**:\n\n- Built-in retry logic for failed requests\n- Configurable environments (production/staging)\n- Extensive error handling and validation\n- Support for file uploads and multipart requests\n\n## Requirements\n\n- Python 3.8 or higher\n- An Etsy App API Key (get one at [Etsy Developers](https://www.etsy.com/developers))\n\n## Installation\n\n### Install from PyPI\n\n```bash\npip install etsy-python\n```\n\n### Install from Source\n\n```bash\ngit clone https://github.com/amitray007/etsy-python-sdk.git\ncd etsy-python-sdk\npip install -e .\n```\n\n### Dependencies\n\nThe SDK requires:\n\n- `requests>=2.32.2` - HTTP client library\n- `requests-oauthlib>=1.3.1` - OAuth 2.0 support\n\n## Quick Start\n\n### 1. Authentication Setup\n\n```python\nfrom etsy_python.v3.auth.OAuth import EtsyOAuth\n\n# Initialize OAuth client\noauth = EtsyOAuth(\n keystring=\"your_api_key\",\n redirect_uri=\"http://localhost:8000/callback\",\n scopes=[\"listings_r\", \"listings_w\", \"shops_r\", \"shops_w\"]\n)\n\n# Get authorization URL\nauth_url, state = oauth.get_auth_code()\nprint(f\"Visit this URL to authorize: {auth_url}\")\n\n# After user authorizes, set the authorization code\noauth.set_authorisation_code(code=\"auth_code_from_callback\", state=state)\n\n# Get access token\ntoken_data = oauth.get_access_token()\n```\n\n### 2. Initialize Client Session\n\n```python\nfrom datetime import datetime\nfrom etsy_python.v3.resources.Session import EtsyClient\n\n# Create client with tokens\nclient = EtsyClient(\n keystring=\"your_api_key\",\n access_token=token_data[\"access_token\"],\n refresh_token=token_data[\"refresh_token\"],\n expiry=datetime.utcnow() + timedelta(seconds=token_data[\"expires_in\"])\n)\n```\n\n### 3. Make API Calls\n\n```python\nfrom etsy_python.v3.resources.Listing import ListingResource\nfrom etsy_python.v3.enums.Listing import State, SortOn, SortOrder\n\n# Initialize resource\nlisting_resource = ListingResource(session=client)\n\n# Get active listings for a shop\nresponse = listing_resource.get_listings_by_shop(\n shop_id=12345,\n state=State.ACTIVE,\n limit=25,\n sort_on=SortOn.CREATED,\n sort_order=SortOrder.DESC\n)\n\nprint(f\"Found {len(response.message['results'])} listings\")\n```\n\n## Usage Examples\n\n### Managing Listings\n\n```python\nfrom etsy_python.v3.models.Listing import CreateDraftListingRequest\nfrom etsy_python.v3.enums.Listing import WhoMade, WhenMade\n\n# Create a draft listing\ndraft_listing = CreateDraftListingRequest(\n title=\"Handmade Ceramic Mug\",\n description=\"Beautiful handcrafted ceramic mug\",\n price=25.00,\n quantity=10,\n who_made=WhoMade.I_DID,\n when_made=WhenMade.MADE_TO_ORDER,\n taxonomy_id=1234,\n tags=[\"ceramic\", \"mug\", \"handmade\"]\n)\n\nresponse = listing_resource.create_draft_listing(\n shop_id=12345,\n listing=draft_listing\n)\n```\n\n### Working with Receipts\n\n```python\nfrom etsy_python.v3.resources.Receipt import ReceiptResource\nfrom etsy_python.v3.models.Receipt import CreateReceiptShipmentRequest\n\nreceipt_resource = ReceiptResource(session=client)\n\n# Get shop receipts\nreceipts = receipt_resource.get_shop_receipts(\n shop_id=12345,\n limit=50\n)\n\n# Create shipment for a receipt\nshipment_request = CreateReceiptShipmentRequest(\n tracking_number=\"1Z999AA10123456784\",\n carrier_name=\"USPS\",\n notification_sent=True\n)\n\nreceipt_resource.create_receipt_shipment(\n shop_id=12345,\n receipt_id=67890,\n shipment=shipment_request\n)\n```\n\n### Uploading Images\n\n```python\nfrom etsy_python.v3.resources.ListingImage import ListingImageResource\nfrom etsy_python.v3.models.Listing import UploadListingImageRequest\n\nimage_resource = ListingImageResource(session=client)\n\n# Upload image to listing\nwith open(\"product_photo.jpg\", \"rb\") as image_file:\n upload_request = UploadListingImageRequest(\n image=image_file,\n alt_text=\"Front view of ceramic mug\"\n )\n\n response = image_resource.upload_listing_image(\n shop_id=12345,\n listing_id=67890,\n image=upload_request\n )\n```\n\n### Handling Shipping Profiles\n\n```python\nfrom etsy_python.v3.resources.ShippingProfile import ShippingProfileResource\nfrom etsy_python.v3.models.ShippingProfile import CreateShopShippingProfileRequest\nfrom etsy_python.v3.enums.ShippingProfile import ProcessingTimeUnit\n\nshipping_resource = ShippingProfileResource(session=client)\n\n# Create shipping profile\nprofile_request = CreateShopShippingProfileRequest(\n title=\"Standard Shipping\",\n processing_time_value=3,\n processing_time_unit=ProcessingTimeUnit.BUSINESS_DAYS,\n origin_country_iso=\"US\",\n primary_cost=5.00,\n secondary_cost=2.00\n)\n\nresponse = shipping_resource.create_shop_shipping_profile(\n shop_id=12345,\n profile=profile_request\n)\n```\n\n### Token Management with Callback\n\n```python\ndef save_tokens_to_database(access_token, refresh_token, expiry):\n \"\"\"Custom function to persist tokens\"\"\"\n # Your database logic here\n pass\n\n# Initialize client with token sync callback\nclient = EtsyClient(\n keystring=\"your_api_key\",\n access_token=access_token,\n refresh_token=refresh_token,\n expiry=expiry,\n sync_refresh=save_tokens_to_database\n)\n\n# Tokens will be automatically refreshed and saved when expired\n```\n\n## API Resources\n\nThe SDK provides comprehensive coverage of Etsy API v3 resources:\n\n### Core Resources\n\n- **Listing** - Create, read, update, delete listings\n- **Shop** - Manage shop information and settings\n- **Receipt** - Handle orders and transactions\n- **User** - User profiles and addresses\n- **ShippingProfile** - Configure shipping options\n\n### Media Resources\n\n- **ListingImage** - Upload and manage listing images\n- **ListingVideo** - Upload and manage listing videos\n- **ListingFile** - Digital file management\n\n### Commerce Resources\n\n- **ListingInventory** - Stock and SKU management\n- **Payment** - Payment processing and ledger entries\n- **Review** - Customer reviews management\n\n### Shop Management\n\n- **ShopSection** - Organize listings into sections\n- **ShopReturnPolicy** - Define return policies\n- **ShopProductionPartner** - Manage production partners\n\n## Error Handling\n\nThe SDK provides detailed error information through custom exceptions:\n\n```python\nfrom etsy_python.v3.exceptions.RequestException import RequestException\n\ntry:\n response = listing_resource.get_listing(listing_id=12345)\nexcept RequestException as e:\n print(f\"Error Code: {e.code}\")\n print(f\"Error Message: {e.error}\")\n print(f\"Error Description: {e.type}\")\n\n # Rate limit information (if available)\n if e.rate_limits:\n print(f\"Daily Limit: {e.rate_limits.limit_per_day}\")\n print(f\"Remaining Today: {e.rate_limits.remaining_today}\")\n```\n\n## Environment Configuration\n\nConfigure the SDK environment using environment variables:\n\n```bash\n# Set environment (defaults to PROD)\nexport ETSY_ENV=PROD\n```\n\n## Project Structure\n\n```\netsy-python-sdk/\n\u251c\u2500\u2500 etsy_python/\n\u2502 \u2514\u2500\u2500 v3/\n\u2502 \u251c\u2500\u2500 auth/ # OAuth authentication\n\u2502 \u251c\u2500\u2500 common/ # Shared utilities\n\u2502 \u251c\u2500\u2500 enums/ # API enum definitions\n\u2502 \u251c\u2500\u2500 exceptions/ # Custom exceptions\n\u2502 \u251c\u2500\u2500 models/ # Request/response models\n\u2502 \u2514\u2500\u2500 resources/ # API endpoint implementations\n\u251c\u2500\u2500 setup.py # Package configuration\n\u251c\u2500\u2500 LICENSE # MIT License\n\u2514\u2500\u2500 README.md # Documentation\n```\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guidelines](CONTRIBUTING.md) for details.\n\n### Automatic Versioning\n\nThis project uses automatic semantic versioning based on commit messages:\n\n- **Commits with `breaking:` or `BREAKING CHANGE`** \u2192 Major version bump (1.0.0 \u2192 2.0.0)\n- **Commits with `feat:` or containing `feature`** \u2192 Minor version bump (1.0.0 \u2192 1.1.0)\n- **All other commits** \u2192 Patch version bump (1.0.0 \u2192 1.0.1)\n\nThe version is automatically bumped when changes are pushed to the `master` branch, and the package is automatically published to PyPI.\n\n#### Skipping CI/CD\n\nTo skip the automatic versioning and publishing workflow, include one of these phrases in your commit message:\n- `[skip ci]`\n- `[ci skip]`\n- `skip ci`\n- `[no ci]`\n\nExample:\n```bash\ngit commit -m \"docs: update README [skip ci]\"\n```\n\n#### Manual Release (for maintainers)\n\nFor local testing or manual releases:\n\n```bash\n# Install development dependencies\npip install -e .\n\n# Create a patch release\npython scripts/release.py patch\n\n# Create a minor release\npython scripts/release.py minor\n\n# Create a major release\npython scripts/release.py major\n\n# Dry run (local only, no push)\npython scripts/release.py patch --no-push\n```\n\n### Development Setup\n\n1. Fork the repository\n2. Clone your fork:\n ```bash\n git clone https://github.com/yourusername/etsy-python-sdk.git\n cd etsy-python-sdk\n ```\n3. Create a virtual environment:\n ```bash\n python -m venv venv\n source venv/bin/activate # On Windows: venv\\Scripts\\activate\n ```\n4. Install dependencies:\n ```bash\n pip install -r etsy_python/requirements.txt\n ```\n5. Create a feature branch:\n ```bash\n git checkout -b feature/your-feature-name\n ```\n6. Make your changes and commit:\n ```bash\n git commit -m \"Add your feature\"\n ```\n7. Push and create a pull request\n\n## Support\n\n- **Documentation**: [GitHub Wiki](https://github.com/amitray007/etsy-python-sdk/wiki)\n- **Issues**: [GitHub Issues](https://github.com/amitray007/etsy-python-sdk/issues)\n- **Etsy API Docs**: [developers.etsy.com](https://developers.etsy.com/documentation)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Changelog\n\nSee [Releases](https://github.com/amitray007/etsy-python-sdk/releases) for full changelog.\n\n---\n\n<p align=\"center\">Made with \u2764\ufe0f for the Etsy developer community</p>\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Etsy API Client Library for Python",
"version": "1.0.20",
"project_urls": {
"Documentation": "https://github.com/amitray007/etsy-python-sdk/blob/master/README.md",
"Issues": "https://github.com/amitray007/etsy-python-sdk/issues",
"Source code": "https://github.com/amitray007/etsy-python-sdk"
},
"split_keywords": [
"python",
" etsy",
" api"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3514ca0f6930a3ba8bee94077bd17c6d5ad62acedd7b9bc42cefd49f08248255",
"md5": "2496288d78b857ac7fc7f5f84c33c111",
"sha256": "853f6f51912105710fa29a23c78e36fd6dd59b4cc92e51593192715d1fb74f1e"
},
"downloads": -1,
"filename": "etsy_python-1.0.20-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2496288d78b857ac7fc7f5f84c33c111",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43898,
"upload_time": "2025-08-22T12:18:07",
"upload_time_iso_8601": "2025-08-22T12:18:07.221316Z",
"url": "https://files.pythonhosted.org/packages/35/14/ca0f6930a3ba8bee94077bd17c6d5ad62acedd7b9bc42cefd49f08248255/etsy_python-1.0.20-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f1a0219f8359f85340eb09e4a19b32e1508d8fb882e6af3dad447e663e547fba",
"md5": "7fffddfe621c99f546a80a7cc9637f59",
"sha256": "753403f71f0ed71a38064fac53564799ec1454d2cdffc75b37a37b4940c0ed11"
},
"downloads": -1,
"filename": "etsy_python-1.0.20.tar.gz",
"has_sig": false,
"md5_digest": "7fffddfe621c99f546a80a7cc9637f59",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 30379,
"upload_time": "2025-08-22T12:18:08",
"upload_time_iso_8601": "2025-08-22T12:18:08.729481Z",
"url": "https://files.pythonhosted.org/packages/f1/a0/219f8359f85340eb09e4a19b32e1508d8fb882e6af3dad447e663e547fba/etsy_python-1.0.20.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-22 12:18:08",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "amitray007",
"github_project": "etsy-python-sdk",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "etsy-python"
}