nocodb-simple-client


Namenocodb-simple-client JSON
Version 1.1.1 PyPI version JSON
download
home_pageNone
SummaryA simple and powerful NocoDB REST API client for Python
upload_time2025-09-01 21:07:55
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords api client database low-code no-code nocodb rest
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <!-- AUTO-GENERATED FILE. DO NOT EDIT. Edit docs/README.template.MD instead. -->
<!-- Generated on 2025-09-01 20:59:19 UTC -->

# BAUER GROUP - NocoDB Simple Client

[![PyPI Version](https://badge.fury.io/py/nocodb-simple-client.svg)](https://badge.fury.io/py/nocodb-simple-client)
[![Python Support](https://img.shields.io/pypi/pyversions/nocodb-simple-client.svg)](https://pypi.org/project/nocodb-simple-client/)

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

[![๐Ÿ CI/CD](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/actions/workflows/python-automatic-release.yml/badge.svg)](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/actions/workflows/python-automatic-release.yml)


A simple and powerful Python client for interacting with [NocoDB](https://nocodb.com/) REST API. This client provides an intuitive interface for performing CRUD operations, managing file attachments, and handling complex queries on your NocoDB tables.

**Repository Information:**

- **Version:** v1.1.0 (2025-09-01)
- **Repository:** [bauer-group/LIB-NocoDB_SimpleClient](https://github.com/bauer-group/LIB-NocoDB_SimpleClient)
- **Branch:** main
- **Architecture:** Modular, Reusable, Enterprise-Ready

## ๐ŸŒŸ Features

- **Easy to Use**: Intuitive API design with comprehensive documentation
- **Full CRUD Operations**: Create, read, update, and delete records with ease
- **File Management**: Upload, download, and manage file attachments
- **Advanced Querying**: Complex filtering, sorting, and pagination support
- **Type Hints**: Full type annotation support for better IDE experience
- **Error Handling**: Comprehensive exception handling with specific error types
- **Context Manager**: Automatic resource management with context manager support
- **Flexible Configuration**: Support for custom timeouts, redirects, and authentication
- **Production Ready**: Robust error handling and resource management

## ๐Ÿš€ Quick Start

### Installation

Install from PyPI using pip:

```bash
pip install nocodb-simple-client
```

### Basic Usage

```python
from nocodb_simple_client import NocoDBClient, NocoDBTable

# Initialize the client
client = NocoDBClient(
    base_url="https://your-nocodb-instance.com",
    db_auth_token="your-api-token"
)

# Create a table instance
table = NocoDBTable(client, table_id="your-table-id")

# Get records
records = table.get_records(limit=10)
print(f"Retrieved {len(records)} records")

# Create a new record
new_record = {
    "Name": "John Doe",
    "Email": "john@example.com",
    "Age": 30
}
record_id = table.insert_record(new_record)
print(f"Created record with ID: {record_id}")

# Don't forget to close the client
client.close()
```

### Using Context Manager (Recommended)

```python
from nocodb_simple_client import NocoDBClient, NocoDBTable

with NocoDBClient(
    base_url="https://your-nocodb-instance.com",
    db_auth_token="your-api-token"
) as client:
    table = NocoDBTable(client, table_id="your-table-id")

    # Your operations here
    records = table.get_records(where="(Status,eq,Active)", limit=5)

    # Client automatically closes when exiting the context
```

## ๐Ÿ“š Documentation

### Client Configuration

The `NocoDBClient` supports various configuration options:

```python
client = NocoDBClient(
    base_url="https://your-nocodb-instance.com",
    db_auth_token="your-api-token",
    access_protection_auth="your-protection-token",        # Value for protection header
    access_protection_header="X-Custom-Auth",              # Custom header name (optional)
    max_redirects=3,                                        # Maximum number of redirects
    timeout=30                                              # Request timeout in seconds
)
```

#### Access Protection Header

If your NocoDB instance is protected by a reverse proxy that requires a custom authentication header:

```python
# Using default header name (X-BAUERGROUP-Auth)
client = NocoDBClient(
    base_url="https://your-nocodb-instance.com",
    db_auth_token="your-api-token",
    access_protection_auth="your-protection-token"
)

# Using custom header name
client = NocoDBClient(
    base_url="https://your-nocodb-instance.com",
    db_auth_token="your-api-token",
    access_protection_auth="your-protection-token",
    access_protection_header="X-My-Custom-Auth"
)
```

### CRUD Operations

#### Get Records

```python
# Basic retrieval
records = table.get_records()

# With filtering and sorting
records = table.get_records(
    where="(Age,gt,21)~and(Status,eq,Active)",  # Age > 21 AND Status = Active
    sort="-CreatedAt",                          # Sort by CreatedAt descending
    fields=["Id", "Name", "Email"],             # Select specific fields
    limit=50                                    # Limit results
)

# Get a single record
record = table.get_record(record_id=123, fields=["Id", "Name"])
```

#### Create Records

```python
# Insert a single record
new_record = {
    "Name": "Jane Smith",
    "Email": "jane@example.com",
    "Active": True
}
record_id = table.insert_record(new_record)
```

#### Update Records

```python
# Update an existing record
update_data = {
    "Name": "Jane Doe",
    "Status": "Updated"
}
updated_id = table.update_record(update_data, record_id=123)
```

#### Delete Records

```python
# Delete a record
deleted_id = table.delete_record(record_id=123)
```

#### Count Records

```python
# Count all records
total = table.count_records()

# Count with filter
active_count = table.count_records(where="(Status,eq,Active)")
```

### File Operations

NocoDB Simple Client provides comprehensive file management capabilities:

#### Upload Files

```python
# Attach a single file to a record
table.attach_file_to_record(
    record_id=123,
    field_name="Document",
    file_path="/path/to/your/file.pdf"
)

# Attach multiple files (appends to existing files)
table.attach_files_to_record(
    record_id=123,
    field_name="Documents",
    file_paths=["/path/file1.pdf", "/path/file2.jpg"]
)
```

#### Download Files

```python
# Download the first file from a record
table.download_file_from_record(
    record_id=123,
    field_name="Document",
    file_path="/path/to/save/downloaded_file.pdf"
)

# Download all files from a record
table.download_files_from_record(
    record_id=123,
    field_name="Documents",
    directory="/path/to/download/directory"
)
```

#### Manage Files

```python
# Remove all files from a field
table.delete_file_from_record(
    record_id=123,
    field_name="Document"
)
```

### Advanced Filtering

NocoDB Simple Client supports sophisticated filtering options:

#### Comparison Operators

```python
# Equality
records = table.get_records(where="(Status,eq,Active)")

# Numeric comparisons
records = table.get_records(where="(Age,gt,21)")      # Greater than
records = table.get_records(where="(Age,gte,21)")     # Greater than or equal
records = table.get_records(where="(Age,lt,65)")      # Less than
records = table.get_records(where="(Age,lte,65)")     # Less than or equal

# Text searches
records = table.get_records(where="(Name,like,%John%)")    # Contains "John"
records = table.get_records(where="(Email,like,%.com)")   # Ends with ".com"
```

#### Logical Operators

```python
# AND conditions
records = table.get_records(where="(Status,eq,Active)~and(Age,gt,18)")

# OR conditions
records = table.get_records(where="(Status,eq,Active)~or(Status,eq,Pending)")

# Complex combinations
records = table.get_records(
    where="((Status,eq,Active)~or(Status,eq,Pending))~and(Age,gt,18)"
)
```

#### NULL/Empty Checks

```python
# Check for empty values
records = table.get_records(where="(Email,isblank)")

# Check for non-empty values
records = table.get_records(where="(Email,isnotblank)")
```

### Sorting

```python
# Single column sorting
records = table.get_records(sort="Name")         # Ascending
records = table.get_records(sort="-CreatedAt")   # Descending

# Multiple column sorting
records = table.get_records(sort="-Status,Name") # Status desc, then Name asc
```

## ๐Ÿ›ก๏ธ Error Handling

The client provides specific exceptions for different error scenarios:

```python
from nocodb_simple_client import NocoDBException, RecordNotFoundException

try:
    record = table.get_record(record_id=99999)
except RecordNotFoundException as e:
    print(f"Record not found: {e.message}")
except NocoDBException as e:
    print(f"NocoDB API error: {e.error} - {e.message}")
except Exception as e:
    print(f"Unexpected error: {e}")
```

### Exception Types

- `NocoDBException`: Base exception for all NocoDB-related errors
- `RecordNotFoundException`: Thrown when a requested record doesn't exist

## ๐Ÿงช Examples

Check out the [`examples/`](examples/) directory for comprehensive examples:

- **[Basic Usage](examples/basic_usage.py)**: CRUD operations and fundamentals
- **[File Operations](examples/file_operations.py)**: File upload/download examples
- **[Advanced Querying](examples/advanced_querying.py)**: Complex filtering and sorting
- **[Context Manager Usage](examples/context_manager_usage.py)**: Proper resource management

## ๐Ÿ“‹ Requirements

- Python 3.8 or higher
- `requests >= 2.25.0`
- `requests-toolbelt >= 0.9.1`

## ๐Ÿ”ง Development

### Quick Setup

Use the automated setup script for your platform:

```bash
# Windows
scripts\setup.cmd

# macOS/Linux
./scripts/setup.sh

# Or run Python directly (cross-platform)
python scripts/setup.py
```

This will:
- Create a virtual environment
- Install all dependencies
- Setup pre-commit hooks
- Verify the installation

### Manual Setup

1. Clone the repository:
```bash
git clone https://github.com/bauer-group/LIB-NocoDB_SimpleClient.git
cd nocodb-simple-client
```

2. Create and activate a virtual environment:
```bash
python -m venv venv

# Windows
venv\Scripts\activate

# macOS/Linux
source venv/bin/activate
```

3. Install development dependencies:
```bash
pip install -e ".[dev,docs]"
pre-commit install
```

### Local Validation

Use these commands to validate your code locally:

#### Quick Validation
```bash
# Windows
scripts\quick-test.cmd

# macOS/Linux
./scripts/quick-test.sh

# Or cross-platform
python scripts/quick-test.py
```

#### Complete Validation
```bash
# Windows
scripts\validate.cmd

# macOS/Linux
./scripts/validate.sh

# Or cross-platform
python scripts/validate.py
```

#### Individual Commands
```bash
# Code formatting
black src/ tests/
ruff --fix src/ tests/

# Linting
ruff check src/ tests/

# Type checking
mypy src/nocodb_simple_client/

# Security scan
bandit -r src/

# Run tests
pytest

# Test with coverage
pytest --cov=src/nocodb_simple_client --cov-report=html

# Fast tests only (skip slow/integration tests)
pytest -m "not slow and not integration"

# Build package
python -m build
```

#### Using Makefile (macOS/Linux)
```bash
# See all available commands
make help

# Install dev dependencies
make install-dev

# Run all checks
make all-checks

# Quick test
make test-fast

# Format code
make format

# Generate coverage report
make test-cov
```

### Pre-commit Hooks

Pre-commit hooks automatically run quality checks before each commit:

```bash
# Install hooks (done automatically by setup script)
pre-commit install

# Run manually on all files
pre-commit run --all-files
```

### Build and Test Package

```bash
# Build package
python -m build

# Test installation
pip install dist/nocodb_simple_client-*.whl

# Clean build artifacts (Windows)
rmdir /s build dist *.egg-info

# Clean build artifacts (macOS/Linux)
rm -rf build/ dist/ *.egg-info/
```

### Development Workflow

1. **Setup**: Run setup script for your platform
2. **Code**: Make your changes
3. **Quick Test**: Run `python scripts/quick-test.py`
4. **Full Validation**: Run `python scripts/validate.py`
5. **Commit**: Pre-commit hooks will run automatically
6. **Push**: CI will run full test suite

## ๐Ÿค Contributing

We welcome contributions! Please see [CONTRIBUTING.MD](CONTRIBUTING.MD) for details.

### Quick Contribution Guide

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests for new functionality
5. Ensure all tests pass (`pytest`)
6. Run code quality checks (`black .`, `ruff check .`, `mypy src/nocodb_simple_client`)
7. Commit your changes (`git commit -m 'Add some amazing feature'`)
8. Push to the branch (`git push origin feature/amazing-feature`)
9. Open a Pull Request

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ™ Acknowledgments

- [NocoDB](https://nocodb.com/) team for creating an amazing open-source Airtable alternative
- The Python community for excellent tooling and libraries
- Contributors who help improve this client

## ๐Ÿ“ž Support

- **Documentation**: You're reading it! ๐Ÿ“–
- **Issues**: [GitHub Issues](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/issues)
- **Discussions**: [GitHub Discussions](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/discussions)
- **Email**: support@bauer-group.com

## ๐Ÿ“Š Changelog

See [CHANGELOG.MD](CHANGELOG.MD) for a detailed history of changes.

---

**Made with โค๏ธ by [BAUER GROUP](https://bauer-group.com)**

*If this library helps you build something awesome, we'd love to hear about it!*

---

*Generated on 2025-09-01 20:59:19 UTC from [docs/README.template.MD](docs/README.template.MD)*

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "nocodb-simple-client",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "api, client, database, low-code, no-code, nocodb, rest",
    "author": null,
    "author_email": "\"BAUER GROUP (Karl Bauer)\" <karl.bauer@bauer-group.com>",
    "download_url": "https://files.pythonhosted.org/packages/c9/6b/30af1acfc45c7d66690d17267fb0622ae7662980da327f649b68354b7266/nocodb_simple_client-1.1.1.tar.gz",
    "platform": null,
    "description": "<!-- AUTO-GENERATED FILE. DO NOT EDIT. Edit docs/README.template.MD instead. -->\n<!-- Generated on 2025-09-01 20:59:19 UTC -->\n\n# BAUER GROUP - NocoDB Simple Client\n\n[![PyPI Version](https://badge.fury.io/py/nocodb-simple-client.svg)](https://badge.fury.io/py/nocodb-simple-client)\n[![Python Support](https://img.shields.io/pypi/pyversions/nocodb-simple-client.svg)](https://pypi.org/project/nocodb-simple-client/)\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n[![\ud83d\udc0d CI/CD](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/actions/workflows/python-automatic-release.yml/badge.svg)](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/actions/workflows/python-automatic-release.yml)\n\n\nA simple and powerful Python client for interacting with [NocoDB](https://nocodb.com/) REST API. This client provides an intuitive interface for performing CRUD operations, managing file attachments, and handling complex queries on your NocoDB tables.\n\n**Repository Information:**\n\n- **Version:** v1.1.0 (2025-09-01)\n- **Repository:** [bauer-group/LIB-NocoDB_SimpleClient](https://github.com/bauer-group/LIB-NocoDB_SimpleClient)\n- **Branch:** main\n- **Architecture:** Modular, Reusable, Enterprise-Ready\n\n## \ud83c\udf1f Features\n\n- **Easy to Use**: Intuitive API design with comprehensive documentation\n- **Full CRUD Operations**: Create, read, update, and delete records with ease\n- **File Management**: Upload, download, and manage file attachments\n- **Advanced Querying**: Complex filtering, sorting, and pagination support\n- **Type Hints**: Full type annotation support for better IDE experience\n- **Error Handling**: Comprehensive exception handling with specific error types\n- **Context Manager**: Automatic resource management with context manager support\n- **Flexible Configuration**: Support for custom timeouts, redirects, and authentication\n- **Production Ready**: Robust error handling and resource management\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\nInstall from PyPI using pip:\n\n```bash\npip install nocodb-simple-client\n```\n\n### Basic Usage\n\n```python\nfrom nocodb_simple_client import NocoDBClient, NocoDBTable\n\n# Initialize the client\nclient = NocoDBClient(\n    base_url=\"https://your-nocodb-instance.com\",\n    db_auth_token=\"your-api-token\"\n)\n\n# Create a table instance\ntable = NocoDBTable(client, table_id=\"your-table-id\")\n\n# Get records\nrecords = table.get_records(limit=10)\nprint(f\"Retrieved {len(records)} records\")\n\n# Create a new record\nnew_record = {\n    \"Name\": \"John Doe\",\n    \"Email\": \"john@example.com\",\n    \"Age\": 30\n}\nrecord_id = table.insert_record(new_record)\nprint(f\"Created record with ID: {record_id}\")\n\n# Don't forget to close the client\nclient.close()\n```\n\n### Using Context Manager (Recommended)\n\n```python\nfrom nocodb_simple_client import NocoDBClient, NocoDBTable\n\nwith NocoDBClient(\n    base_url=\"https://your-nocodb-instance.com\",\n    db_auth_token=\"your-api-token\"\n) as client:\n    table = NocoDBTable(client, table_id=\"your-table-id\")\n\n    # Your operations here\n    records = table.get_records(where=\"(Status,eq,Active)\", limit=5)\n\n    # Client automatically closes when exiting the context\n```\n\n## \ud83d\udcda Documentation\n\n### Client Configuration\n\nThe `NocoDBClient` supports various configuration options:\n\n```python\nclient = NocoDBClient(\n    base_url=\"https://your-nocodb-instance.com\",\n    db_auth_token=\"your-api-token\",\n    access_protection_auth=\"your-protection-token\",        # Value for protection header\n    access_protection_header=\"X-Custom-Auth\",              # Custom header name (optional)\n    max_redirects=3,                                        # Maximum number of redirects\n    timeout=30                                              # Request timeout in seconds\n)\n```\n\n#### Access Protection Header\n\nIf your NocoDB instance is protected by a reverse proxy that requires a custom authentication header:\n\n```python\n# Using default header name (X-BAUERGROUP-Auth)\nclient = NocoDBClient(\n    base_url=\"https://your-nocodb-instance.com\",\n    db_auth_token=\"your-api-token\",\n    access_protection_auth=\"your-protection-token\"\n)\n\n# Using custom header name\nclient = NocoDBClient(\n    base_url=\"https://your-nocodb-instance.com\",\n    db_auth_token=\"your-api-token\",\n    access_protection_auth=\"your-protection-token\",\n    access_protection_header=\"X-My-Custom-Auth\"\n)\n```\n\n### CRUD Operations\n\n#### Get Records\n\n```python\n# Basic retrieval\nrecords = table.get_records()\n\n# With filtering and sorting\nrecords = table.get_records(\n    where=\"(Age,gt,21)~and(Status,eq,Active)\",  # Age > 21 AND Status = Active\n    sort=\"-CreatedAt\",                          # Sort by CreatedAt descending\n    fields=[\"Id\", \"Name\", \"Email\"],             # Select specific fields\n    limit=50                                    # Limit results\n)\n\n# Get a single record\nrecord = table.get_record(record_id=123, fields=[\"Id\", \"Name\"])\n```\n\n#### Create Records\n\n```python\n# Insert a single record\nnew_record = {\n    \"Name\": \"Jane Smith\",\n    \"Email\": \"jane@example.com\",\n    \"Active\": True\n}\nrecord_id = table.insert_record(new_record)\n```\n\n#### Update Records\n\n```python\n# Update an existing record\nupdate_data = {\n    \"Name\": \"Jane Doe\",\n    \"Status\": \"Updated\"\n}\nupdated_id = table.update_record(update_data, record_id=123)\n```\n\n#### Delete Records\n\n```python\n# Delete a record\ndeleted_id = table.delete_record(record_id=123)\n```\n\n#### Count Records\n\n```python\n# Count all records\ntotal = table.count_records()\n\n# Count with filter\nactive_count = table.count_records(where=\"(Status,eq,Active)\")\n```\n\n### File Operations\n\nNocoDB Simple Client provides comprehensive file management capabilities:\n\n#### Upload Files\n\n```python\n# Attach a single file to a record\ntable.attach_file_to_record(\n    record_id=123,\n    field_name=\"Document\",\n    file_path=\"/path/to/your/file.pdf\"\n)\n\n# Attach multiple files (appends to existing files)\ntable.attach_files_to_record(\n    record_id=123,\n    field_name=\"Documents\",\n    file_paths=[\"/path/file1.pdf\", \"/path/file2.jpg\"]\n)\n```\n\n#### Download Files\n\n```python\n# Download the first file from a record\ntable.download_file_from_record(\n    record_id=123,\n    field_name=\"Document\",\n    file_path=\"/path/to/save/downloaded_file.pdf\"\n)\n\n# Download all files from a record\ntable.download_files_from_record(\n    record_id=123,\n    field_name=\"Documents\",\n    directory=\"/path/to/download/directory\"\n)\n```\n\n#### Manage Files\n\n```python\n# Remove all files from a field\ntable.delete_file_from_record(\n    record_id=123,\n    field_name=\"Document\"\n)\n```\n\n### Advanced Filtering\n\nNocoDB Simple Client supports sophisticated filtering options:\n\n#### Comparison Operators\n\n```python\n# Equality\nrecords = table.get_records(where=\"(Status,eq,Active)\")\n\n# Numeric comparisons\nrecords = table.get_records(where=\"(Age,gt,21)\")      # Greater than\nrecords = table.get_records(where=\"(Age,gte,21)\")     # Greater than or equal\nrecords = table.get_records(where=\"(Age,lt,65)\")      # Less than\nrecords = table.get_records(where=\"(Age,lte,65)\")     # Less than or equal\n\n# Text searches\nrecords = table.get_records(where=\"(Name,like,%John%)\")    # Contains \"John\"\nrecords = table.get_records(where=\"(Email,like,%.com)\")   # Ends with \".com\"\n```\n\n#### Logical Operators\n\n```python\n# AND conditions\nrecords = table.get_records(where=\"(Status,eq,Active)~and(Age,gt,18)\")\n\n# OR conditions\nrecords = table.get_records(where=\"(Status,eq,Active)~or(Status,eq,Pending)\")\n\n# Complex combinations\nrecords = table.get_records(\n    where=\"((Status,eq,Active)~or(Status,eq,Pending))~and(Age,gt,18)\"\n)\n```\n\n#### NULL/Empty Checks\n\n```python\n# Check for empty values\nrecords = table.get_records(where=\"(Email,isblank)\")\n\n# Check for non-empty values\nrecords = table.get_records(where=\"(Email,isnotblank)\")\n```\n\n### Sorting\n\n```python\n# Single column sorting\nrecords = table.get_records(sort=\"Name\")         # Ascending\nrecords = table.get_records(sort=\"-CreatedAt\")   # Descending\n\n# Multiple column sorting\nrecords = table.get_records(sort=\"-Status,Name\") # Status desc, then Name asc\n```\n\n## \ud83d\udee1\ufe0f Error Handling\n\nThe client provides specific exceptions for different error scenarios:\n\n```python\nfrom nocodb_simple_client import NocoDBException, RecordNotFoundException\n\ntry:\n    record = table.get_record(record_id=99999)\nexcept RecordNotFoundException as e:\n    print(f\"Record not found: {e.message}\")\nexcept NocoDBException as e:\n    print(f\"NocoDB API error: {e.error} - {e.message}\")\nexcept Exception as e:\n    print(f\"Unexpected error: {e}\")\n```\n\n### Exception Types\n\n- `NocoDBException`: Base exception for all NocoDB-related errors\n- `RecordNotFoundException`: Thrown when a requested record doesn't exist\n\n## \ud83e\uddea Examples\n\nCheck out the [`examples/`](examples/) directory for comprehensive examples:\n\n- **[Basic Usage](examples/basic_usage.py)**: CRUD operations and fundamentals\n- **[File Operations](examples/file_operations.py)**: File upload/download examples\n- **[Advanced Querying](examples/advanced_querying.py)**: Complex filtering and sorting\n- **[Context Manager Usage](examples/context_manager_usage.py)**: Proper resource management\n\n## \ud83d\udccb Requirements\n\n- Python 3.8 or higher\n- `requests >= 2.25.0`\n- `requests-toolbelt >= 0.9.1`\n\n## \ud83d\udd27 Development\n\n### Quick Setup\n\nUse the automated setup script for your platform:\n\n```bash\n# Windows\nscripts\\setup.cmd\n\n# macOS/Linux\n./scripts/setup.sh\n\n# Or run Python directly (cross-platform)\npython scripts/setup.py\n```\n\nThis will:\n- Create a virtual environment\n- Install all dependencies\n- Setup pre-commit hooks\n- Verify the installation\n\n### Manual Setup\n\n1. Clone the repository:\n```bash\ngit clone https://github.com/bauer-group/LIB-NocoDB_SimpleClient.git\ncd nocodb-simple-client\n```\n\n2. Create and activate a virtual environment:\n```bash\npython -m venv venv\n\n# Windows\nvenv\\Scripts\\activate\n\n# macOS/Linux\nsource venv/bin/activate\n```\n\n3. Install development dependencies:\n```bash\npip install -e \".[dev,docs]\"\npre-commit install\n```\n\n### Local Validation\n\nUse these commands to validate your code locally:\n\n#### Quick Validation\n```bash\n# Windows\nscripts\\quick-test.cmd\n\n# macOS/Linux\n./scripts/quick-test.sh\n\n# Or cross-platform\npython scripts/quick-test.py\n```\n\n#### Complete Validation\n```bash\n# Windows\nscripts\\validate.cmd\n\n# macOS/Linux\n./scripts/validate.sh\n\n# Or cross-platform\npython scripts/validate.py\n```\n\n#### Individual Commands\n```bash\n# Code formatting\nblack src/ tests/\nruff --fix src/ tests/\n\n# Linting\nruff check src/ tests/\n\n# Type checking\nmypy src/nocodb_simple_client/\n\n# Security scan\nbandit -r src/\n\n# Run tests\npytest\n\n# Test with coverage\npytest --cov=src/nocodb_simple_client --cov-report=html\n\n# Fast tests only (skip slow/integration tests)\npytest -m \"not slow and not integration\"\n\n# Build package\npython -m build\n```\n\n#### Using Makefile (macOS/Linux)\n```bash\n# See all available commands\nmake help\n\n# Install dev dependencies\nmake install-dev\n\n# Run all checks\nmake all-checks\n\n# Quick test\nmake test-fast\n\n# Format code\nmake format\n\n# Generate coverage report\nmake test-cov\n```\n\n### Pre-commit Hooks\n\nPre-commit hooks automatically run quality checks before each commit:\n\n```bash\n# Install hooks (done automatically by setup script)\npre-commit install\n\n# Run manually on all files\npre-commit run --all-files\n```\n\n### Build and Test Package\n\n```bash\n# Build package\npython -m build\n\n# Test installation\npip install dist/nocodb_simple_client-*.whl\n\n# Clean build artifacts (Windows)\nrmdir /s build dist *.egg-info\n\n# Clean build artifacts (macOS/Linux)\nrm -rf build/ dist/ *.egg-info/\n```\n\n### Development Workflow\n\n1. **Setup**: Run setup script for your platform\n2. **Code**: Make your changes\n3. **Quick Test**: Run `python scripts/quick-test.py`\n4. **Full Validation**: Run `python scripts/validate.py`\n5. **Commit**: Pre-commit hooks will run automatically\n6. **Push**: CI will run full test suite\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.MD](CONTRIBUTING.MD) for details.\n\n### Quick Contribution Guide\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Add tests for new functionality\n5. Ensure all tests pass (`pytest`)\n6. Run code quality checks (`black .`, `ruff check .`, `mypy src/nocodb_simple_client`)\n7. Commit your changes (`git commit -m 'Add some amazing feature'`)\n8. Push to the branch (`git push origin feature/amazing-feature`)\n9. Open a Pull Request\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- [NocoDB](https://nocodb.com/) team for creating an amazing open-source Airtable alternative\n- The Python community for excellent tooling and libraries\n- Contributors who help improve this client\n\n## \ud83d\udcde Support\n\n- **Documentation**: You're reading it! \ud83d\udcd6\n- **Issues**: [GitHub Issues](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/issues)\n- **Discussions**: [GitHub Discussions](https://github.com/bauer-group/LIB-NocoDB_SimpleClient/discussions)\n- **Email**: support@bauer-group.com\n\n## \ud83d\udcca Changelog\n\nSee [CHANGELOG.MD](CHANGELOG.MD) for a detailed history of changes.\n\n---\n\n**Made with \u2764\ufe0f by [BAUER GROUP](https://bauer-group.com)**\n\n*If this library helps you build something awesome, we'd love to hear about it!*\n\n---\n\n*Generated on 2025-09-01 20:59:19 UTC from [docs/README.template.MD](docs/README.template.MD)*\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A simple and powerful NocoDB REST API client for Python",
    "version": "1.1.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/bauer-group/nocodb-simple-client/issues",
        "Changelog": "https://github.com/bauer-group/nocodb-simple-client/blob/main/CHANGELOG.MD",
        "Documentation": "https://github.com/bauer-group/nocodb-simple-client#readme",
        "Homepage": "https://github.com/bauer-group/nocodb-simple-client",
        "Repository": "https://github.com/bauer-group/nocodb-simple-client.git"
    },
    "split_keywords": [
        "api",
        " client",
        " database",
        " low-code",
        " no-code",
        " nocodb",
        " rest"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7aaee3b2b07587a6f24d4c63fac007502aa5bac3788972c9f9634be00525338e",
                "md5": "21a2dc1e55e4436918b2e5f94d02badc",
                "sha256": "70cf1866722283376359b3a5beb6fb71fc01c98f4225038b1cdc36ef976b3464"
            },
            "downloads": -1,
            "filename": "nocodb_simple_client-1.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "21a2dc1e55e4436918b2e5f94d02badc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 40126,
            "upload_time": "2025-09-01T21:07:52",
            "upload_time_iso_8601": "2025-09-01T21:07:52.609254Z",
            "url": "https://files.pythonhosted.org/packages/7a/ae/e3b2b07587a6f24d4c63fac007502aa5bac3788972c9f9634be00525338e/nocodb_simple_client-1.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c96b30af1acfc45c7d66690d17267fb0622ae7662980da327f649b68354b7266",
                "md5": "f00828d5ccb99a35f47a2b604711a07e",
                "sha256": "d59aff3364df8ec24925b6907613371f2b239e7ff471d5207bcd003bd20b7b47"
            },
            "downloads": -1,
            "filename": "nocodb_simple_client-1.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "f00828d5ccb99a35f47a2b604711a07e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 66580,
            "upload_time": "2025-09-01T21:07:55",
            "upload_time_iso_8601": "2025-09-01T21:07:55.699773Z",
            "url": "https://files.pythonhosted.org/packages/c9/6b/30af1acfc45c7d66690d17267fb0622ae7662980da327f649b68354b7266/nocodb_simple_client-1.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-01 21:07:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bauer-group",
    "github_project": "nocodb-simple-client",
    "github_not_found": true,
    "lcname": "nocodb-simple-client"
}
        
Elapsed time: 1.18467s