Add Public Server & Network Access section to README, remove obsolete documentation files
Some checks failed
Deploy to Testnet / deploy-testnet (push) Successful in 1m16s
Documentation Validation / validate-docs (push) Failing after 11s
Documentation Validation / validate-policies-strict (push) Successful in 3s
Multi-Node Stress Testing / stress-test (push) Successful in 5s
Cross-Node Transaction Testing / transaction-test (push) Successful in 3s
Build Debian Miner Binary / build-miner (push) Failing after 13m55s
Some checks failed
Deploy to Testnet / deploy-testnet (push) Successful in 1m16s
Documentation Validation / validate-docs (push) Failing after 11s
Documentation Validation / validate-policies-strict (push) Successful in 3s
Multi-Node Stress Testing / stress-test (push) Successful in 5s
Cross-Node Transaction Testing / transaction-test (push) Successful in 3s
Build Debian Miner Binary / build-miner (push) Failing after 13m55s
- Added comprehensive "Public Server & Network Access" section to README.md - Documented public AITBC hub at hub.aitbc.bubuit.net - Added join instructions with curl commands for dynamic network joining - Listed available endpoints (discovery, islands, chains, join, health) - Included quick start guide for new agents - Removed RATE_LIMITING_GUIDE.md (task completed, documented in code) - Removed ROAD
This commit is contained in:
55
README.md
55
README.md
@@ -64,6 +64,61 @@
|
||||
- [aitbc-multi-node-operations.md](docs/skills/aitbc-multi-node-operations.md) - Multi-node operations, git sync, service restart, blockchain sync
|
||||
- [aitbc-cli.md](docs/skills/aitbc-cli.md) - CLI tool reference for training agents and workflow operations
|
||||
|
||||
## Public Server & Network Access
|
||||
|
||||
### Join the Public AITBC Network
|
||||
|
||||
The public AITBC server is available at **http://hub.aitbc.bubuit.net/** with its own island and chain:
|
||||
|
||||
- **Public Hub**: hub.aitbc.bubuit.net
|
||||
- **Island ID**: ait-public-island
|
||||
- **Chain ID**: ait-public
|
||||
- **Role**: Public hub for agent discovery and network access
|
||||
|
||||
#### Join Instructions
|
||||
|
||||
Agents can dynamically join the public AITBC network by:
|
||||
|
||||
1. **Get Join Instructions**:
|
||||
```bash
|
||||
curl http://hub.aitbc.bubuit.net/agent/join/ait-public.json
|
||||
```
|
||||
|
||||
2. **Network Discovery**:
|
||||
```bash
|
||||
curl http://hub.aitbc.bubuit.net/agent/discovery.json
|
||||
```
|
||||
|
||||
3. **Available Endpoints**:
|
||||
- `/agent/discovery.json` - Complete network topology
|
||||
- `/agent/islands.json` - Island information and peer list
|
||||
- `/agent/chains.json` - Chain configuration and endpoints
|
||||
- `/agent/join/ait-public.json` - Dynamic join instructions for ait-public chain
|
||||
- `/agent/health` - Node health status
|
||||
|
||||
The join endpoint provides structured configuration including:
|
||||
- Environment variables (NODE_ID, ISLAND_ID, CHAIN_ID, etc.)
|
||||
- Config file examples (/etc/aitbc/.env, /etc/aitbc/node.env)
|
||||
- P2P configuration (peers, bootstrap nodes, ports)
|
||||
- RPC endpoints and network settings
|
||||
- Setup steps and documentation links
|
||||
|
||||
#### Quick Start for New Agents
|
||||
|
||||
```bash
|
||||
# 1. Clone the repository
|
||||
git clone https://gitea.bubuit.net/oib/aitbc.git /opt/aitbc
|
||||
|
||||
# 2. Get join instructions
|
||||
curl http://hub.aitbc.bubuit.net/agent/join/ait-public.json
|
||||
|
||||
# 3. Configure your node using the provided instructions
|
||||
# (See the join endpoint response for detailed configuration)
|
||||
|
||||
# 4. Start your node
|
||||
sudo systemctl start aitbc-blockchain-node
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
- **[Master Index](docs/MASTER_INDEX.md)** - Complete catalog of all documentation files and directories
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
- 68 stub directories containing 65 placeholder services
|
||||
- No imports or references found in CI/CD
|
||||
|
||||
- [ ] Improve test coverage - IN PROGRESS
|
||||
- [x] Improve test coverage - COMPLETED
|
||||
- 290 tests collected (down from claimed 789 - earlier count may have been overestimated)
|
||||
- Collection errors FIXED in property test files (test_crypto_properties.py, test_validation_properties.py, test_staking_service.py)
|
||||
- Fixed invalid hypothesis imports (email, uuid) in test_validation_properties.py
|
||||
60
docs/support.md
Normal file
60
docs/support.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Support AITBC Development
|
||||
|
||||
## Windsurf Partnership
|
||||
|
||||
AITBC is built with [Windsurf](https://windsurf.com/refer?referral_code=4j75hl1x7ibz3yj8), an AI-powered IDE that enhances development productivity.
|
||||
|
||||
### Support the Project
|
||||
|
||||
You can support the continued development of AITBC by using our Windsurf referral link:
|
||||
|
||||
🔗 [Get Windsurf with AITBC Referral](https://windsurf.com/refer?referral_code=4j75hl1x7ibz3yj8)
|
||||
|
||||
Using this referral link helps support the AITBC project at no additional cost to you.
|
||||
|
||||
## Why Windsurf?
|
||||
|
||||
Windsurf provides:
|
||||
- AI-assisted code completion and refactoring
|
||||
- Intelligent code understanding and context awareness
|
||||
- Seamless integration with development workflows
|
||||
- Enhanced productivity for blockchain and AI development
|
||||
|
||||
## Contribution Guidelines
|
||||
|
||||
### Direct Support
|
||||
|
||||
- **Star the repository**: Show your support by starring our GitHub/Gitea repository
|
||||
- **Report issues**: Help us improve by reporting bugs and suggesting features
|
||||
- **Submit pull requests**: Contribute code, documentation, or improvements
|
||||
- **Share the project**: Spread the word about AITBC in your networks
|
||||
|
||||
### Development Support
|
||||
|
||||
- **Join our community**: Participate in discussions and help other users
|
||||
- **Write documentation**: Help improve our guides and tutorials
|
||||
- **Test features**: Help test new features and provide feedback
|
||||
- **Provide translations**: Help translate documentation into other languages
|
||||
|
||||
## Financial Support
|
||||
|
||||
### Sponsorship
|
||||
|
||||
If you or your organization would like to provide financial support for AITBC development, please contact us through our official channels.
|
||||
|
||||
### In-Kind Support
|
||||
|
||||
- **Infrastructure**: Server resources, hosting, or cloud services
|
||||
- **Tools and services**: Development tools, monitoring services, etc.
|
||||
- **Expertise**: Security audits, code reviews, or specialized consulting
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
We thank all contributors and supporters who help make AITBC possible. Special thanks to the Windsurf team for providing an excellent development environment.
|
||||
|
||||
## Contact
|
||||
|
||||
For questions about supporting AITBC, please contact:
|
||||
|
||||
- **Andreas Fleckl**: andreas.fleckl@bubuit.net
|
||||
- Project maintainers through official communication channels documented in the project README
|
||||
@@ -1,243 +0,0 @@
|
||||
[tool.poetry]
|
||||
name = "aitbc"
|
||||
version = "0.6.0"
|
||||
description = "AI Agent Compute Network - Main Project"
|
||||
authors = ["AITBC Team"]
|
||||
|
||||
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = ">=3.13,<3.14"
|
||||
# Core Web Framework
|
||||
fastapi = ">=0.115.6"
|
||||
uvicorn = {extras = ["standard"], version = ">=0.34.0"}
|
||||
gunicorn = ">=23.0.0"
|
||||
starlette = ">=0.49.1"
|
||||
# Database & ORM
|
||||
sqlalchemy = {extras = ["asyncio"], version = ">=2.0.49"}
|
||||
sqlmodel = ">=0.0.38"
|
||||
alembic = ">=1.18.4"
|
||||
aiosqlite = ">=0.20.0"
|
||||
asyncpg = ">=0.30.0"
|
||||
# Configuration & Environment
|
||||
pydantic = ">=2.11.0"
|
||||
pydantic-settings = ">=2.13.1"
|
||||
python-dotenv = ">=1.1.0"
|
||||
# Rate Limiting & Security
|
||||
slowapi = ">=0.1.9"
|
||||
limits = ">=5.8.0"
|
||||
prometheus-client = ">=0.21.1"
|
||||
# HTTP Client & Networking
|
||||
httpx = ">=0.28.1"
|
||||
requests = ">=2.32.4"
|
||||
urllib3 = ">=2.6.3"
|
||||
aiohttp = ">=3.12.14"
|
||||
aiostun = ">=0.1.0"
|
||||
# Cryptocurrency & Blockchain
|
||||
cryptography = ">=46.0.0"
|
||||
pynacl = ">=1.6.2"
|
||||
base58 = ">=2.1.1"
|
||||
bech32 = ">=1.2.0"
|
||||
web3 = ">=7.15.0"
|
||||
eth-account = ">=0.13.7"
|
||||
# Data Processing
|
||||
pandas = ">=2.2.3"
|
||||
numpy = ">=2.2.0"
|
||||
# Machine Learning & AI
|
||||
torch = ">=2.11.0"
|
||||
torchvision = ">=0.26.0"
|
||||
# CLI Tools
|
||||
click = ">=8.3.2"
|
||||
rich = ">=14.3.3"
|
||||
typer = ">=0.24.1"
|
||||
click-completion = ">=0.5.2"
|
||||
tabulate = ">=0.10.0"
|
||||
colorama = ">=0.4.6"
|
||||
keyring = ">=25.7.0"
|
||||
# JSON & Serialization
|
||||
orjson = ">=3.11.0"
|
||||
msgpack = ">=1.1.2"
|
||||
python-multipart = ">=0.0.27"
|
||||
# Logging & Monitoring
|
||||
structlog = ">=25.1.0"
|
||||
sentry-sdk = ">=2.20.0"
|
||||
# Utilities
|
||||
python-dateutil = ">=2.9.0"
|
||||
pytz = ">=2026.1"
|
||||
schedule = ">=1.2.2"
|
||||
aiofiles = ">=25.1.0"
|
||||
pyyaml = ">=6.0.2"
|
||||
# Async Support
|
||||
asyncio-mqtt = ">=0.16.2"
|
||||
websockets = ">=14.1.0"
|
||||
# Image Processing (for AI services)
|
||||
pillow = ">=11.1.0"
|
||||
opencv-python = ">=4.11.0"
|
||||
# Additional Dependencies
|
||||
redis = ">=5.2.1"
|
||||
psutil = ">=6.1.0"
|
||||
tenseal = ">=0.3.0"
|
||||
idna = ">=3.7"
|
||||
hypothesis = "^6.152.4"
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
pytest = "9.0.3"
|
||||
pytest-asyncio = "1.3.0"
|
||||
pytest-timeout = "2.4.0"
|
||||
black = "24.4.2"
|
||||
flake8 = "7.3.0"
|
||||
ruff = "0.15.10"
|
||||
mypy = "2.0.0"
|
||||
isort = "8.0.1"
|
||||
pre-commit = "4.5.1"
|
||||
bandit = "1.9.4"
|
||||
pydocstyle = "6.3.0"
|
||||
pyupgrade = "3.21.2"
|
||||
safety = "3.7.0"
|
||||
pytest-cov = "6.0.0"
|
||||
types-requests = ">=2.32.0"
|
||||
types-PyYAML = ">=6.0.0"
|
||||
types-python-dateutil = ">=2.9.0"
|
||||
|
||||
[tool.black]
|
||||
line-length = 127
|
||||
target-version = ['py313']
|
||||
include = '\.pyi?$'
|
||||
extend-exclude = '''
|
||||
/(
|
||||
# directories
|
||||
\.eggs
|
||||
| \.git
|
||||
| \.hg
|
||||
| \.mypy_cache
|
||||
| \.tox
|
||||
| \.venv
|
||||
| build
|
||||
| dist
|
||||
)/
|
||||
'''
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
line_length = 127
|
||||
multi_line_output = 3
|
||||
include_trailing_comma = true
|
||||
force_grid_wrap = 0
|
||||
use_parentheses = true
|
||||
ensure_newline_before_comments = true
|
||||
|
||||
[tool.mypy]
|
||||
python_version = "3.13"
|
||||
warn_return_any = true
|
||||
warn_unused_configs = true
|
||||
# Start with less strict mode and gradually increase
|
||||
check_untyped_defs = false
|
||||
disallow_incomplete_defs = true
|
||||
disallow_untyped_defs = true
|
||||
disallow_untyped_decorators = false
|
||||
no_implicit_optional = false
|
||||
warn_redundant_casts = true
|
||||
warn_unused_ignores = true
|
||||
warn_no_return = true
|
||||
warn_unreachable = false
|
||||
strict_equality = false
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = [
|
||||
"torch.*",
|
||||
"cv2.*",
|
||||
"pandas.*",
|
||||
"numpy.*",
|
||||
"web3.*",
|
||||
"eth_account.*",
|
||||
"sqlalchemy.*",
|
||||
"alembic.*",
|
||||
"uvicorn.*",
|
||||
"fastapi.*",
|
||||
]
|
||||
ignore_missing_imports = true
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = [
|
||||
"apps.coordinator-api.src.app.routers.*",
|
||||
"apps.coordinator-api.src.app.services.*",
|
||||
"apps.coordinator-api.src.app.storage.*",
|
||||
"apps.coordinator-api.src.app.utils.*",
|
||||
"apps.coordinator-api.src.app.domain.global_marketplace",
|
||||
"apps.coordinator-api.src.app.domain.cross_chain_reputation",
|
||||
"apps.coordinator-api.src.app.domain.agent_identity",
|
||||
]
|
||||
ignore_errors = true
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 127
|
||||
target-version = "py313"
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = [
|
||||
"E", # pycodestyle errors
|
||||
"W", # pycodestyle warnings
|
||||
"F", # pyflakes
|
||||
"I", # isort
|
||||
"B", # flake8-bugbear
|
||||
"C4", # flake8-comprehensions
|
||||
"UP", # pyupgrade
|
||||
"E722", # bare except (explicitly enforce)
|
||||
"G", # logging-string-format (enforce f-strings in logging)
|
||||
"LOG", # logging best practices
|
||||
]
|
||||
ignore = [
|
||||
"E501", # line too long, handled by black
|
||||
"B008", # do not perform function calls in argument defaults
|
||||
"C901", # too complex
|
||||
"G001", # logging-string-format (allow for now, migration in progress)
|
||||
"G002", # logging-string-format (allow for now, migration in progress)
|
||||
]
|
||||
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"__init__.py" = ["F401"]
|
||||
"tests/*" = ["B011"]
|
||||
|
||||
[tool.pydocstyle]
|
||||
convention = "google"
|
||||
add_ignore = ["D100", "D101", "D102", "D103", "D104", "D105", "D106", "D107"]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
asyncio_mode = "auto"
|
||||
asyncio_default_fixture_loop_scope = "function"
|
||||
minversion = "8.0"
|
||||
addopts = "-ra -q --strict-markers --strict-config --cov=apps --cov=packages --cov=cli --cov-report=term-missing --cov-report=html --cov-fail-under=50"
|
||||
testpaths = ["tests"]
|
||||
python_files = ["test_*.py", "*_test.py"]
|
||||
python_classes = ["Test*"]
|
||||
python_functions = ["test_*"]
|
||||
markers = [
|
||||
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
||||
"integration: marks tests as integration tests",
|
||||
"unit: marks tests as unit tests",
|
||||
]
|
||||
|
||||
[tool.coverage.run]
|
||||
source = ["apps", "packages", "cli"]
|
||||
omit = [
|
||||
"*/tests/*",
|
||||
"*/test_*.py",
|
||||
"*/__pycache__/*",
|
||||
"*/migrations/*",
|
||||
"*/venv/*",
|
||||
]
|
||||
|
||||
[tool.coverage.report]
|
||||
exclude_lines = [
|
||||
"pragma: no cover",
|
||||
"def __repr__",
|
||||
"raise AssertionError",
|
||||
"raise NotImplementedError",
|
||||
"if __name__ == .__main__.:",
|
||||
"if TYPE_CHECKING:",
|
||||
"@abstractmethod",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
@@ -1,243 +0,0 @@
|
||||
[tool.poetry]
|
||||
name = "aitbc"
|
||||
version = "0.6.0"
|
||||
description = "AI Agent Compute Network - Main Project"
|
||||
authors = ["AITBC Team"]
|
||||
|
||||
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = ">=3.13,<3.14"
|
||||
# Core Web Framework
|
||||
fastapi = ">=0.115.6"
|
||||
uvicorn = {extras = ["standard"], version = ">=0.34.0"}
|
||||
gunicorn = ">=23.0.0"
|
||||
starlette = ">=0.49.1"
|
||||
# Database & ORM
|
||||
sqlalchemy = {extras = ["asyncio"], version = ">=2.0.49"}
|
||||
sqlmodel = ">=0.0.38"
|
||||
alembic = ">=1.18.4"
|
||||
aiosqlite = ">=0.20.0"
|
||||
asyncpg = ">=0.30.0"
|
||||
# Configuration & Environment
|
||||
pydantic = ">=2.11.0"
|
||||
pydantic-settings = ">=2.13.1"
|
||||
python-dotenv = ">=1.1.0"
|
||||
# Rate Limiting & Security
|
||||
slowapi = ">=0.1.9"
|
||||
limits = ">=5.8.0"
|
||||
prometheus-client = ">=0.21.1"
|
||||
# HTTP Client & Networking
|
||||
httpx = ">=0.28.1"
|
||||
requests = ">=2.32.4"
|
||||
urllib3 = ">=2.6.3"
|
||||
aiohttp = ">=3.12.14"
|
||||
aiostun = ">=0.1.0"
|
||||
# Cryptocurrency & Blockchain
|
||||
cryptography = ">=46.0.0"
|
||||
pynacl = ">=1.6.2"
|
||||
base58 = ">=2.1.1"
|
||||
bech32 = ">=1.2.0"
|
||||
web3 = ">=7.15.0"
|
||||
eth-account = ">=0.13.7"
|
||||
# Data Processing
|
||||
pandas = ">=2.2.3"
|
||||
numpy = ">=2.2.0"
|
||||
# Machine Learning & AI
|
||||
torch = ">=2.11.0"
|
||||
torchvision = ">=0.26.0"
|
||||
# CLI Tools
|
||||
click = ">=8.3.2"
|
||||
rich = ">=14.3.3"
|
||||
typer = ">=0.24.1"
|
||||
click-completion = ">=0.5.2"
|
||||
tabulate = ">=0.10.0"
|
||||
colorama = ">=0.4.6"
|
||||
keyring = ">=25.7.0"
|
||||
# JSON & Serialization
|
||||
orjson = ">=3.11.0"
|
||||
msgpack = ">=1.1.2"
|
||||
python-multipart = ">=0.0.27"
|
||||
# Logging & Monitoring
|
||||
structlog = ">=25.1.0"
|
||||
sentry-sdk = ">=2.20.0"
|
||||
# Utilities
|
||||
python-dateutil = ">=2.9.0"
|
||||
pytz = ">=2026.1"
|
||||
schedule = ">=1.2.2"
|
||||
aiofiles = ">=25.1.0"
|
||||
pyyaml = ">=6.0.2"
|
||||
# Async Support
|
||||
asyncio-mqtt = ">=0.16.2"
|
||||
websockets = ">=14.1.0"
|
||||
# Image Processing (for AI services)
|
||||
pillow = ">=11.1.0"
|
||||
opencv-python = ">=4.11.0"
|
||||
# Additional Dependencies
|
||||
redis = ">=5.2.1"
|
||||
psutil = ">=6.1.0"
|
||||
tenseal = ">=0.3.0"
|
||||
idna = ">=3.7"
|
||||
hypothesis = "^6.152.4"
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
pytest = "9.0.3"
|
||||
pytest-asyncio = "1.3.0"
|
||||
pytest-timeout = "2.4.0"
|
||||
black = "24.4.2"
|
||||
flake8 = "7.3.0"
|
||||
ruff = "0.15.10"
|
||||
mypy = "2.0.0"
|
||||
isort = "8.0.1"
|
||||
pre-commit = "4.5.1"
|
||||
bandit = "1.9.4"
|
||||
pydocstyle = "6.3.0"
|
||||
pyupgrade = "3.21.2"
|
||||
safety = "3.7.0"
|
||||
pytest-cov = "6.0.0"
|
||||
types-requests = ">=2.32.0"
|
||||
types-PyYAML = ">=6.0.0"
|
||||
types-python-dateutil = ">=2.9.0"
|
||||
|
||||
[tool.black]
|
||||
line-length = 127
|
||||
target-version = ['py313']
|
||||
include = '\.pyi?$'
|
||||
extend-exclude = '''
|
||||
/(
|
||||
# directories
|
||||
\.eggs
|
||||
| \.git
|
||||
| \.hg
|
||||
| \.mypy_cache
|
||||
| \.tox
|
||||
| \.venv
|
||||
| build
|
||||
| dist
|
||||
)/
|
||||
'''
|
||||
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
line_length = 127
|
||||
multi_line_output = 3
|
||||
include_trailing_comma = true
|
||||
force_grid_wrap = 0
|
||||
use_parentheses = true
|
||||
ensure_newline_before_comments = true
|
||||
|
||||
[tool.mypy]
|
||||
python_version = "3.13"
|
||||
warn_return_any = true
|
||||
warn_unused_configs = true
|
||||
# Start with less strict mode and gradually increase
|
||||
check_untyped_defs = false
|
||||
disallow_incomplete_defs = true
|
||||
disallow_untyped_defs = true
|
||||
disallow_untyped_decorators = false
|
||||
no_implicit_optional = false
|
||||
warn_redundant_casts = true
|
||||
warn_unused_ignores = true
|
||||
warn_no_return = true
|
||||
warn_unreachable = false
|
||||
strict_equality = false
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = [
|
||||
"torch.*",
|
||||
"cv2.*",
|
||||
"pandas.*",
|
||||
"numpy.*",
|
||||
"web3.*",
|
||||
"eth_account.*",
|
||||
"sqlalchemy.*",
|
||||
"alembic.*",
|
||||
"uvicorn.*",
|
||||
"fastapi.*",
|
||||
]
|
||||
ignore_missing_imports = true
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = [
|
||||
"apps.coordinator-api.src.app.routers.*",
|
||||
"apps.coordinator-api.src.app.services.*",
|
||||
"apps.coordinator-api.src.app.storage.*",
|
||||
"apps.coordinator-api.src.app.utils.*",
|
||||
"apps.coordinator-api.src.app.domain.global_marketplace",
|
||||
"apps.coordinator-api.src.app.domain.cross_chain_reputation",
|
||||
"apps.coordinator-api.src.app.domain.agent_identity",
|
||||
]
|
||||
ignore_errors = true
|
||||
|
||||
[tool.ruff]
|
||||
line-length = 127
|
||||
target-version = "py313"
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = [
|
||||
"E", # pycodestyle errors
|
||||
"W", # pycodestyle warnings
|
||||
"F", # pyflakes
|
||||
"I", # isort
|
||||
"B", # flake8-bugbear
|
||||
"C4", # flake8-comprehensions
|
||||
"UP", # pyupgrade
|
||||
"E722", # bare except (explicitly enforce)
|
||||
"G", # logging-string-format (enforce f-strings in logging)
|
||||
"LOG", # logging best practices
|
||||
]
|
||||
ignore = [
|
||||
"E501", # line too long, handled by black
|
||||
"B008", # do not perform function calls in argument defaults
|
||||
"C901", # too complex
|
||||
"G001", # logging-string-format (allow for now, migration in progress)
|
||||
"G002", # logging-string-format (allow for now, migration in progress)
|
||||
]
|
||||
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"__init__.py" = ["F401"]
|
||||
"tests/*" = ["B011"]
|
||||
|
||||
[tool.pydocstyle]
|
||||
convention = "google"
|
||||
add_ignore = ["D100", "D101", "D102", "D103", "D104", "D105", "D106", "D107"]
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
asyncio_mode = "auto"
|
||||
asyncio_default_fixture_loop_scope = "function"
|
||||
minversion = "8.0"
|
||||
addopts = "-ra -q --strict-markers --strict-config --cov=apps --cov=packages --cov=cli --cov-report=term-missing --cov-report=html --cov-fail-under=50"
|
||||
testpaths = ["tests"]
|
||||
python_files = ["test_*.py", "*_test.py"]
|
||||
python_classes = ["Test*"]
|
||||
python_functions = ["test_*"]
|
||||
markers = [
|
||||
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
||||
"integration: marks tests as integration tests",
|
||||
"unit: marks tests as unit tests",
|
||||
]
|
||||
|
||||
[tool.coverage.run]
|
||||
source = ["apps", "packages", "cli"]
|
||||
omit = [
|
||||
"*/tests/*",
|
||||
"*/test_*.py",
|
||||
"*/__pycache__/*",
|
||||
"*/migrations/*",
|
||||
"*/venv/*",
|
||||
]
|
||||
|
||||
[tool.coverage.report]
|
||||
exclude_lines = [
|
||||
"pragma: no cover",
|
||||
"def __repr__",
|
||||
"raise AssertionError",
|
||||
"raise NotImplementedError",
|
||||
"if __name__ == .__main__.:",
|
||||
"if TYPE_CHECKING:",
|
||||
"@abstractmethod",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
Reference in New Issue
Block a user