celerp 1.2.0__tar.gz → 1.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {celerp-1.2.0 → celerp-1.2.4}/CONTRIBUTING.md +2 -2
- celerp-1.2.4/LICENSE +107 -0
- {celerp-1.2.0 → celerp-1.2.4}/LICENSING.md +6 -6
- {celerp-1.2.0 → celerp-1.2.4}/MANIFEST.in +3 -1
- celerp-1.2.4/NOTICE +27 -0
- {celerp-1.2.0 → celerp-1.2.4}/PKG-INFO +67 -26
- {celerp-1.2.0 → celerp-1.2.4}/README.md +2 -1
- celerp-1.2.4/celerp/ai/intent.py +56 -0
- celerp-1.2.4/celerp/ai/llm.py +110 -0
- celerp-1.2.4/celerp/ai/quota.py +63 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/service.py +34 -27
- {celerp-1.2.0 → celerp-1.2.4}/celerp/cli.py +10 -1
- {celerp-1.2.0 → celerp-1.2.4}/celerp/config.py +6 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/events/schemas.py +57 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/events/types.py +3 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/gateway/client.py +40 -11
- {celerp-1.2.0 → celerp-1.2.4}/celerp/gateway/state.py +31 -5
- {celerp-1.2.0 → celerp-1.2.4}/celerp/main.py +2 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/middleware.py +7 -0
- celerp-1.2.4/celerp/migrations/versions/b1c2d3e4f5a6_add_supporter_badges.py +34 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/__init__.py +1 -0
- celerp-1.2.4/celerp/models/supporter.py +35 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/api.py +1 -5
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/loader.py +18 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/companies.py +4 -2
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/health.py +16 -3
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/ledger.py +11 -5
- celerp-1.2.4/celerp/routers/stars.py +97 -0
- celerp-1.2.4/celerp/services/activity_redaction.py +86 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/fulfill.py +7 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/list_behavior.py +1 -1
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/runtime_state.py +19 -0
- celerp-1.2.4/celerp/services/star_cta.py +85 -0
- celerp-1.2.4/celerp/services/supporter_badge.py +88 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp.egg-info/PKG-INFO +67 -26
- {celerp-1.2.0 → celerp-1.2.4}/celerp.egg-info/SOURCES.txt +14 -3
- celerp-1.2.4/celerp.egg-info/scm_file_list.json +923 -0
- celerp-1.2.4/celerp.egg-info/scm_version.json +8 -0
- {celerp-1.2.0 → celerp-1.2.4}/conftest.py +42 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/celerp_ai/routes.py +3 -12
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/celerp_ai/ui_routes.py +3 -2
- celerp-1.2.4/default_modules/celerp-ai/tests/conftest.py +14 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_coverage_gaps.py +14 -71
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_intent.py +7 -22
- celerp-1.2.4/default_modules/celerp-ai/tests/test_llm.py +158 -0
- celerp-1.2.4/default_modules/celerp-ai/tests/test_quota.py +110 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_router.py +7 -8
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_service.py +25 -47
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/celerp_contacts/routes.py +6 -6
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-dashboard/celerp_dashboard/routes.py +12 -5
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/doc_projections.py +23 -14
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/routes.py +65 -37
- celerp-1.2.4/default_modules/celerp-docs/tests/test_fulfill_no_split.py +60 -0
- celerp-1.2.4/default_modules/celerp-docs/tests/test_fulfillment_activity.py +113 -0
- celerp-1.2.4/default_modules/celerp-docs/tests/test_payment_void_activity.py +55 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/projections.py +15 -1
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/routes.py +202 -10
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/routes_attachments.py +16 -18
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/property_rental.json +2 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/saas.json +2 -0
- celerp-1.2.0/LICENSE-PROPRIETARY.md → celerp-1.2.4/legal/OFFICIAL-COMPONENTS.md +2 -2
- {celerp-1.2.0 → celerp-1.2.4}/ui/api_client.py +23 -4
- {celerp-1.2.0 → celerp-1.2.4}/ui/app.py +2 -2
- celerp-1.2.4/ui/components/activity.py +1060 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/cloud_gate.py +2 -10
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/shell.py +173 -11
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/ar.json +70 -8
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/de.json +70 -8
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/en.json +27 -19
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/es.json +70 -8
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/fr.json +69 -9
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/id.json +70 -8
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/it.json +70 -8
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/ja.json +70 -8
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/pt.json +69 -9
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/th.json +70 -10
- {celerp-1.2.0 → celerp-1.2.4}/ui/locales/vi.json +69 -9
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/auth.py +7 -4
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/dashboard.py +46 -15
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/documents.py +265 -28
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/inventory.py +64 -9
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings.py +44 -13
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_cloud.py +2 -1
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/setup.py +8 -6
- celerp-1.2.4/ui/routes/stars.py +109 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/app.css +36 -3
- celerp-1.2.4/ui/static/logo.png +0 -0
- celerp-1.2.0/LICENSE +0 -66
- celerp-1.2.0/NOTICE +0 -41
- celerp-1.2.0/celerp/ai/intent.py +0 -92
- celerp-1.2.0/celerp/ai/llm.py +0 -126
- celerp-1.2.0/celerp/ai/quota.py +0 -127
- celerp-1.2.0/default_modules/celerp-ai/tests/conftest.py +0 -33
- celerp-1.2.0/default_modules/celerp-ai/tests/test_llm.py +0 -209
- celerp-1.2.0/default_modules/celerp-ai/tests/test_quota.py +0 -210
- celerp-1.2.0/ui/LICENSE +0 -23
- celerp-1.2.0/ui/components/activity.py +0 -616
- celerp-1.2.0/ui/static/logo.png +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/CLA.md +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/alembic.ini +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/batch.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/cleanup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/commands.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/conversations.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/files.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/memory.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/models.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/page_count.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/ai/tools.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/alembic.ini +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/alembic_config.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/compute/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/compute/aggregations.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/compute/valuation.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/base.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/daily_scheduler.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/http.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/images.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/outbound_queue.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/quickbooks.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/registry.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/shopify.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/sync_runner.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/upsert.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/webhooks.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/woocommerce.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/connectors/xero.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/constants.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/db.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/events/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/events/engine.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/gateway/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/importers/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/importers/importer.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/importers/schema.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/README.md +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/_auto_stamp.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/env.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/script.py.mako +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/a0b1c2d3e4f5_seed_landed_cost_clearing_accounts.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/a1b2c3d4e5f6_add_doc_share_tokens.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/b2c3d4e5f6a7_add_import_batches.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/c1d2e3f4a5b6_add_marketplace.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/d2e3f4a5b6c7_add_password_reset_token.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/e3f4a5b6c7d8_add_company_is_active.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/f1a2b3c4d5e6_move_accounts_marketplace_to_modules.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/fd5de461e14e_initial_schema.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/g1h2i3j4k5l6_add_consignment_flag.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/h2i3j4k5l6m7_add_bank_accounts_and_reconciliation.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/j4k5l6m7n8o9_labels_db_persistence.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/k5l6m7n8o9p0_add_reconciliation_v2.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/l6m7n8o9p0q1_add_sync_runs_table.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/m7n8o9p0q1r2_add_connector_configs_and_outbound_queue.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/n8o9p0q1r2s3_backfill_payment_date.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/o9p0q1r2s3t4_backfill_item_price_fields.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/p1q2r3s4t5u6_add_session_registry_and_user_auth_state.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/q2r3s4t5u6v7_add_system_runtime_state.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/r3s4t5u6v7w8_add_projections_company_entity_type_index.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/s4t5u6v7w8x9_drop_user_company_id_role.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/t5u6v7w8x9y0_seed_inventory_sub_accounts.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/u6v7w8x9y0z1_backfill_item_prices_from_attributes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/v7w8x9y0z1a2_backfill_purchase_unit_defaults.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/w8x9y0z1a2b3_backfill_category_unit_defaults.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/x7y8z9a0b1c2_add_projection_created_at.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/y8z9a0b1c2d3_per_company_ledger_idempotency.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/migrations/versions/z9a0b1c2d3e4_work_centers.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/accounting.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/ai.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/auth.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/base.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/company.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/connector_config.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/import_batch.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/ledger.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/marketplace.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/notification.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/projections.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/share.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/models/sync_run.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/audit.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/license.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/references.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/registry.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/modules/slots.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/notifications/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/notifications/service.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/notifications/sse.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/output/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/output/pdf.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/output/share_render.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/projections/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/projections/engine.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/projections/handlers/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/projections/handlers/marketplace.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/projections/handlers/scanning.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/projections/handlers/system.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/auth.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/debug.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/doctor.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/events.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/notifications.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/routers/system.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/schemas/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/attachments.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/auth.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/auto_je.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/backup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/backup_export.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/backup_files.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/backup_import.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/backup_scheduler.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/demo.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/email.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/field_schema.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/je_keys.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/landed_cost.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/line_measures.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/money.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/pick.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/session_tracker.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/system_health.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/services/units.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/session_gate.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp/tax_regimes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp.egg-info/dependency_links.txt +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp.egg-info/entry_points.txt +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp.egg-info/requires.txt +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/celerp.egg-info/top_level.txt +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/api_setup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/csv_parser.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/matcher.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/models.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/projections.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/celerp_accounting/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/tests/test_accounting_banking.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/tests/test_accounting_banking_routers.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/tests/test_accounting_gaps.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/tests/test_accounting_import_idempotency.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-accounting/tests/test_reconciliation_v2.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-admin/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-admin/celerp_admin/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-admin/celerp_admin/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-admin/celerp_admin/setup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/celerp_ai/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/celerp_ai/setup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_batch.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_cleanup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_conversations.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_memory.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_models.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_page_count.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_routes_coverage.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-ai/tests/test_tools.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-backup/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-backup/celerp_backup/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-backup/celerp_backup/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-backup/celerp_backup/setup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/celerp_connectors/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/celerp_connectors/models.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/celerp_connectors/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/conftest.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_compliance.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_connectors.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_outbound.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_quickbooks.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_rate_limiting.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_shopify.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_woocommerce.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-connectors/tests/test_xero.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/celerp_contacts/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/celerp_contacts/migrations.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/celerp_contacts/projections.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/celerp_contacts/services.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-contacts/celerp_contacts/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-dashboard/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-dashboard/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-dashboard/celerp_dashboard/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-dashboard/celerp_dashboard/setup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/api_setup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/doc_constants.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/doc_service.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/models_share.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/routes_share.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/sequences.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/taxes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/celerp_docs/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/conftest.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_audits.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_freight_je.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_freight_lines.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_inbound_je_lifecycle.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_inventory_account_reconciliation.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_landed_receive.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_send_visibility.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-docs/tests/test_service_lines.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/models_import_batch.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/routes_scanning.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/services.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/celerp_inventory/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/tests/test_item_recipe_projection.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/tests/test_item_workflow_projection.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-inventory/tests/test_landed_cost_projection.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/migrations/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/migrations/labels_001_create_label_templates.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/models.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/presets.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/service.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/celerp_labels/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/requirements.txt +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/tests/test_labels.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-labels/tests/test_labels_module.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/costing.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/expansion.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/labor.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/migrations.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/projection_handler.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/celerp_manufacturing/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/requirements.txt +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_bom_removed.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_build_api.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_item_recipe_api.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_item_workflow_api.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_labor_providers.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_manufacture_from_doc.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_manufacturing.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_manufacturing_import_idempotency.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_manufacturing_module.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_mfg_events.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_phase2_manufacturing_validations.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_production_order.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_recipe_costing.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_recipe_expansion.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_recost_api.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_to_make_allocation.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_where_used.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_work_centers_and_settings.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-manufacturing/tests/test_workflow_time.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/celerp_reports/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/celerp_reports/api_setup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/celerp_reports/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/celerp_reports/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/tests/test_reports_full.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-reports/tests/test_reports_unit.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-subscriptions/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-subscriptions/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-subscriptions/celerp_subscriptions/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-subscriptions/celerp_subscriptions/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-subscriptions/celerp_subscriptions/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-subscriptions/tests/test_subscriptions.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-subscriptions/tests/test_subscriptions_ui.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/LICENSE +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/accessory_fashion.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/activewear.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/art_photography.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/audio_equipment.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/bag_handbag.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/banknote.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/beauty_tool.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/bed_bedroom.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/beer.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/beverage_nonalc.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/body_part_auto.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/book.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/bottoms.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/brake_suspension.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/bullion_coin.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/camera.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/colored_stone.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/comic.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/commercial_space.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/component_part.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/confectionery.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/consulting_service.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/decorative_art.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/diamond.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/drawing.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/dress_jumpsuit.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/electrical_auto.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/electrical_component.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/emerald.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/engine_part.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/fastener.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/fertilizer_chemical.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/film_video.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/fine_writing_instrument.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/fluid_lubricant.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/footwear.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/fragrance.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/fresh_food.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/fresh_produce.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/frozen_food.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/gaming_console.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/gold_bullion.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/grain_cereal.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/haircare.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/hand_tool.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/ingredient_bulk.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/interior_part.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/jewelry.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/kitchen_dining.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/laptop.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/lighting.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/livestock_feed.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/makeup.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/measuring_instrument.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/medal_token.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/mineral_specimen.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/mobile_phone.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/music_cd.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/music_vinyl.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/nail.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/numismatic_coin.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/outdoor_furniture.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/outerwear.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/packaged_food.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/painting.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/parking_bay.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/pearl.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/personal_care.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/pipe_plumbing.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/platinum_bullion.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/power_tool.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/print_edition.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/residential_unit.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/rough_gemstone.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/ruby.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/saas_plan.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/safety_ppe.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/sapphire.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/sculpture.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/seating.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/seeds.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/silver_bullion.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/skincare.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/soft_furnishing.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/software_addon.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/software_license.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/spirit.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/storage_furniture.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/swimwear.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/table_desk.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/tablet.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/tire_wheel.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/tops.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/trading_card.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/tv_display.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/video_game.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/watch.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/watch_strap.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/categories/wine.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/agricultural.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/artwork.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/automotive.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/blank.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/books_media.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/coins_precious_metals.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/consulting.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/cosmetics.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/electronics.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/fashion.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/food_beverage.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/furniture.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/gemstones.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/hardware.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/watches.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/presets/wine_spirits.json +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/celerp_verticals/ui_routes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/tests/test_verticals.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/default_modules/celerp-verticals/tests/test_verticals_routers.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4/legal}/TRADEMARK.md +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/memory/fix-receive-goods-bugs.md +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/pyproject.toml +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/setup.cfg +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/test_helpers.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/backup.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/currency.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/files.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/notes.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/phone.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/components/table.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/config.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/i18n.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/__init__.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/accounting.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/accounting_import.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/contacts.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/csv_import.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/docs_import.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/events.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/lists_import.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/manufacturing.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/notifications.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/reconciliation.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/reports.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/search.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_accounting.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_connectors.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_contacts.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_general.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_import.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_inventory.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_manufacturing.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_purchasing.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/settings_sales.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/subscriptions.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/routes/subscriptions_import.py +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/htmx.min.js +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/icon.png +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/vendor/intl-tel-input/img/flags.webp +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/vendor/intl-tel-input/img/flags@2x.webp +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/vendor/intl-tel-input/intlTelInput.min.css +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/vendor/intl-tel-input/intlTelInput.min.js +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/vendor/intl-tel-input/intlTelInputWithUtils.min.js +0 -0
- {celerp-1.2.0 → celerp-1.2.4}/ui/static/vendor/intl-tel-input/utils.js +0 -0
|
@@ -14,7 +14,7 @@ follows:
|
|
|
14
14
|
commercial terms). Open an issue before substantial work and we will arrange signing.
|
|
15
15
|
- **Third-party modules you do not submit upstream** (e.g. your own marketplace modules) need no CLA - a
|
|
16
16
|
Developer Certificate of Origin sign-off (`git commit -s`) is sufficient for those. The MIT modules are
|
|
17
|
-
the recommended starting point: fork one, rename it (see `TRADEMARK.md`), and license your derivative
|
|
17
|
+
the recommended starting point: fork one, rename it (see `legal/TRADEMARK.md`), and license your derivative
|
|
18
18
|
however you wish.
|
|
19
19
|
|
|
20
20
|
**How CLA acceptance works.** Contributions to official Celerp repositories require CLA acceptance before
|
|
@@ -23,7 +23,7 @@ pull request, post the exact acceptance phrase from your authenticated GitHub ac
|
|
|
23
23
|
acceptance is recorded against the current `CLA.md` version. The bot blocks merge until acceptance is
|
|
24
24
|
recorded.
|
|
25
25
|
|
|
26
|
-
Trademarks are not licensed by any code license; see `TRADEMARK.md`.
|
|
26
|
+
Trademarks are not licensed by any code license; see `legal/TRADEMARK.md`.
|
|
27
27
|
|
|
28
28
|
## Environment variables
|
|
29
29
|
|
celerp-1.2.4/LICENSE
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
Business Source License 1.1
|
|
2
|
+
|
|
3
|
+
License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
|
|
4
|
+
"Business Source License" is a trademark of MariaDB Corporation Ab.
|
|
5
|
+
|
|
6
|
+
-----------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
Parameters
|
|
9
|
+
|
|
10
|
+
Licensor: Noah Severs
|
|
11
|
+
Licensed Work: Celerp
|
|
12
|
+
The Licensed Work is (c) 2026 Noah Severs
|
|
13
|
+
Additional Use Grant: You may use the Licensed Work in production to operate
|
|
14
|
+
Celerp for your own internal business purposes, including
|
|
15
|
+
self-hosted use by your company and its affiliates. This
|
|
16
|
+
Additional Use Grant does not include offering the Licensed
|
|
17
|
+
Work, modified versions of the Licensed Work, or a
|
|
18
|
+
substantially similar competing product as a hosted service,
|
|
19
|
+
SaaS service, managed service, OEM product, or white-label
|
|
20
|
+
product to third parties without a commercial agreement with
|
|
21
|
+
Licensor.
|
|
22
|
+
|
|
23
|
+
Change Date: 2029-01-01
|
|
24
|
+
|
|
25
|
+
Change License: Apache License, Version 2.0
|
|
26
|
+
|
|
27
|
+
For information about alternative licensing arrangements for the Licensed Work
|
|
28
|
+
(including commercial licensing, OEM agreements, and white-label inquiries),
|
|
29
|
+
please contact https://celerp.com.
|
|
30
|
+
|
|
31
|
+
-----------------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
Notice
|
|
34
|
+
|
|
35
|
+
The Business Source License (this document, or the "License") is not an Open
|
|
36
|
+
Source license. However, the Licensed Work will eventually be made available
|
|
37
|
+
under an Open Source License, as stated in this License.
|
|
38
|
+
|
|
39
|
+
-----------------------------------------------------------------------------
|
|
40
|
+
|
|
41
|
+
Terms
|
|
42
|
+
|
|
43
|
+
The Licensor hereby grants you the right to copy, modify, create derivative
|
|
44
|
+
works, redistribute, and make non-production use of the Licensed Work. The
|
|
45
|
+
Licensor may make an Additional Use Grant, above, permitting limited production
|
|
46
|
+
use.
|
|
47
|
+
|
|
48
|
+
Effective on the Change Date, or the fourth anniversary of the first publicly
|
|
49
|
+
available distribution of a specific version of the Licensed Work under this
|
|
50
|
+
License, whichever comes first, the Licensor hereby grants you rights under
|
|
51
|
+
the terms of the Change License, and the rights granted in the paragraph
|
|
52
|
+
above terminate.
|
|
53
|
+
|
|
54
|
+
If your use of the Licensed Work does not comply with the requirements
|
|
55
|
+
currently in effect as described in this License, you must purchase a
|
|
56
|
+
commercial license from the Licensor, its affiliated entities, or authorized
|
|
57
|
+
resellers, or you must refrain from using the Licensed Work.
|
|
58
|
+
|
|
59
|
+
All copies of the original and modified Licensed Work, and derivative works of
|
|
60
|
+
the Licensed Work, are subject to this License. This License applies
|
|
61
|
+
separately for each version of the Licensed Work and the Change Date may vary
|
|
62
|
+
for each version of the Licensed Work released by Licensor.
|
|
63
|
+
|
|
64
|
+
You must conspicuously display this License on each original or modified copy
|
|
65
|
+
of the Licensed Work. If you receive the Licensed Work in original or modified
|
|
66
|
+
form from a third party, the terms and conditions set forth in this License
|
|
67
|
+
apply to your use of that work.
|
|
68
|
+
|
|
69
|
+
Any use of the Licensed Work in violation of this License will automatically
|
|
70
|
+
terminate your rights under this License for the current and all other
|
|
71
|
+
versions of the Licensed Work.
|
|
72
|
+
|
|
73
|
+
This License does not grant you any right in any trademark or logo of Licensor
|
|
74
|
+
or its affiliates (provided that you may use a trademark or logo of Licensor
|
|
75
|
+
as expressly required by this License).
|
|
76
|
+
|
|
77
|
+
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN
|
|
78
|
+
"AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS
|
|
79
|
+
OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY,
|
|
80
|
+
FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
|
|
81
|
+
|
|
82
|
+
MariaDB hereby grants you permission to use this License's text to license
|
|
83
|
+
your works, and to refer to it using the trademark "Business Source License",
|
|
84
|
+
as long as you comply with the Covenants of Licensor below.
|
|
85
|
+
|
|
86
|
+
-----------------------------------------------------------------------------
|
|
87
|
+
|
|
88
|
+
Covenants of Licensor
|
|
89
|
+
|
|
90
|
+
In consideration of the right to use this License's text and the "Business
|
|
91
|
+
Source License" name and trademark, Licensor covenants to MariaDB, and to all
|
|
92
|
+
other recipients of the licensed work to be provided by Licensor:
|
|
93
|
+
|
|
94
|
+
1. To specify as the Change License the GPL Version 2.0 or any later version,
|
|
95
|
+
or a license that is compatible with GPL Version 2.0 or a later version,
|
|
96
|
+
where "compatible" means that software provided under the Change License can
|
|
97
|
+
be included in a program with software provided under GPL Version 2.0 or a
|
|
98
|
+
later version. Licensor may specify additional Change Licenses without
|
|
99
|
+
limitation.
|
|
100
|
+
|
|
101
|
+
2. To either: (a) specify an additional grant of rights to use that does not
|
|
102
|
+
impose any additional restriction on the right granted in this License, as
|
|
103
|
+
the Additional Use Grant; or (b) insert the text "None".
|
|
104
|
+
|
|
105
|
+
3. To specify a Change Date.
|
|
106
|
+
|
|
107
|
+
4. Not to modify this License in any other way.
|
|
@@ -7,11 +7,11 @@ operative statement for that file; this map governs by path otherwise.
|
|
|
7
7
|
| Path | License | Text |
|
|
8
8
|
|---|---|---|
|
|
9
9
|
| `celerp/` (engine/kernel) | Business Source License 1.1 | `LICENSE` |
|
|
10
|
-
| `celerp/gateway/`, `celerp/session_gate.py`, `celerp/ai/`, `celerp/cloud/` | Celerp Proprietary | `
|
|
11
|
-
| `celerp/output/` (official document/PDF + public share renderers) | Celerp Proprietary | `
|
|
12
|
-
| `ui/` (application UI layer) | Celerp Proprietary | `
|
|
10
|
+
| `celerp/gateway/`, `celerp/session_gate.py`, `celerp/ai/`, `celerp/cloud/` | Celerp Official Components License (LicenseRef-Proprietary) | `legal/OFFICIAL-COMPONENTS.md` |
|
|
11
|
+
| `celerp/output/` (official document/PDF + public share renderers) | Celerp Official Components License (LicenseRef-Proprietary) | `legal/OFFICIAL-COMPONENTS.md` |
|
|
12
|
+
| `ui/` (application UI layer) | Celerp Official Components License (LicenseRef-Proprietary) | `legal/OFFICIAL-COMPONENTS.md` |
|
|
13
13
|
| `default_modules/celerp-admin/` | Business Source License 1.1 | `LICENSE` |
|
|
14
|
-
| `default_modules/celerp-ai/`, `celerp-backup/`, `celerp-connectors/` | Celerp Proprietary | `
|
|
14
|
+
| `default_modules/celerp-ai/`, `celerp-backup/`, `celerp-connectors/` | Celerp Official Components License (LicenseRef-Proprietary) | `legal/OFFICIAL-COMPONENTS.md` |
|
|
15
15
|
| `default_modules/celerp-accounting/` | MIT | module `LICENSE` |
|
|
16
16
|
| `default_modules/celerp-contacts/` | MIT | module `LICENSE` |
|
|
17
17
|
| `default_modules/celerp-dashboard/` | MIT | module `LICENSE` |
|
|
@@ -32,8 +32,8 @@ Notes:
|
|
|
32
32
|
the license of the engine it requires, and using the engine remains governed by `LICENSE`.
|
|
33
33
|
- **Attribution:** the "Powered by Celerp" mark is produced and required by the proprietary components
|
|
34
34
|
(the official UI and document/PDF rendering layer) and the Cloud Services agreement. It is NOT imposed
|
|
35
|
-
by the MIT modules - MIT cannot carry that restriction. See `
|
|
36
|
-
- Trademarks are not licensed by any of the above; see `TRADEMARK.md`.
|
|
35
|
+
by the MIT modules - MIT cannot carry that restriction. See `legal/OFFICIAL-COMPONENTS.md`.
|
|
36
|
+
- Trademarks are not licensed by any of the above; see `legal/TRADEMARK.md`.
|
|
37
37
|
- Third-party dependencies retain their own licenses.
|
|
38
38
|
|
|
39
39
|
Copyright (c) 2026 Noah Severs.
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
include README.md
|
|
2
2
|
include LICENSE
|
|
3
3
|
include NOTICE
|
|
4
|
+
include LICENSING.md
|
|
5
|
+
include legal/OFFICIAL-COMPONENTS.md
|
|
6
|
+
include legal/TRADEMARK.md
|
|
4
7
|
include alembic.ini
|
|
5
|
-
include ui/LICENSE
|
|
6
8
|
include default_modules/celerp-manufacturing/LICENSE
|
|
7
9
|
include default_modules/celerp-labels/LICENSE
|
|
8
10
|
|
celerp-1.2.4/NOTICE
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
NOTICE - Celerp
|
|
2
|
+
|
|
3
|
+
Celerp is distributed under multiple licenses. This NOTICE is an attribution and
|
|
4
|
+
packaging summary; it is not the operative license grant.
|
|
5
|
+
|
|
6
|
+
- The full first-party license map is in LICENSING.md, which is authoritative.
|
|
7
|
+
Where a source file carries an SPDX-License-Identifier header, that header
|
|
8
|
+
governs that file.
|
|
9
|
+
- Some official Celerp components are governed by the Celerp Official
|
|
10
|
+
Components License (SPDX: LicenseRef-Proprietary); see
|
|
11
|
+
legal/OFFICIAL-COMPONENTS.md.
|
|
12
|
+
- The source-available engine and the celerp-admin module are under the
|
|
13
|
+
Business Source License 1.1 (SPDX: BUSL-1.1); see LICENSE.
|
|
14
|
+
- The default business modules are under the MIT License; see the LICENSE file
|
|
15
|
+
in each module subdirectory.
|
|
16
|
+
|
|
17
|
+
Attribution: the "Powered by Celerp" mark in user-visible output is produced and
|
|
18
|
+
required by the official components (the UI and document/PDF rendering layer) and
|
|
19
|
+
the Cloud Services agreement; it is not imposed by the MIT modules.
|
|
20
|
+
|
|
21
|
+
Trademarks ("Celerp" and the Celerp logo) are not licensed by any code license;
|
|
22
|
+
see legal/TRADEMARK.md.
|
|
23
|
+
|
|
24
|
+
Third-party components included in packaged desktop builds are governed by their
|
|
25
|
+
own license files; see licenses/.
|
|
26
|
+
|
|
27
|
+
For commercial, OEM, or white-label inquiries: https://celerp.com
|
|
@@ -1,32 +1,46 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: celerp
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.4
|
|
4
4
|
Summary: Free, self-hosted ERP for small businesses
|
|
5
5
|
License: Business Source License 1.1
|
|
6
6
|
|
|
7
|
+
License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
|
|
8
|
+
"Business Source License" is a trademark of MariaDB Corporation Ab.
|
|
9
|
+
|
|
10
|
+
-----------------------------------------------------------------------------
|
|
11
|
+
|
|
7
12
|
Parameters
|
|
8
13
|
|
|
9
14
|
Licensor: Noah Severs
|
|
10
15
|
Licensed Work: Celerp
|
|
11
16
|
The Licensed Work is (c) 2026 Noah Severs
|
|
12
|
-
Additional Use Grant: You may
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
Additional Use Grant: You may use the Licensed Work in production to operate
|
|
18
|
+
Celerp for your own internal business purposes, including
|
|
19
|
+
self-hosted use by your company and its affiliates. This
|
|
20
|
+
Additional Use Grant does not include offering the Licensed
|
|
21
|
+
Work, modified versions of the Licensed Work, or a
|
|
22
|
+
substantially similar competing product as a hosted service,
|
|
23
|
+
SaaS service, managed service, OEM product, or white-label
|
|
24
|
+
product to third parties without a commercial agreement with
|
|
25
|
+
Licensor.
|
|
17
26
|
|
|
18
27
|
Change Date: 2029-01-01
|
|
19
28
|
|
|
20
29
|
Change License: Apache License, Version 2.0
|
|
21
30
|
|
|
31
|
+
For information about alternative licensing arrangements for the Licensed Work
|
|
32
|
+
(including commercial licensing, OEM agreements, and white-label inquiries),
|
|
33
|
+
please contact https://celerp.com.
|
|
34
|
+
|
|
22
35
|
-----------------------------------------------------------------------------
|
|
23
36
|
|
|
24
|
-
|
|
25
|
-
https://celerp.com
|
|
37
|
+
Notice
|
|
26
38
|
|
|
27
|
-
|
|
39
|
+
The Business Source License (this document, or the "License") is not an Open
|
|
40
|
+
Source license. However, the Licensed Work will eventually be made available
|
|
41
|
+
under an Open Source License, as stated in this License.
|
|
28
42
|
|
|
29
|
-
|
|
43
|
+
-----------------------------------------------------------------------------
|
|
30
44
|
|
|
31
45
|
Terms
|
|
32
46
|
|
|
@@ -37,19 +51,19 @@ License: Business Source License 1.1
|
|
|
37
51
|
|
|
38
52
|
Effective on the Change Date, or the fourth anniversary of the first publicly
|
|
39
53
|
available distribution of a specific version of the Licensed Work under this
|
|
40
|
-
License, whichever comes first, the Licensor hereby grants you rights under
|
|
41
|
-
terms of the Change License, and the rights granted in the paragraph
|
|
42
|
-
terminate.
|
|
54
|
+
License, whichever comes first, the Licensor hereby grants you rights under
|
|
55
|
+
the terms of the Change License, and the rights granted in the paragraph
|
|
56
|
+
above terminate.
|
|
43
57
|
|
|
44
|
-
If your use of the Licensed Work does not comply with the requirements
|
|
45
|
-
in effect as described in this License, you must purchase a
|
|
46
|
-
from the Licensor, its affiliated entities, or authorized
|
|
47
|
-
refrain from using the Licensed Work.
|
|
58
|
+
If your use of the Licensed Work does not comply with the requirements
|
|
59
|
+
currently in effect as described in this License, you must purchase a
|
|
60
|
+
commercial license from the Licensor, its affiliated entities, or authorized
|
|
61
|
+
resellers, or you must refrain from using the Licensed Work.
|
|
48
62
|
|
|
49
63
|
All copies of the original and modified Licensed Work, and derivative works of
|
|
50
|
-
the Licensed Work, are subject to this License. This License applies
|
|
51
|
-
for each version of the Licensed Work and the Change Date may vary
|
|
52
|
-
version of the Licensed Work released by
|
|
64
|
+
the Licensed Work, are subject to this License. This License applies
|
|
65
|
+
separately for each version of the Licensed Work and the Change Date may vary
|
|
66
|
+
for each version of the Licensed Work released by Licensor.
|
|
53
67
|
|
|
54
68
|
You must conspicuously display this License on each original or modified copy
|
|
55
69
|
of the Licensed Work. If you receive the Licensed Work in original or modified
|
|
@@ -57,18 +71,45 @@ License: Business Source License 1.1
|
|
|
57
71
|
apply to your use of that work.
|
|
58
72
|
|
|
59
73
|
Any use of the Licensed Work in violation of this License will automatically
|
|
60
|
-
terminate your rights under this License for the current and all other
|
|
61
|
-
of the Licensed Work.
|
|
74
|
+
terminate your rights under this License for the current and all other
|
|
75
|
+
versions of the Licensed Work.
|
|
62
76
|
|
|
63
77
|
This License does not grant you any right in any trademark or logo of Licensor
|
|
64
|
-
or its affiliates (provided that you may use a trademark or logo of Licensor
|
|
65
|
-
expressly required by this License).
|
|
78
|
+
or its affiliates (provided that you may use a trademark or logo of Licensor
|
|
79
|
+
as expressly required by this License).
|
|
66
80
|
|
|
67
81
|
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN
|
|
68
82
|
"AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS
|
|
69
83
|
OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY,
|
|
70
84
|
FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
|
|
71
85
|
|
|
86
|
+
MariaDB hereby grants you permission to use this License's text to license
|
|
87
|
+
your works, and to refer to it using the trademark "Business Source License",
|
|
88
|
+
as long as you comply with the Covenants of Licensor below.
|
|
89
|
+
|
|
90
|
+
-----------------------------------------------------------------------------
|
|
91
|
+
|
|
92
|
+
Covenants of Licensor
|
|
93
|
+
|
|
94
|
+
In consideration of the right to use this License's text and the "Business
|
|
95
|
+
Source License" name and trademark, Licensor covenants to MariaDB, and to all
|
|
96
|
+
other recipients of the licensed work to be provided by Licensor:
|
|
97
|
+
|
|
98
|
+
1. To specify as the Change License the GPL Version 2.0 or any later version,
|
|
99
|
+
or a license that is compatible with GPL Version 2.0 or a later version,
|
|
100
|
+
where "compatible" means that software provided under the Change License can
|
|
101
|
+
be included in a program with software provided under GPL Version 2.0 or a
|
|
102
|
+
later version. Licensor may specify additional Change Licenses without
|
|
103
|
+
limitation.
|
|
104
|
+
|
|
105
|
+
2. To either: (a) specify an additional grant of rights to use that does not
|
|
106
|
+
impose any additional restriction on the right granted in this License, as
|
|
107
|
+
the Additional Use Grant; or (b) insert the text "None".
|
|
108
|
+
|
|
109
|
+
3. To specify a Change Date.
|
|
110
|
+
|
|
111
|
+
4. Not to modify this License in any other way.
|
|
112
|
+
|
|
72
113
|
Project-URL: Homepage, https://celerp.com
|
|
73
114
|
Project-URL: Repository, https://github.com/celerp/celerp
|
|
74
115
|
Project-URL: Documentation, https://celerp.com/docs
|
|
@@ -85,7 +126,6 @@ Classifier: Topic :: Office/Business :: Financial :: Accounting
|
|
|
85
126
|
Requires-Python: >=3.10
|
|
86
127
|
Description-Content-Type: text/markdown
|
|
87
128
|
License-File: LICENSE
|
|
88
|
-
License-File: LICENSE-PROPRIETARY.md
|
|
89
129
|
License-File: NOTICE
|
|
90
130
|
Requires-Dist: fastapi>=0.115
|
|
91
131
|
Requires-Dist: uvicorn[standard]>=0.30
|
|
@@ -139,6 +179,7 @@ Website: [www.celerp.com](https://www.celerp.com)
|
|
|
139
179
|
|
|
140
180
|
Celerp is simple to use, flexible, customizable, and designed to transition your business into the AI age with no technical knowledge needed to setup your whole office. We want to put businesses back in charge of their data.
|
|
141
181
|
|
|
182
|
+
[](https://pepy.tech/project/celerp)
|
|
142
183
|
[](https://github.com/celerp/celerp/actions)
|
|
143
184
|
[](LICENSE)
|
|
144
185
|
|
|
@@ -272,5 +313,5 @@ Celerp is open-core:
|
|
|
272
313
|
- **A proprietary application + cloud layer** (official UI, document/PDF output, and the cloud/AI
|
|
273
314
|
services) that powers the hosted experience.
|
|
274
315
|
|
|
275
|
-
See [LICENSING.md](LICENSING.md) for the full map and [TRADEMARK.md](TRADEMARK.md) for use of the Celerp
|
|
316
|
+
See [LICENSING.md](LICENSING.md) for the full map and [TRADEMARK.md](legal/TRADEMARK.md) for use of the Celerp
|
|
276
317
|
name. One restriction: don't resell Celerp itself as a competing product.
|
|
@@ -8,6 +8,7 @@ Website: [www.celerp.com](https://www.celerp.com)
|
|
|
8
8
|
|
|
9
9
|
Celerp is simple to use, flexible, customizable, and designed to transition your business into the AI age with no technical knowledge needed to setup your whole office. We want to put businesses back in charge of their data.
|
|
10
10
|
|
|
11
|
+
[](https://pepy.tech/project/celerp)
|
|
11
12
|
[](https://github.com/celerp/celerp/actions)
|
|
12
13
|
[](LICENSE)
|
|
13
14
|
|
|
@@ -141,5 +142,5 @@ Celerp is open-core:
|
|
|
141
142
|
- **A proprietary application + cloud layer** (official UI, document/PDF output, and the cloud/AI
|
|
142
143
|
services) that powers the hosted experience.
|
|
143
144
|
|
|
144
|
-
See [LICENSING.md](LICENSING.md) for the full map and [TRADEMARK.md](TRADEMARK.md) for use of the Celerp
|
|
145
|
+
See [LICENSING.md](LICENSING.md) for the full map and [TRADEMARK.md](legal/TRADEMARK.md) for use of the Celerp
|
|
145
146
|
name. One restriction: don't resell Celerp itself as a competing product.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Copyright (c) 2026 Noah Severs
|
|
2
|
+
# SPDX-License-Identifier: LicenseRef-Proprietary
|
|
3
|
+
|
|
4
|
+
"""Intent classification - detect file-through routing tasks.
|
|
5
|
+
|
|
6
|
+
Determines whether a query with files needs AI comprehension (read the file)
|
|
7
|
+
or is a routing/filing task (skip file content). Keyword-based and instant, so
|
|
8
|
+
classifying intent never costs a metered model call. Ambiguous cases default to
|
|
9
|
+
COMPREHENSION.
|
|
10
|
+
|
|
11
|
+
If no files are attached, always returns COMPREHENSION.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import logging
|
|
17
|
+
|
|
18
|
+
log = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Intent:
|
|
22
|
+
COMPREHENSION = "comprehension"
|
|
23
|
+
ROUTING = "routing"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
_ROUTING_PATTERNS = (
|
|
27
|
+
"file this",
|
|
28
|
+
"save this",
|
|
29
|
+
"attach this",
|
|
30
|
+
"store this",
|
|
31
|
+
"add this to",
|
|
32
|
+
"put this in",
|
|
33
|
+
"send this to",
|
|
34
|
+
"move this to",
|
|
35
|
+
"archive this",
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
def _keyword_match(query: str) -> str | None:
|
|
39
|
+
"""Check for routing keywords. Returns Intent or None if ambiguous."""
|
|
40
|
+
lowered = query.lower()
|
|
41
|
+
for pattern in _ROUTING_PATTERNS:
|
|
42
|
+
if pattern in lowered:
|
|
43
|
+
return Intent.ROUTING
|
|
44
|
+
return None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async def classify_intent(query: str, has_files: bool) -> str:
|
|
48
|
+
"""Classify query intent. Returns Intent.COMPREHENSION or Intent.ROUTING.
|
|
49
|
+
|
|
50
|
+
Without files, always returns COMPREHENSION (text queries always need AI).
|
|
51
|
+
With files, a routing keyword marks a file-only task; otherwise COMPREHENSION.
|
|
52
|
+
"""
|
|
53
|
+
if not has_files:
|
|
54
|
+
return Intent.COMPREHENSION
|
|
55
|
+
result = _keyword_match(query)
|
|
56
|
+
return result if result is not None else Intent.COMPREHENSION
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Copyright (c) 2026 Noah Severs
|
|
2
|
+
# SPDX-License-Identifier: LicenseRef-Proprietary
|
|
3
|
+
|
|
4
|
+
"""LLM client - single entry point for all model calls.
|
|
5
|
+
|
|
6
|
+
Calls are served through the cloud gateway, which selects the model and meters
|
|
7
|
+
usage. Supports text-only and multimodal (image/PDF) messages.
|
|
8
|
+
Concurrency-limited via a module-level semaphore.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import asyncio
|
|
14
|
+
import logging
|
|
15
|
+
import os
|
|
16
|
+
|
|
17
|
+
import httpx
|
|
18
|
+
|
|
19
|
+
from celerp.gateway.state import relay_http_url, relay_session_headers
|
|
20
|
+
|
|
21
|
+
log = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
_MAX_CONCURRENT = int(os.getenv("AI_MAX_CONCURRENT", "3"))
|
|
24
|
+
_semaphore = asyncio.Semaphore(_MAX_CONCURRENT)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _build_user_content(
|
|
28
|
+
text: str,
|
|
29
|
+
files: list[dict] | None = None,
|
|
30
|
+
) -> str | list[dict]:
|
|
31
|
+
"""Build the user message content block.
|
|
32
|
+
|
|
33
|
+
Text-only: returns a plain string.
|
|
34
|
+
With files: returns a list of content parts (image_url or text).
|
|
35
|
+
Each file dict must have keys: media_type (str), data (base64 str).
|
|
36
|
+
"""
|
|
37
|
+
if not files:
|
|
38
|
+
return text
|
|
39
|
+
|
|
40
|
+
parts: list[dict] = []
|
|
41
|
+
for f in files:
|
|
42
|
+
data_uri = f"data:{f['media_type']};base64,{f['data']}"
|
|
43
|
+
parts.append({"type": "image_url", "image_url": {"url": data_uri}})
|
|
44
|
+
parts.append({"type": "text", "text": text})
|
|
45
|
+
return parts
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def call_llm(
|
|
49
|
+
model: str,
|
|
50
|
+
system: str,
|
|
51
|
+
user_text: str,
|
|
52
|
+
files: list[dict] | None = None,
|
|
53
|
+
max_tokens: int = 2048,
|
|
54
|
+
history: list[dict[str, str]] | None = None,
|
|
55
|
+
timeout: float = 60.0,
|
|
56
|
+
) -> str:
|
|
57
|
+
"""Run a completion through the gateway and return the assistant's text.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
model: advisory only — the gateway selects the served model.
|
|
61
|
+
history: Optional prior conversation messages [{"role": ..., "content": ...}].
|
|
62
|
+
|
|
63
|
+
Raises HTTPException(402) when the plan's quota is exhausted.
|
|
64
|
+
Raises RuntimeError on other failures (no session, gateway error).
|
|
65
|
+
"""
|
|
66
|
+
user_content = _build_user_content(user_text, files)
|
|
67
|
+
|
|
68
|
+
messages: list[dict] = [{"role": "system", "content": system}]
|
|
69
|
+
if history:
|
|
70
|
+
messages.extend(history)
|
|
71
|
+
messages.append({"role": "user", "content": user_content})
|
|
72
|
+
|
|
73
|
+
file_count = len(files) if files else 0
|
|
74
|
+
body = {
|
|
75
|
+
"messages": messages,
|
|
76
|
+
"hints": {
|
|
77
|
+
"query": user_text[:500],
|
|
78
|
+
"file_count": file_count,
|
|
79
|
+
"is_batch": file_count > 1,
|
|
80
|
+
},
|
|
81
|
+
"max_tokens": max_tokens,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
headers = relay_session_headers()
|
|
85
|
+
if not headers.get("X-Session-Token"):
|
|
86
|
+
raise RuntimeError("The AI service is not available - no active cloud session.")
|
|
87
|
+
|
|
88
|
+
url = f"{relay_http_url()}/ai/complete"
|
|
89
|
+
|
|
90
|
+
async with _semaphore:
|
|
91
|
+
async with httpx.AsyncClient(timeout=timeout) as client:
|
|
92
|
+
resp = await client.post(url, headers=headers, json=body)
|
|
93
|
+
|
|
94
|
+
if resp.status_code == 200:
|
|
95
|
+
return resp.json().get("answer", "")
|
|
96
|
+
|
|
97
|
+
if resp.status_code == 402:
|
|
98
|
+
from fastapi import HTTPException
|
|
99
|
+
try:
|
|
100
|
+
detail = resp.json().get("detail", {})
|
|
101
|
+
except Exception:
|
|
102
|
+
detail = {}
|
|
103
|
+
if not isinstance(detail, dict):
|
|
104
|
+
detail = {"code": "quota_exceeded", "message": str(detail)}
|
|
105
|
+
raise HTTPException(status_code=402, detail=detail)
|
|
106
|
+
|
|
107
|
+
if resp.status_code in (429, 503):
|
|
108
|
+
raise RuntimeError("The AI service is temporarily busy.")
|
|
109
|
+
|
|
110
|
+
raise RuntimeError(f"LLM gateway error {resp.status_code}")
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Copyright (c) 2026 Noah Severs
|
|
2
|
+
# SPDX-License-Identifier: LicenseRef-Proprietary
|
|
3
|
+
|
|
4
|
+
"""Gateway quota status client.
|
|
5
|
+
|
|
6
|
+
Reads AI quota status from the relay for display and tier checks. Quota is
|
|
7
|
+
enforced by the gateway as a query runs; this module only reports it.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import logging
|
|
13
|
+
|
|
14
|
+
import httpx
|
|
15
|
+
|
|
16
|
+
from celerp.config import settings
|
|
17
|
+
from celerp.gateway.state import (
|
|
18
|
+
get_session_token,
|
|
19
|
+
relay_http_url,
|
|
20
|
+
relay_session_headers,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# Alias so tests / internal callers import this from here rather than reaching
|
|
24
|
+
# into celerp.gateway.state directly.
|
|
25
|
+
_relay_http_url = relay_http_url
|
|
26
|
+
|
|
27
|
+
log = logging.getLogger(__name__)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
async def get_subscription_tier() -> str | None:
|
|
31
|
+
"""Fetch the subscription tier for this instance from the relay.
|
|
32
|
+
|
|
33
|
+
Returns the tier string (e.g. "cloud", "ai", "team") or None if:
|
|
34
|
+
- gateway is not configured (local install)
|
|
35
|
+
- relay is unreachable
|
|
36
|
+
- subscription is not active
|
|
37
|
+
|
|
38
|
+
Never raises — callers treat None as "no restriction".
|
|
39
|
+
"""
|
|
40
|
+
status = await get_quota_status()
|
|
41
|
+
return status.get("tier") if status else None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
async def get_quota_status() -> dict | None:
|
|
45
|
+
"""Fetch full AI quota status from the relay.
|
|
46
|
+
|
|
47
|
+
Returns dict with keys: allowed, used, limit, topup_credits, resets_at, tier.
|
|
48
|
+
Returns None if gateway not configured or relay unreachable.
|
|
49
|
+
"""
|
|
50
|
+
if not settings.gateway_token or not get_session_token():
|
|
51
|
+
return None
|
|
52
|
+
|
|
53
|
+
url = f"{relay_http_url()}/quota/ai/status"
|
|
54
|
+
|
|
55
|
+
try:
|
|
56
|
+
async with httpx.AsyncClient(timeout=5.0) as client:
|
|
57
|
+
r = await client.get(url, headers=relay_session_headers())
|
|
58
|
+
if r.status_code == 200:
|
|
59
|
+
return r.json()
|
|
60
|
+
log.warning("Quota status returned %s", r.status_code)
|
|
61
|
+
except Exception as exc:
|
|
62
|
+
log.warning("Failed to fetch quota status: %s", exc)
|
|
63
|
+
return None
|