etsy-python


Nameetsy-python JSON
Version 1.0.20 PyPI version JSON
download
home_pageNone
SummaryEtsy API Client Library for Python
upload_time2025-08-22 12:18:08
maintainerNone
docs_urlNone
authorAmit Ray
requires_pythonNone
licenseNone
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"
}
        
Elapsed time: 0.98725s