navigator-api


Namenavigator-api JSON
Version 2.14.1 PyPI version JSON
download
home_pageNone
SummaryNavigator: a batteries-included Web Framework based on aiohttp
upload_time2025-08-20 23:25:35
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseBSD-3-Clause
keywords framework asyncio uvloop aiohttp navigator web async
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage
            # โšก Navigator Framework

[![PyPI version](https://badge.fury.io/py/navigator-api.svg)](https://pypi.org/project/navigator-api/)
[![Python](https://img.shields.io/pypi/pyversions/navigator-api.svg)](https://pypi.org/project/navigator-api/)
[![License](https://img.shields.io/badge/license-BSD-blue.svg)](https://github.com/phenobarbital/navigator/blob/main/LICENSE)
[![Downloads](https://pepy.tech/badge/navigator-api)](https://pepy.tech/project/navigator-api)

> **A batteries-included async web framework built on aiohttp** ๐Ÿš€

Navigator is a next-generation Python framework designed for building high-performance asynchronous APIs and web applications. Built on top of aiohttp and asyncio, it provides enterprise-grade features out of the box with a focus on developer productivity and application scalability.

## โœจ Key Features

- **โšก Lightning Fast**: Built on aiohttp + uvloop for maximum performance
- **๐Ÿ”‹ Batteries Included**: Authentication, WebSockets, templates, database connections, and more
- **๐Ÿ—๏ธ Django-style Apps**: Organize code with modular, reusable application components
- **๐ŸŒ Multi-tenant Ready**: Built-in sub-domain support for SaaS applications
- **๐Ÿ”ง Centralized Config**: Unified configuration management with NavConfig
- **๐Ÿ”Œ Auto-Connections**: Automatic database connection handling with AsyncDB
- **๐Ÿ“ Class-based Views**: Powerful CRUD operations with ModelViews
- **๐ŸŽฏ Extensible**: Plugin architecture for adding custom features

## ๐Ÿš€ Quick Start

### Installation

```bash
# Using uv (recommended)
uv add navigator-api[uvloop,locale]

# Using pip
pip install navigator-api[uvloop,locale]
```

### Create Your First App

```bash
# Create a new Navigator project
nav init

# Create an application
nav app create myapp

# Run the development server
nav run --debug --reload
```

### Hello Navigator

```python
# app.py
import asyncio
import uvloop
from navigator import Application
from aiohttp import web

async def hello(request):
    return web.Response(text="Hello Navigator! ๐Ÿš€")

async def main():
    # Set uvloop as the event loop policy
    asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

    # Create Navigator application
    app = Application(enable_jinja2=True)

    # Add routes
    app.router.add_get('/', hello)

    # Enable WebSocket support
    app.add_websockets()

    # Setup and run
    return app.setup()

if __name__ == '__main__':
    asyncio.run(main())
```

## ๐Ÿ—๏ธ Architecture

### Class-based Views

Navigator provides powerful class-based views for building APIs:

```python
from navigator.views import BaseView, ModelView
from aiohttp import web
from datamodel import BaseModel

class UserView(BaseView):
    async def get(self):
        return web.json_response({"users": []})

    async def post(self):
        data = await self.request.json()
        # Process user creation
        return web.json_response({"status": "created"})

# Model-based CRUD operations
class User(BaseModel):
    name: str
    email: str
    age: int

class UserModelView(ModelView):
    model = User
    path = '/api/users'

    # Automatic CRUD operations:
    # GET /api/users - List all users
    # GET /api/users/{id} - Get specific user
    # POST /api/users - Create user
    # PUT /api/users/{id} - Update user
    # DELETE /api/users/{id} - Delete user
```

### Centralized Configuration

Navigator uses [NavConfig](https://github.com/phenobarbital/navconfig) for unified configuration management:

```python
# settings/settings.py
from navconfig import config

# Database configuration
DATABASE_URL = config.get('DATABASE_URL', 'postgresql://user:pass@localhost/db')

# Cache configuration
REDIS_URL = config.get('REDIS_URL', 'redis://localhost:6379')

# App configuration
DEBUG = config.getboolean('DEBUG', False)
SECRET_KEY = config.get('SECRET_KEY', required=True)

# Multiple environment support
ENV = config.get('ENV', 'development')  # development, staging, production
```

### Django-style Applications

Organize your code with modular applications:

```
myproject/
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ users/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ views.py
โ”‚   โ”‚   โ”œโ”€โ”€ models.py
โ”‚   โ”‚   โ”œโ”€โ”€ urls.py
โ”‚   โ”‚   โ””โ”€โ”€ templates/
โ”‚   โ””โ”€โ”€ products/
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ views.py
โ”‚       โ””โ”€โ”€ models.py
โ”œโ”€โ”€ settings/
โ”‚   โ””โ”€โ”€ settings.py
โ””โ”€โ”€ main.py
```

```python
# apps/users/__init__.py
from navigator.applications import AppConfig

class UsersConfig(AppConfig):
    name = 'users'
    path = '/api/users'

    def ready(self):
        # App initialization code
        pass
```

### Database Integration

Navigator integrates seamlessly with [AsyncDB](https://github.com/phenobarbital/asyncdb) for database operations:

```python
from navigator.views import ModelView
from asyncdb.models import Model

# Define your model
class User(Model):
    name: str
    email: str
    created_at: datetime

    class Meta:
        name = 'users'
        schema = 'public'

# Create CRUD API automatically
class UserAPI(ModelView):
    model = User
    path = '/api/users'

    # Optional: Add custom validation
    async def validate_payload(self, data):
        if 'email' not in data:
            raise ValueError("Email is required")
        return data

    # Optional: Add custom callbacks
    async def _post_callback(self, response, model):
        # Send welcome email, log activity, etc.
        pass
```

### WebSocket Support

Real-time features with built-in WebSocket support:

```python
from navigator import Application
from navigator.services.ws import WebSocketHandler

class ChatHandler(WebSocketHandler):
    async def on_message(self, message):
        # Broadcast message to all connected clients
        await self.broadcast(message)

app = Application()
app.add_websockets()
app.router.add_websocket('/ws/chat', ChatHandler)
```

## ๐Ÿ”Œ Extensions

Navigator's extension system allows you to add powerful features:

### Authentication Extension

```python
# Install: pip install navigator-auth
from navigator_auth import AuthConfig

class MyApp(Application):
    def configure(self):
        # Add JWT authentication
        self.add_extension(AuthConfig, {
            'secret_key': 'your-secret-key',
            'algorithm': 'HS256',
            'token_expiration': 3600
        })
```

### Admin Interface

```python
# Coming soon: Django-style admin interface
from navigator.admin import admin_site
from .models import User, Product

admin_site.register(User)
admin_site.register(Product)

app.include_router(admin_site.router, prefix='/admin')
```

## ๐Ÿ› ๏ธ CLI Tools

Navigator includes powerful CLI tools for development:

```bash
# Project management
nav init                        # Create new project
nav app create myapp            # Create new application

# Development
nav run                       # Start development server
nav shell                     # Interactive shell

```

## ๐Ÿ“ฆ Available Extensions

Navigator supports various optional dependencies:

```bash
# Performance optimizations
navigator-api[uvloop]         # uvloop for better async performance

# Internationalization
navigator-api[locale]         # Babel for i18n support

# Caching
navigator-api[memcache]       # Memcached support

# Production deployment
navigator-api[gunicorn]       # Gunicorn WSGI server

# All features
navigator-api[all]            # Install all optional dependencies
```

## ๐Ÿš€ Deployment

### AWS App Runner

Navigator includes built-in support for AWS App Runner deployment:

```yaml
# apprunner.yaml
version: 1.0
runtime: python3
build:
  commands:
    build:
      - pip install -r requirements.txt
      - python setup.py build_ext --inplace
run:
  runtime-version: '3.11'
  command: 'nav run --port 8080'
  network:
    port: 8080
    env: PORT
```

### Docker

```dockerfile
FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .
RUN python setup.py build_ext --inplace

EXPOSE 8000
CMD ["nav", "run", "--port", "8000"]
```

## ๐Ÿ“‹ Requirements

- **Python**: 3.9+ (3.11+ recommended)
- **Dependencies**:
  - aiohttp >= 3.10.0
  - asyncio (built-in)
  - uvloop >= 0.21.0 (optional, recommended)

## ๐Ÿงช Testing

```bash
# Install development dependencies
uv add --dev pytest pytest-asyncio coverage

# Run tests
pytest

# Run with coverage
pytest --cov=navigator tests/
```

## ๐Ÿ“š Documentation

- **Official Documentation**: [navigator-api.readthedocs.io](https://navigator-api.readthedocs.io) *(coming soon)*
- **API Reference**: Available in source code docstrings
- **Examples**: Check the [examples/](examples/) directory
- **Tutorial**: See [Quick Start](#-quick-start) section above

## ๐Ÿค Contributing

We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.

### Development Setup

```bash
# Clone the repository
git clone https://github.com/phenobarbital/navigator.git
cd navigator

# Create development environment
uv venv --python 3.11 .venv
source .venv/bin/activate

# Install development dependencies
uv sync --dev

# Install pre-commit hooks
pre-commit install

# Run tests
pytest
```

## ๐Ÿ“œ License

Navigator is licensed under the **BSD 3-Clause License**. See [LICENSE](LICENSE) for details.

## ๐Ÿ™ Credits

Navigator is built on top of these amazing projects:

- [aiohttp](https://docs.aiohttp.org/) - Async HTTP client/server framework
- [asyncio](https://docs.python.org/3/library/asyncio.html) - Asynchronous I/O framework
- [uvloop](https://github.com/MagicStack/uvloop) - Fast asyncio event loop
- [Jinja2](https://jinja.palletsprojects.com/) - Template engine
- [AsyncDB](https://github.com/phenobarbital/asyncdb) - Database connectivity
- [NavConfig](https://github.com/phenobarbital/navconfig) - Configuration management

## ๐Ÿ”— Links

- **PyPI**: https://pypi.org/project/navigator-api/
- **GitHub**: https://github.com/phenobarbital/navigator
- **Issues**: https://github.com/phenobarbital/navigator/issues
- **Discussions**: https://github.com/phenobarbital/navigator/discussions

---

Made with โค๏ธ by the Navigator team. Built for the async future of web development.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "navigator-api",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "\"Jesus Lara G.\" <jesuslarag@gmail.com>",
    "keywords": "framework, asyncio, uvloop, aiohttp, navigator, web, async",
    "author": null,
    "author_email": "\"Jesus Lara G.\" <jesuslarag@gmail.com>",
    "download_url": null,
    "platform": null,
    "description": "# \u26a1 Navigator Framework\n\n[![PyPI version](https://badge.fury.io/py/navigator-api.svg)](https://pypi.org/project/navigator-api/)\n[![Python](https://img.shields.io/pypi/pyversions/navigator-api.svg)](https://pypi.org/project/navigator-api/)\n[![License](https://img.shields.io/badge/license-BSD-blue.svg)](https://github.com/phenobarbital/navigator/blob/main/LICENSE)\n[![Downloads](https://pepy.tech/badge/navigator-api)](https://pepy.tech/project/navigator-api)\n\n> **A batteries-included async web framework built on aiohttp** \ud83d\ude80\n\nNavigator is a next-generation Python framework designed for building high-performance asynchronous APIs and web applications. Built on top of aiohttp and asyncio, it provides enterprise-grade features out of the box with a focus on developer productivity and application scalability.\n\n## \u2728 Key Features\n\n- **\u26a1 Lightning Fast**: Built on aiohttp + uvloop for maximum performance\n- **\ud83d\udd0b Batteries Included**: Authentication, WebSockets, templates, database connections, and more\n- **\ud83c\udfd7\ufe0f Django-style Apps**: Organize code with modular, reusable application components\n- **\ud83c\udf10 Multi-tenant Ready**: Built-in sub-domain support for SaaS applications\n- **\ud83d\udd27 Centralized Config**: Unified configuration management with NavConfig\n- **\ud83d\udd0c Auto-Connections**: Automatic database connection handling with AsyncDB\n- **\ud83d\udcdd Class-based Views**: Powerful CRUD operations with ModelViews\n- **\ud83c\udfaf Extensible**: Plugin architecture for adding custom features\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\n# Using uv (recommended)\nuv add navigator-api[uvloop,locale]\n\n# Using pip\npip install navigator-api[uvloop,locale]\n```\n\n### Create Your First App\n\n```bash\n# Create a new Navigator project\nnav init\n\n# Create an application\nnav app create myapp\n\n# Run the development server\nnav run --debug --reload\n```\n\n### Hello Navigator\n\n```python\n# app.py\nimport asyncio\nimport uvloop\nfrom navigator import Application\nfrom aiohttp import web\n\nasync def hello(request):\n    return web.Response(text=\"Hello Navigator! \ud83d\ude80\")\n\nasync def main():\n    # Set uvloop as the event loop policy\n    asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())\n\n    # Create Navigator application\n    app = Application(enable_jinja2=True)\n\n    # Add routes\n    app.router.add_get('/', hello)\n\n    # Enable WebSocket support\n    app.add_websockets()\n\n    # Setup and run\n    return app.setup()\n\nif __name__ == '__main__':\n    asyncio.run(main())\n```\n\n## \ud83c\udfd7\ufe0f Architecture\n\n### Class-based Views\n\nNavigator provides powerful class-based views for building APIs:\n\n```python\nfrom navigator.views import BaseView, ModelView\nfrom aiohttp import web\nfrom datamodel import BaseModel\n\nclass UserView(BaseView):\n    async def get(self):\n        return web.json_response({\"users\": []})\n\n    async def post(self):\n        data = await self.request.json()\n        # Process user creation\n        return web.json_response({\"status\": \"created\"})\n\n# Model-based CRUD operations\nclass User(BaseModel):\n    name: str\n    email: str\n    age: int\n\nclass UserModelView(ModelView):\n    model = User\n    path = '/api/users'\n\n    # Automatic CRUD operations:\n    # GET /api/users - List all users\n    # GET /api/users/{id} - Get specific user\n    # POST /api/users - Create user\n    # PUT /api/users/{id} - Update user\n    # DELETE /api/users/{id} - Delete user\n```\n\n### Centralized Configuration\n\nNavigator uses [NavConfig](https://github.com/phenobarbital/navconfig) for unified configuration management:\n\n```python\n# settings/settings.py\nfrom navconfig import config\n\n# Database configuration\nDATABASE_URL = config.get('DATABASE_URL', 'postgresql://user:pass@localhost/db')\n\n# Cache configuration\nREDIS_URL = config.get('REDIS_URL', 'redis://localhost:6379')\n\n# App configuration\nDEBUG = config.getboolean('DEBUG', False)\nSECRET_KEY = config.get('SECRET_KEY', required=True)\n\n# Multiple environment support\nENV = config.get('ENV', 'development')  # development, staging, production\n```\n\n### Django-style Applications\n\nOrganize your code with modular applications:\n\n```\nmyproject/\n\u251c\u2500\u2500 apps/\n\u2502   \u251c\u2500\u2500 users/\n\u2502   \u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2502   \u251c\u2500\u2500 views.py\n\u2502   \u2502   \u251c\u2500\u2500 models.py\n\u2502   \u2502   \u251c\u2500\u2500 urls.py\n\u2502   \u2502   \u2514\u2500\u2500 templates/\n\u2502   \u2514\u2500\u2500 products/\n\u2502       \u251c\u2500\u2500 __init__.py\n\u2502       \u251c\u2500\u2500 views.py\n\u2502       \u2514\u2500\u2500 models.py\n\u251c\u2500\u2500 settings/\n\u2502   \u2514\u2500\u2500 settings.py\n\u2514\u2500\u2500 main.py\n```\n\n```python\n# apps/users/__init__.py\nfrom navigator.applications import AppConfig\n\nclass UsersConfig(AppConfig):\n    name = 'users'\n    path = '/api/users'\n\n    def ready(self):\n        # App initialization code\n        pass\n```\n\n### Database Integration\n\nNavigator integrates seamlessly with [AsyncDB](https://github.com/phenobarbital/asyncdb) for database operations:\n\n```python\nfrom navigator.views import ModelView\nfrom asyncdb.models import Model\n\n# Define your model\nclass User(Model):\n    name: str\n    email: str\n    created_at: datetime\n\n    class Meta:\n        name = 'users'\n        schema = 'public'\n\n# Create CRUD API automatically\nclass UserAPI(ModelView):\n    model = User\n    path = '/api/users'\n\n    # Optional: Add custom validation\n    async def validate_payload(self, data):\n        if 'email' not in data:\n            raise ValueError(\"Email is required\")\n        return data\n\n    # Optional: Add custom callbacks\n    async def _post_callback(self, response, model):\n        # Send welcome email, log activity, etc.\n        pass\n```\n\n### WebSocket Support\n\nReal-time features with built-in WebSocket support:\n\n```python\nfrom navigator import Application\nfrom navigator.services.ws import WebSocketHandler\n\nclass ChatHandler(WebSocketHandler):\n    async def on_message(self, message):\n        # Broadcast message to all connected clients\n        await self.broadcast(message)\n\napp = Application()\napp.add_websockets()\napp.router.add_websocket('/ws/chat', ChatHandler)\n```\n\n## \ud83d\udd0c Extensions\n\nNavigator's extension system allows you to add powerful features:\n\n### Authentication Extension\n\n```python\n# Install: pip install navigator-auth\nfrom navigator_auth import AuthConfig\n\nclass MyApp(Application):\n    def configure(self):\n        # Add JWT authentication\n        self.add_extension(AuthConfig, {\n            'secret_key': 'your-secret-key',\n            'algorithm': 'HS256',\n            'token_expiration': 3600\n        })\n```\n\n### Admin Interface\n\n```python\n# Coming soon: Django-style admin interface\nfrom navigator.admin import admin_site\nfrom .models import User, Product\n\nadmin_site.register(User)\nadmin_site.register(Product)\n\napp.include_router(admin_site.router, prefix='/admin')\n```\n\n## \ud83d\udee0\ufe0f CLI Tools\n\nNavigator includes powerful CLI tools for development:\n\n```bash\n# Project management\nnav init                        # Create new project\nnav app create myapp            # Create new application\n\n# Development\nnav run                       # Start development server\nnav shell                     # Interactive shell\n\n```\n\n## \ud83d\udce6 Available Extensions\n\nNavigator supports various optional dependencies:\n\n```bash\n# Performance optimizations\nnavigator-api[uvloop]         # uvloop for better async performance\n\n# Internationalization\nnavigator-api[locale]         # Babel for i18n support\n\n# Caching\nnavigator-api[memcache]       # Memcached support\n\n# Production deployment\nnavigator-api[gunicorn]       # Gunicorn WSGI server\n\n# All features\nnavigator-api[all]            # Install all optional dependencies\n```\n\n## \ud83d\ude80 Deployment\n\n### AWS App Runner\n\nNavigator includes built-in support for AWS App Runner deployment:\n\n```yaml\n# apprunner.yaml\nversion: 1.0\nruntime: python3\nbuild:\n  commands:\n    build:\n      - pip install -r requirements.txt\n      - python setup.py build_ext --inplace\nrun:\n  runtime-version: '3.11'\n  command: 'nav run --port 8080'\n  network:\n    port: 8080\n    env: PORT\n```\n\n### Docker\n\n```dockerfile\nFROM python:3.11-slim\n\nWORKDIR /app\nCOPY requirements.txt .\nRUN pip install -r requirements.txt\n\nCOPY . .\nRUN python setup.py build_ext --inplace\n\nEXPOSE 8000\nCMD [\"nav\", \"run\", \"--port\", \"8000\"]\n```\n\n## \ud83d\udccb Requirements\n\n- **Python**: 3.9+ (3.11+ recommended)\n- **Dependencies**:\n  - aiohttp >= 3.10.0\n  - asyncio (built-in)\n  - uvloop >= 0.21.0 (optional, recommended)\n\n## \ud83e\uddea Testing\n\n```bash\n# Install development dependencies\nuv add --dev pytest pytest-asyncio coverage\n\n# Run tests\npytest\n\n# Run with coverage\npytest --cov=navigator tests/\n```\n\n## \ud83d\udcda Documentation\n\n- **Official Documentation**: [navigator-api.readthedocs.io](https://navigator-api.readthedocs.io) *(coming soon)*\n- **API Reference**: Available in source code docstrings\n- **Examples**: Check the [examples/](examples/) directory\n- **Tutorial**: See [Quick Start](#-quick-start) section above\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/phenobarbital/navigator.git\ncd navigator\n\n# Create development environment\nuv venv --python 3.11 .venv\nsource .venv/bin/activate\n\n# Install development dependencies\nuv sync --dev\n\n# Install pre-commit hooks\npre-commit install\n\n# Run tests\npytest\n```\n\n## \ud83d\udcdc License\n\nNavigator is licensed under the **BSD 3-Clause License**. See [LICENSE](LICENSE) for details.\n\n## \ud83d\ude4f Credits\n\nNavigator is built on top of these amazing projects:\n\n- [aiohttp](https://docs.aiohttp.org/) - Async HTTP client/server framework\n- [asyncio](https://docs.python.org/3/library/asyncio.html) - Asynchronous I/O framework\n- [uvloop](https://github.com/MagicStack/uvloop) - Fast asyncio event loop\n- [Jinja2](https://jinja.palletsprojects.com/) - Template engine\n- [AsyncDB](https://github.com/phenobarbital/asyncdb) - Database connectivity\n- [NavConfig](https://github.com/phenobarbital/navconfig) - Configuration management\n\n## \ud83d\udd17 Links\n\n- **PyPI**: https://pypi.org/project/navigator-api/\n- **GitHub**: https://github.com/phenobarbital/navigator\n- **Issues**: https://github.com/phenobarbital/navigator/issues\n- **Discussions**: https://github.com/phenobarbital/navigator/discussions\n\n---\n\nMade with \u2764\ufe0f by the Navigator team. Built for the async future of web development.\n",
    "bugtrack_url": null,
    "license": "BSD-3-Clause",
    "summary": "Navigator: a batteries-included Web Framework based on aiohttp",
    "version": "2.14.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/phenobarbital/navigator/issues",
        "Changelog": "https://github.com/phenobarbital/navigator/blob/main/CHANGELOG.md",
        "Documentation": "https://navigator-api.readthedocs.io",
        "Funding": "https://paypal.me/phenobarbital",
        "Homepage": "https://github.com/phenobarbital/navigator",
        "Repository": "https://github.com/phenobarbital/navigator.git"
    },
    "split_keywords": [
        "framework",
        " asyncio",
        " uvloop",
        " aiohttp",
        " navigator",
        " web",
        " async"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fee9c3618d4635872a6b90fcd668695e9810a4e64891d6f1495c6690ec74155a",
                "md5": "a28631f09d44b9e81e0106f5d5267049",
                "sha256": "f92677cbc14271ed5168d81535095c42cd9838d29fbdcfa06571ef270111e600"
            },
            "downloads": -1,
            "filename": "navigator_api-2.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a28631f09d44b9e81e0106f5d5267049",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 1837543,
            "upload_time": "2025-08-20T23:25:35",
            "upload_time_iso_8601": "2025-08-20T23:25:35.554827Z",
            "url": "https://files.pythonhosted.org/packages/fe/e9/c3618d4635872a6b90fcd668695e9810a4e64891d6f1495c6690ec74155a/navigator_api-2.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f6e8c7da95a86f275bc4e8501d9fcd7910ebece0f37a8a43698bcecc8d7f8868",
                "md5": "e472bb224e5976528f334f10644c1215",
                "sha256": "aa67e1957fc77cc2c6b0a38e48dd0f6ca4ba1b01165e37dc7ea0f91d4f4a8e2d"
            },
            "downloads": -1,
            "filename": "navigator_api-2.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e472bb224e5976528f334f10644c1215",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 1933121,
            "upload_time": "2025-08-20T23:25:37",
            "upload_time_iso_8601": "2025-08-20T23:25:37.977326Z",
            "url": "https://files.pythonhosted.org/packages/f6/e8/c7da95a86f275bc4e8501d9fcd7910ebece0f37a8a43698bcecc8d7f8868/navigator_api-2.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "73602ec9c32ef890912bd8bdeac6a188c9ac35e65d341996ee408190c2f3ac48",
                "md5": "66103df1e7ddb00cc2bcecf94bf5d7b9",
                "sha256": "852e1f427d445898b72a89e71a65c16a7896a4b621e869251c0f40b8da68f03a"
            },
            "downloads": -1,
            "filename": "navigator_api-2.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
            "has_sig": false,
            "md5_digest": "66103df1e7ddb00cc2bcecf94bf5d7b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 2034519,
            "upload_time": "2025-08-20T23:25:39",
            "upload_time_iso_8601": "2025-08-20T23:25:39.550152Z",
            "url": "https://files.pythonhosted.org/packages/73/60/2ec9c32ef890912bd8bdeac6a188c9ac35e65d341996ee408190c2f3ac48/navigator_api-2.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-20 23:25:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "phenobarbital",
    "github_project": "navigator",
    "travis_ci": true,
    "coveralls": true,
    "github_actions": true,
    "tox": true,
    "lcname": "navigator-api"
}
        
Elapsed time: 1.70805s