<!-- 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
[](https://badge.fury.io/py/nocodb-simple-client)
[](https://pypi.org/project/nocodb-simple-client/)
[](https://opensource.org/licenses/MIT)
[](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[](https://badge.fury.io/py/nocodb-simple-client)\n[](https://pypi.org/project/nocodb-simple-client/)\n\n[](https://opensource.org/licenses/MIT)\n\n[](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"
}