Observed since 20 Oct, 17:15 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ABConnect
A set of tools for connecting and processing data for Annex Brands, featuring API pack and ship quoting.
ABConnect is a Python package that provides a collection of tools for connecting and processing data for Annex Brands. It includes modules for quoting, building, and loading data from various file formats (CSV, JSON, XLSX), with a focus on handling unsupported characters and encoding issues seamlessly.
You can install ABConnect using pip:
pip install ABConnect
For more detailed installation instructions and documentation, visit https://abconnecttools.readthedocs.io/
ABConnect requires the following environment variables for authentication:
# Create a .env file with your credentials
ABCONNECT_USERNAME=your_username
ABCONNECT_PASSWORD=your_password
ABC_CLIENT_ID=your_client_id
ABC_CLIENT_SECRET=your_client_secret
# Optional: Set environment (defaults to production)
ABC_ENVIRONMENT=staging # or 'production'
ABConnect supports both staging and production environments:
from ABConnect.api import ABConnectAPI
# Use staging environment
api = ABConnectAPI(env='staging')
# Use production environment (default)
api = ABConnectAPI()
# Environment can also be set via ABC_ENVIRONMENT variable
For testing, create a .env.staging file with staging credentials:
cp ABConnect/dotenv.sample .env.staging
# Edit .env.staging with your staging credentials
Tests will automatically use .env.staging when running with pytest.
Full documentation is available at https://abconnecttools.readthedocs.io/
To contribute to ABConnect, clone the repository and install in development mode:
git clone https://github.com/AnnexBrands/ABConnectTools.git
cd ABConnectTools
pip install -e .[dev]
Run all tests with:
pytest
ABConnect maintains strict alignment with the API's swagger specification. Several tests verify that all models and endpoints are properly implemented:
1. Test All Endpoints Have Implementations
# Comprehensive test with visual tree output showing which endpoints are implemented
pytest tests/api/swagger/test_all_swagger_endpoints_have_implementations.py -v
# Displays:
# ✅ Working endpoints with path count
# ❌ Missing endpoint files
# ⚠️ Import failures for endpoints that exist but can't be imported
2. Test Constitution Compliance
# Tests endpoint-model pairing and swagger-first principles
pytest tests/test_constitution.py -v
# Verifies:
# - All swagger endpoints have implementations
# - Endpoints have corresponding Pydantic models
# - No duplicate or violating files exist
3. Verify Model Imports
# Test that all models can be imported without errors
python -c "from ABConnect.api.models import shared, companies, contacts, job, address, jobtimeline; print('All model imports successful')"
# Test specific model validation and inspect fields
python -c "from ABConnect.api.models.jobparcelitems import ParcelItem; print(list(ParcelItem.model_fields.keys()))"
4. Run Specific Test Categories
# Test only API endpoints
pytest tests/api/ -v
# Test only models
pytest tests/api/models/ -v
# Test swagger compliance with detailed output
pytest tests/api/swagger/ -v -s
Test Coverage Summary
This project is licensed under the MIT License - see the LICENSE file for details.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
appdirsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | appdirs | runtime |
chardetEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | chardet | runtime |
dotenvEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | dotenv | runtime |
beautifulsoup4Environment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | beautifulsoup4 | runtime |
openpyxlEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | openpyxl | runtime |
pandasEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pandas | runtime |
PillowEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | Pillow | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.0 | runtime |
python-dotenvEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | python-dotenv | runtime |
requestsEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | requests | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pytest; extra == "dev" | runtime |
buildEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | build; extra == "dev" | runtime |
twineEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | twine; extra == "dev" | runtime |
sphinxEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sphinx>=5.0; extra == "docs" | runtime |
sphinx-rtd-themeEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sphinx-rtd-theme>=1.0; extra == "docs" | runtime |
sphinx-autodoc-typehintsEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sphinx-autodoc-typehints>=1.19; extra == "docs" | runtime |
myst-parserEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | myst-parser>=0.18; extra == "docs" | runtime |
sphinx-copybuttonEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sphinx-copybutton; extra == "docs" | runtime |
sphinx-togglebuttonEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sphinx-togglebutton; extra == "docs" | runtime |
sphinx-tabsEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sphinx-tabs; extra == "docs" | runtime |
bdist_wheel · 285.31 KB · Python py3
sdist · 218.69 KB · Python source
Shared repository data · GitHub
Observed since 20 Oct, 17:15 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:b6d44477323139ee72630aada9bf16e69eff9a5fefbe2b2e6866f5400cfbb162