eoddata-api


Nameeoddata-api JSON
Version 0.1.0 PyPI version JSON
download
home_pagehttps://github.com/vrontier/eoddata
SummaryPython client package for the EODData market data REST API.
upload_time2025-09-10 18:36:50
maintainerNone
docs_urlNone
authorMike Quest
requires_python>=3.10
licenseMIT License Copyright (c) 2025 Mike Quest, Luxembourg Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords finance markets eod historical-data api stocks eoddata
VCS
bugtrack_url
requirements requests
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # EODData Python Client

A pythonic client library for accessing [EODData.com](https://eoddata.com) data API giving access to historical market data and fundamental data of various stock exchanges around the world, including the US, Canada, Europe. The package echos the EODData REST API and adds API call accounting with quotas so that you can track your usage.

Any API call beside Metadata requires an API key, which you will receive by registering yourself as a user. A free tier exists, which allows one to access US equities, crypto currencies, global indices and forex pairs (daily request limit). For more information about their products and services, please check their website.

I am a long-time subscriber of EODData and have created this library for my own use. I have decided to open source it so that others can benefit from it.

## Installation

Due to a pending request regarding its naming, the package is not yet available at [PyPI](https://pypi.org) production but only at [Test PyPI](https://test.pypi.org).

You can install the production version package from there for testing purposes:
```bash
pip install eoddata-api
```

Please note that this package has a different version (due to development and publishing tests) than the one on PyPI will have. But you can uninstall it once the package at PyPI will be available as the functionality will be the same.

## API Key

In order to use the EODData API, you will need to register yourself as a user. You can choose between a free tier and a paid subscription. Please check [their website](https://eoddata.com/products/default.aspx) for more information.
Once you have registered yourself as a user, you will find your API key in your account area. You can use it to authenticate your requests.

The client will look for your API key in the environment variable `EODDATA_API_KEY` and terminate if not set.

## Quick Start

```python
"""
Basic usage examples for EODData client
"""

import os
from resource import RLIMIT_CPU

from eoddata import EODDataClient, EODDataError, AccountingTracker


def main():
    # Get API key from environment
    api_key = os.getenv("EODDATA_API_KEY")
    if not api_key:
        print("Please set EODDATA_API_KEY environment variable")
        return

    # Create and enable API call accounting
    accounting = AccountingTracker(debug=True)
    accounting.start()

    # EODData STANDARD membership
    limit_60s = 10
    limit_24h = 100

    # Enable quotas for API key (CORRECTED - now properly per API key)
    accounting.enable_quotas(api_key, calls_60s=limit_60s, calls_24h=limit_24h)

    # Initialize client with optional debug mode
    # Set debug=True to see detailed request/response logging
    debug_mode = os.getenv("EODDATA_DEBUG", "").lower() in ('true', '1', 'yes')
    client = EODDataClient(api_key=api_key, debug=debug_mode, accounting=accounting)

    if debug_mode:
        print("Debug mode enabled - detailed request/response logging will be shown")

    try:
        # Get metadata (no auth required)
        print("Exchange Types:")
        for exchange_type in client.metadata.exchange_types():
            print(f"  {exchange_type['name']}")

        print("\nSymbol Types:")
        for symbol_type in client.metadata.symbol_types():
            print(f"  {symbol_type['name']}")

        # Get exchanges
        print("\nFirst 5 Exchanges:")
        exchanges = client.exchanges.list()
        for exchange in exchanges[:5]:
            print(f"  {exchange['code']}: {exchange['name']} ({exchange['country']})")

        # Get symbols for NASDAQ
        print("\nFirst 5 NASDAQ Symbols:")
        symbols = client.symbols.list("NASDAQ")
        for symbol in symbols[:5]:
            print(f"  {symbol['code']}: {symbol['name']}")

        # Get quote for AAPL
        print("\nAAPL Latest Quote:")
        quote = client.quotes.get("NASDAQ", "AAPL")
        print(f"  Date: {quote['dateStamp']}")
        print(f"  Open: ${quote['open']:.2f}")
        print(f"  High: ${quote['high']:.2f}")
        print(f"  Low: ${quote['low']:.2f}")
        print(f"  Close: ${quote['close']:.2f}")
        print(f"  Volume: {quote['volume']:,}")

    except EODDataError as e:
        print(f"Error: {e}")

    accounting.stop()
    print(accounting.summary())
    print("\nBasic usage test completed successfully!\n")

if __name__ == "__main__":
    main()
```

## API Categories

The client is organized into logical categories that mirror the EODData API structure:

- **`client.metadata`** - Exchange types, symbol types, countries, currencies
- **`client.exchanges`** - Exchange listings and information
- **`client.symbols`** - Symbol listings and information
- **`client.quotes`** - Current and historical price data (OHLCV)
- **`client.corporate`** - Company profiles, splits, dividends
- **`client.fundamentals`** - Financial metrics (PE, EPS, etc.)
- **`client.technicals`** - Technical indicators (MA, RSI, etc.)

## Debugging

The client includes a `debug` flag that can be used to enable verbose logging. Setting the environment variable `EODDATA_DEBUG` to `true` will enable debug logging.

## Error Handling

The client includes comprehensive error handling:

```python
from eoddata import EODDataClient, EODDataError, EODDataAPIError, EODDataAuthError

try:
    client = EODDataClient(api_key="invalid_key")
    data = client.quotes.get("NASDAQ", "AAPL")
except EODDataAuthError:
    print("Authentication failed - check your API key")
except EODDataAPIError as e:
    print(f"API error: {e}")
except EODDataError as e:
    print(f"General error: {e}")
```

## Context Manager Support

Use the client as a context manager for automatic resource cleanup:

```python
with EODDataClient(api_key=api_key) as client:
    quotes = client.quotes.list_by_exchange("NASDAQ")
```

## API Call Accounting and Quota Management

The EODData client includes comprehensive API call tracking and quota enforcement to help you monitor and manage your API usage effectively. This is particularly useful for managing rate limits and avoiding unexpected overages.

### Features

- **Call Tracking**: Track total calls, calls in the last 60 seconds, and calls in the last 24 hours
- **Quota Enforcement**: Set and enforce limits to prevent exceeding your plan limits
- **Per-Operation Tracking**: Monitor usage by specific API operations
- **Persistent Storage**: Save and load tracking data between sessions
- **Summary Reports**: Generate human-readable usage reports

### Basic Usage

```python
from eoddata import EODDataClient, AccountingTracker

# Create and start accounting tracker
accounting = AccountingTracker(debug=True)
accounting.start()

# Set quotas based on your EODData plan
# Standard plan: 10 calls/60s, 100 calls/24h
accounting.enable_quotas(
    api_key="your_api_key",
    calls_60s=10,
    calls_24h=100
)

# Use client with accounting
client = EODDataClient(api_key="your_api_key", accounting=accounting)

# Make API calls - they're automatically tracked
exchanges = client.exchanges.list()
quotes = client.quotes.get("NASDAQ", "AAPL")

# Check current usage
accounting.check_quota("your_api_key")  # Raises OutOfQuotaError if exceeded

# Generate usage report
print(accounting.summary())

# Save tracking data
accounting.save_to_file("usage_data.json")

# Stop tracking
accounting.stop()
```

### Sample Output

The `accounting.summary()` method provides a detailed breakdown of your API usage:

```
EODData Call Accounting Summary
========================================

API Key: XXXX****XXXX
  Global Totals:
    Total calls: 5
    60s calls: 5
    24h calls: 5
  Operations:
    List_ExchangeType:
      Total calls: 1
      60s calls: 1
      24h calls: 1
    List_SymbolType:
      Total calls: 1
      60s calls: 1
      24h calls: 1
    List_Exchange:
      Total calls: 1
      60s calls: 1
      24h calls: 1
    List_Symbol:
      Total calls: 1
      60s calls: 1
      24h calls: 1
    Get_Quote:
      Total calls: 1
      60s calls: 1
      24h calls: 1
```

### Advanced Features

#### Persistent Data Storage

```python
# Save current state
filename = accounting.save_to_file()  # Auto-generates timestamped filename
# Or specify custom filename
accounting.save_to_file("my_usage_data.json")

# Load previous state
accounting.load_from_file("my_usage_data.json")
```

#### Reset Tracking

```python
# Reset all counters while keeping quotas
accounting.reset()
```

#### Quota Violation Handling

```python
from eoddata import OutOfQuotaError

try:
    client.quotes.get("NASDAQ", "AAPL")
except OutOfQuotaError as e:
    print(f"Quota exceeded: {e.message}")
    print(f"Quota type: {e.quota_type}")  # 'total', 'calls_60s', or 'calls_24h'
```

### EODData Plan Integration

The accounting system works seamlessly with EODData's subscription plans:

- **Free Tier**: Set conservative limits for testing
- **Standard Plan**: 10 calls/60s, 100 calls/24h
- **Professional Plan**: Higher limits based on your subscription
- **Enterprise**: Custom limits

## EODData REST API Documentation
Since August, 30th 2025 EODData has offered a [REST API](https://api.eoddata.com/) for its subscribers. It offers developers and analysts seamless access to a wide range of financial market data, including:

- Historical end-of-day OHLCV prices
- A wide range of international exchanges with more than 100,000 symbols
- Company profiles and fundamentals
- Over 60 technical indicators
- More than 30 years of historical end-of-day data
- Splits & dividends
- Market metadata, such as exchange and ticker information

## Testing

To run the test suite:
```bash
# Install test dependencies (if not already installed)
pip install pytest pytest-cov

# Run all tests
pytest tests/

# Run all tests with coverage
pytest tests/ --cov=eoddata --cov-report=term-missing

# Run a specific test
pytest tests/test_client.py::TestEODDataClient::test_client_initialization

# Run integration tests (requires API key)
pytest tests/test_integration.py --run-integration
```

The test suite covers all API endpoints with proper mocking to avoid external dependencies. All tests must pass with 80%+ code coverage before publishing.

### Integration Tests

Integration tests are available to verify the client works with the real EODData API. These tests require a valid API key and are disabled by default.

To run integration tests:
1. Set your API key in the `EODDATA_API_KEY` environment variable or in a `.env` file
2. Run: `pytest tests/test_integration.py --run-integration`

Integration tests will:
- Verify the client can connect to the real API
- Test all API endpoints with actual data
- Handle rate limiting and API errors gracefully

## Requirements

- Python 3.10+
- requests 2.32+

## License

[MIT License](LICENSE)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/vrontier/eoddata",
    "name": "eoddata-api",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "finance, markets, eod, historical-data, api, stocks, eoddata",
    "author": "Mike Quest",
    "author_email": "Mike Quest <eoddata-api@vrontier.org>",
    "download_url": "https://files.pythonhosted.org/packages/cf/7d/01966439595d3e26b4928854a2bd07552f0ca5f5217f5b274bdbbddf900a/eoddata_api-0.1.0.tar.gz",
    "platform": null,
    "description": "# EODData Python Client\n\nA pythonic client library for accessing [EODData.com](https://eoddata.com) data API giving access to historical market data and fundamental data of various stock exchanges around the world, including the US, Canada, Europe. The package echos the EODData REST API and adds API call accounting with quotas so that you can track your usage.\n\nAny API call beside Metadata requires an API key, which you will receive by registering yourself as a user. A free tier exists, which allows one to access US equities, crypto currencies, global indices and forex pairs (daily request limit). For more information about their products and services, please check their website.\n\nI am a long-time subscriber of EODData and have created this library for my own use. I have decided to open source it so that others can benefit from it.\n\n## Installation\n\nDue to a pending request regarding its naming, the package is not yet available at [PyPI](https://pypi.org) production but only at [Test PyPI](https://test.pypi.org).\n\nYou can install the production version package from there for testing purposes:\n```bash\npip install eoddata-api\n```\n\nPlease note that this package has a different version (due to development and publishing tests) than the one on PyPI will have. But you can uninstall it once the package at PyPI will be available as the functionality will be the same.\n\n## API Key\n\nIn order to use the EODData API, you will need to register yourself as a user. You can choose between a free tier and a paid subscription. Please check [their website](https://eoddata.com/products/default.aspx) for more information.\nOnce you have registered yourself as a user, you will find your API key in your account area. You can use it to authenticate your requests.\n\nThe client will look for your API key in the environment variable `EODDATA_API_KEY` and terminate if not set.\n\n## Quick Start\n\n```python\n\"\"\"\nBasic usage examples for EODData client\n\"\"\"\n\nimport os\nfrom resource import RLIMIT_CPU\n\nfrom eoddata import EODDataClient, EODDataError, AccountingTracker\n\n\ndef main():\n    # Get API key from environment\n    api_key = os.getenv(\"EODDATA_API_KEY\")\n    if not api_key:\n        print(\"Please set EODDATA_API_KEY environment variable\")\n        return\n\n    # Create and enable API call accounting\n    accounting = AccountingTracker(debug=True)\n    accounting.start()\n\n    # EODData STANDARD membership\n    limit_60s = 10\n    limit_24h = 100\n\n    # Enable quotas for API key (CORRECTED - now properly per API key)\n    accounting.enable_quotas(api_key, calls_60s=limit_60s, calls_24h=limit_24h)\n\n    # Initialize client with optional debug mode\n    # Set debug=True to see detailed request/response logging\n    debug_mode = os.getenv(\"EODDATA_DEBUG\", \"\").lower() in ('true', '1', 'yes')\n    client = EODDataClient(api_key=api_key, debug=debug_mode, accounting=accounting)\n\n    if debug_mode:\n        print(\"Debug mode enabled - detailed request/response logging will be shown\")\n\n    try:\n        # Get metadata (no auth required)\n        print(\"Exchange Types:\")\n        for exchange_type in client.metadata.exchange_types():\n            print(f\"  {exchange_type['name']}\")\n\n        print(\"\\nSymbol Types:\")\n        for symbol_type in client.metadata.symbol_types():\n            print(f\"  {symbol_type['name']}\")\n\n        # Get exchanges\n        print(\"\\nFirst 5 Exchanges:\")\n        exchanges = client.exchanges.list()\n        for exchange in exchanges[:5]:\n            print(f\"  {exchange['code']}: {exchange['name']} ({exchange['country']})\")\n\n        # Get symbols for NASDAQ\n        print(\"\\nFirst 5 NASDAQ Symbols:\")\n        symbols = client.symbols.list(\"NASDAQ\")\n        for symbol in symbols[:5]:\n            print(f\"  {symbol['code']}: {symbol['name']}\")\n\n        # Get quote for AAPL\n        print(\"\\nAAPL Latest Quote:\")\n        quote = client.quotes.get(\"NASDAQ\", \"AAPL\")\n        print(f\"  Date: {quote['dateStamp']}\")\n        print(f\"  Open: ${quote['open']:.2f}\")\n        print(f\"  High: ${quote['high']:.2f}\")\n        print(f\"  Low: ${quote['low']:.2f}\")\n        print(f\"  Close: ${quote['close']:.2f}\")\n        print(f\"  Volume: {quote['volume']:,}\")\n\n    except EODDataError as e:\n        print(f\"Error: {e}\")\n\n    accounting.stop()\n    print(accounting.summary())\n    print(\"\\nBasic usage test completed successfully!\\n\")\n\nif __name__ == \"__main__\":\n    main()\n```\n\n## API Categories\n\nThe client is organized into logical categories that mirror the EODData API structure:\n\n- **`client.metadata`** - Exchange types, symbol types, countries, currencies\n- **`client.exchanges`** - Exchange listings and information\n- **`client.symbols`** - Symbol listings and information\n- **`client.quotes`** - Current and historical price data (OHLCV)\n- **`client.corporate`** - Company profiles, splits, dividends\n- **`client.fundamentals`** - Financial metrics (PE, EPS, etc.)\n- **`client.technicals`** - Technical indicators (MA, RSI, etc.)\n\n## Debugging\n\nThe client includes a `debug` flag that can be used to enable verbose logging. Setting the environment variable `EODDATA_DEBUG` to `true` will enable debug logging.\n\n## Error Handling\n\nThe client includes comprehensive error handling:\n\n```python\nfrom eoddata import EODDataClient, EODDataError, EODDataAPIError, EODDataAuthError\n\ntry:\n    client = EODDataClient(api_key=\"invalid_key\")\n    data = client.quotes.get(\"NASDAQ\", \"AAPL\")\nexcept EODDataAuthError:\n    print(\"Authentication failed - check your API key\")\nexcept EODDataAPIError as e:\n    print(f\"API error: {e}\")\nexcept EODDataError as e:\n    print(f\"General error: {e}\")\n```\n\n## Context Manager Support\n\nUse the client as a context manager for automatic resource cleanup:\n\n```python\nwith EODDataClient(api_key=api_key) as client:\n    quotes = client.quotes.list_by_exchange(\"NASDAQ\")\n```\n\n## API Call Accounting and Quota Management\n\nThe EODData client includes comprehensive API call tracking and quota enforcement to help you monitor and manage your API usage effectively. This is particularly useful for managing rate limits and avoiding unexpected overages.\n\n### Features\n\n- **Call Tracking**: Track total calls, calls in the last 60 seconds, and calls in the last 24 hours\n- **Quota Enforcement**: Set and enforce limits to prevent exceeding your plan limits\n- **Per-Operation Tracking**: Monitor usage by specific API operations\n- **Persistent Storage**: Save and load tracking data between sessions\n- **Summary Reports**: Generate human-readable usage reports\n\n### Basic Usage\n\n```python\nfrom eoddata import EODDataClient, AccountingTracker\n\n# Create and start accounting tracker\naccounting = AccountingTracker(debug=True)\naccounting.start()\n\n# Set quotas based on your EODData plan\n# Standard plan: 10 calls/60s, 100 calls/24h\naccounting.enable_quotas(\n    api_key=\"your_api_key\",\n    calls_60s=10,\n    calls_24h=100\n)\n\n# Use client with accounting\nclient = EODDataClient(api_key=\"your_api_key\", accounting=accounting)\n\n# Make API calls - they're automatically tracked\nexchanges = client.exchanges.list()\nquotes = client.quotes.get(\"NASDAQ\", \"AAPL\")\n\n# Check current usage\naccounting.check_quota(\"your_api_key\")  # Raises OutOfQuotaError if exceeded\n\n# Generate usage report\nprint(accounting.summary())\n\n# Save tracking data\naccounting.save_to_file(\"usage_data.json\")\n\n# Stop tracking\naccounting.stop()\n```\n\n### Sample Output\n\nThe `accounting.summary()` method provides a detailed breakdown of your API usage:\n\n```\nEODData Call Accounting Summary\n========================================\n\nAPI Key: XXXX****XXXX\n  Global Totals:\n    Total calls: 5\n    60s calls: 5\n    24h calls: 5\n  Operations:\n    List_ExchangeType:\n      Total calls: 1\n      60s calls: 1\n      24h calls: 1\n    List_SymbolType:\n      Total calls: 1\n      60s calls: 1\n      24h calls: 1\n    List_Exchange:\n      Total calls: 1\n      60s calls: 1\n      24h calls: 1\n    List_Symbol:\n      Total calls: 1\n      60s calls: 1\n      24h calls: 1\n    Get_Quote:\n      Total calls: 1\n      60s calls: 1\n      24h calls: 1\n```\n\n### Advanced Features\n\n#### Persistent Data Storage\n\n```python\n# Save current state\nfilename = accounting.save_to_file()  # Auto-generates timestamped filename\n# Or specify custom filename\naccounting.save_to_file(\"my_usage_data.json\")\n\n# Load previous state\naccounting.load_from_file(\"my_usage_data.json\")\n```\n\n#### Reset Tracking\n\n```python\n# Reset all counters while keeping quotas\naccounting.reset()\n```\n\n#### Quota Violation Handling\n\n```python\nfrom eoddata import OutOfQuotaError\n\ntry:\n    client.quotes.get(\"NASDAQ\", \"AAPL\")\nexcept OutOfQuotaError as e:\n    print(f\"Quota exceeded: {e.message}\")\n    print(f\"Quota type: {e.quota_type}\")  # 'total', 'calls_60s', or 'calls_24h'\n```\n\n### EODData Plan Integration\n\nThe accounting system works seamlessly with EODData's subscription plans:\n\n- **Free Tier**: Set conservative limits for testing\n- **Standard Plan**: 10 calls/60s, 100 calls/24h\n- **Professional Plan**: Higher limits based on your subscription\n- **Enterprise**: Custom limits\n\n## EODData REST API Documentation\nSince August, 30th 2025 EODData has offered a [REST API](https://api.eoddata.com/) for its subscribers. It offers developers and analysts seamless access to a wide range of financial market data, including:\n\n- Historical end-of-day OHLCV prices\n- A wide range of international exchanges with more than 100,000 symbols\n- Company profiles and fundamentals\n- Over 60 technical indicators\n- More than 30 years of historical end-of-day data\n- Splits & dividends\n- Market metadata, such as exchange and ticker information\n\n## Testing\n\nTo run the test suite:\n```bash\n# Install test dependencies (if not already installed)\npip install pytest pytest-cov\n\n# Run all tests\npytest tests/\n\n# Run all tests with coverage\npytest tests/ --cov=eoddata --cov-report=term-missing\n\n# Run a specific test\npytest tests/test_client.py::TestEODDataClient::test_client_initialization\n\n# Run integration tests (requires API key)\npytest tests/test_integration.py --run-integration\n```\n\nThe test suite covers all API endpoints with proper mocking to avoid external dependencies. All tests must pass with 80%+ code coverage before publishing.\n\n### Integration Tests\n\nIntegration tests are available to verify the client works with the real EODData API. These tests require a valid API key and are disabled by default.\n\nTo run integration tests:\n1. Set your API key in the `EODDATA_API_KEY` environment variable or in a `.env` file\n2. Run: `pytest tests/test_integration.py --run-integration`\n\nIntegration tests will:\n- Verify the client can connect to the real API\n- Test all API endpoints with actual data\n- Handle rate limiting and API errors gracefully\n\n## Requirements\n\n- Python 3.10+\n- requests 2.32+\n\n## License\n\n[MIT License](LICENSE)\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2025 Mike Quest, Luxembourg\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "Python client package for the EODData market data REST API.",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://github.com/vrontier/eoddata-api",
        "Issues": "https://github.com/vrontier/eoddata-api/issues",
        "Repository": "https://github.com/vrontier/eoddata-api"
    },
    "split_keywords": [
        "finance",
        " markets",
        " eod",
        " historical-data",
        " api",
        " stocks",
        " eoddata"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "be86ffe7221035a4ec96d773f43dae8b5bab8367338a49d7bf847014fac105f2",
                "md5": "557bdfbe969effbeed5211d74b448bb2",
                "sha256": "40e3bbc540e0e96a6b1b52bb7e9ccfad0679b7dcf05a516eeb848a7ada1b927b"
            },
            "downloads": -1,
            "filename": "eoddata_api-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "557bdfbe969effbeed5211d74b448bb2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 18084,
            "upload_time": "2025-09-10T18:36:49",
            "upload_time_iso_8601": "2025-09-10T18:36:49.496859Z",
            "url": "https://files.pythonhosted.org/packages/be/86/ffe7221035a4ec96d773f43dae8b5bab8367338a49d7bf847014fac105f2/eoddata_api-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cf7d01966439595d3e26b4928854a2bd07552f0ca5f5217f5b274bdbbddf900a",
                "md5": "641955ce439f51bc6e94a1c9e7502547",
                "sha256": "2454e6a96f8628f2ae97f123659ede1c190ebf14abcfad624382c762a4fc7ea7"
            },
            "downloads": -1,
            "filename": "eoddata_api-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "641955ce439f51bc6e94a1c9e7502547",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 24770,
            "upload_time": "2025-09-10T18:36:50",
            "upload_time_iso_8601": "2025-09-10T18:36:50.917333Z",
            "url": "https://files.pythonhosted.org/packages/cf/7d/01966439595d3e26b4928854a2bd07552f0ca5f5217f5b274bdbbddf900a/eoddata_api-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-10 18:36:50",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "vrontier",
    "github_project": "eoddata",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.32.0"
                ],
                [
                    "<",
                    "3"
                ]
            ]
        }
    ],
    "lcname": "eoddata-api"
}
        
Elapsed time: 1.10461s