b1sl-python 0.1.0__py3-none-any.whl
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.
- b1sl/__init__.py +5 -0
- b1sl/b1sl/__init__.py +56 -0
- b1sl/b1sl/_types.py +28 -0
- b1sl/b1sl/adapter.py +40 -0
- b1sl/b1sl/adapter_protocol.py +28 -0
- b1sl/b1sl/async_client.py +268 -0
- b1sl/b1sl/async_rest_adapter.py +347 -0
- b1sl/b1sl/base_adapter.py +394 -0
- b1sl/b1sl/client.py +112 -0
- b1sl/b1sl/config.py +138 -0
- b1sl/b1sl/config_manager.py +77 -0
- b1sl/b1sl/contrib/__init__.py +14 -0
- b1sl/b1sl/contrib/django/__init__.py +13 -0
- b1sl/b1sl/contrib/django/middleware/__init__.py +27 -0
- b1sl/b1sl/contrib/django/middleware/base.py +89 -0
- b1sl/b1sl/contrib/django/middleware/odata_decode_middleware.py +20 -0
- b1sl/b1sl/contrib/django/middleware/odata_transform_url_middleware.py +20 -0
- b1sl/b1sl/entities/__init__.py +2209 -0
- b1sl/b1sl/environment.py +36 -0
- b1sl/b1sl/exceptions/exceptions.py +142 -0
- b1sl/b1sl/fields/__init__.py +2020 -0
- b1sl/b1sl/fields/_generated/__init__.py +0 -0
- b1sl/b1sl/fields/_generated/complex_types.py +6926 -0
- b1sl/b1sl/fields/_generated/entities/__init__.py +0 -0
- b1sl/b1sl/fields/_generated/entities/businesspartners.py +544 -0
- b1sl/b1sl/fields/_generated/entities/finance.py +451 -0
- b1sl/b1sl/fields/_generated/entities/general.py +4587 -0
- b1sl/b1sl/fields/_generated/entities/inventory.py +761 -0
- b1sl/b1sl/fields/_generated/entities/production.py +256 -0
- b1sl/b1sl/fields/_generated/entities/purchasing.py +53 -0
- b1sl/b1sl/fields/_generated/entities/sales.py +244 -0
- b1sl/b1sl/logging_utils.py +119 -0
- b1sl/b1sl/models/__init__.py +13 -0
- b1sl/b1sl/models/_generated/__init__.py +0 -0
- b1sl/b1sl/models/_generated/_types.py +5 -0
- b1sl/b1sl/models/_generated/complex_types.py +6929 -0
- b1sl/b1sl/models/_generated/entities/__init__.py +581 -0
- b1sl/b1sl/models/_generated/entities/businesspartners.py +565 -0
- b1sl/b1sl/models/_generated/entities/finance.py +472 -0
- b1sl/b1sl/models/_generated/entities/general.py +4831 -0
- b1sl/b1sl/models/_generated/entities/inventory.py +786 -0
- b1sl/b1sl/models/_generated/entities/production.py +272 -0
- b1sl/b1sl/models/_generated/entities/purchasing.py +64 -0
- b1sl/b1sl/models/_generated/entities/sales.py +263 -0
- b1sl/b1sl/models/_generated/enums.py +3501 -0
- b1sl/b1sl/models/_generated/resources/__init__.py +0 -0
- b1sl/b1sl/models/_overrides/inventory.py +24 -0
- b1sl/b1sl/models/base.py +209 -0
- b1sl/b1sl/models/odata_query_model.py +50 -0
- b1sl/b1sl/models/paginated_result.py +85 -0
- b1sl/b1sl/models/result.py +17 -0
- b1sl/b1sl/resources/__init__.py +11 -0
- b1sl/b1sl/resources/_generated/__init__.py +0 -0
- b1sl/b1sl/resources/_generated/account_category.py +15 -0
- b1sl/b1sl/resources/_generated/account_category_service.py +21 -0
- b1sl/b1sl/resources/_generated/account_segmentation_categories.py +15 -0
- b1sl/b1sl/resources/_generated/account_segmentations.py +15 -0
- b1sl/b1sl/resources/_generated/accounts_service.py +33 -0
- b1sl/b1sl/resources/_generated/accrual_types.py +15 -0
- b1sl/b1sl/resources/_generated/accrual_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/activities.py +15 -0
- b1sl/b1sl/resources/_generated/activities_service.py +109 -0
- b1sl/b1sl/resources/_generated/activity_locations.py +15 -0
- b1sl/b1sl/resources/_generated/activity_recipient_lists.py +15 -0
- b1sl/b1sl/resources/_generated/activity_recipient_lists_service.py +21 -0
- b1sl/b1sl/resources/_generated/activity_statuses.py +15 -0
- b1sl/b1sl/resources/_generated/activity_types.py +15 -0
- b1sl/b1sl/resources/_generated/additional_expenses.py +15 -0
- b1sl/b1sl/resources/_generated/address_service.py +38 -0
- b1sl/b1sl/resources/_generated/alert_managements.py +16 -0
- b1sl/b1sl/resources/_generated/alternate_cat_num.py +15 -0
- b1sl/b1sl/resources/_generated/alternative_items_service.py +113 -0
- b1sl/b1sl/resources/_generated/approval_requests.py +15 -0
- b1sl/b1sl/resources/_generated/approval_requests_service.py +33 -0
- b1sl/b1sl/resources/_generated/approval_stages.py +15 -0
- b1sl/b1sl/resources/_generated/approval_stages_service.py +21 -0
- b1sl/b1sl/resources/_generated/approval_templates.py +15 -0
- b1sl/b1sl/resources/_generated/approval_templates_service.py +21 -0
- b1sl/b1sl/resources/_generated/asset_capitalization.py +15 -0
- b1sl/b1sl/resources/_generated/asset_capitalization_credit_memo.py +15 -0
- b1sl/b1sl/resources/_generated/asset_capitalization_credit_memo_service.py +37 -0
- b1sl/b1sl/resources/_generated/asset_capitalization_service.py +37 -0
- b1sl/b1sl/resources/_generated/asset_classes.py +15 -0
- b1sl/b1sl/resources/_generated/asset_classes_service.py +21 -0
- b1sl/b1sl/resources/_generated/asset_depreciation_groups.py +15 -0
- b1sl/b1sl/resources/_generated/asset_depreciation_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/asset_groups.py +15 -0
- b1sl/b1sl/resources/_generated/asset_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/asset_manual_depreciation.py +15 -0
- b1sl/b1sl/resources/_generated/asset_manual_depreciation_service.py +37 -0
- b1sl/b1sl/resources/_generated/asset_retirement.py +15 -0
- b1sl/b1sl/resources/_generated/asset_retirement_service.py +37 -0
- b1sl/b1sl/resources/_generated/asset_transfer.py +15 -0
- b1sl/b1sl/resources/_generated/asset_transfer_service.py +37 -0
- b1sl/b1sl/resources/_generated/attachments2.py +15 -0
- b1sl/b1sl/resources/_generated/attribute_groups.py +15 -0
- b1sl/b1sl/resources/_generated/attribute_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/bank_charges_allocation_codes.py +15 -0
- b1sl/b1sl/resources/_generated/bank_charges_allocation_codes_service.py +21 -0
- b1sl/b1sl/resources/_generated/bank_pages.py +15 -0
- b1sl/b1sl/resources/_generated/bank_statements.py +15 -0
- b1sl/b1sl/resources/_generated/bank_statements_service.py +32 -0
- b1sl/b1sl/resources/_generated/banks.py +15 -0
- b1sl/b1sl/resources/_generated/bar_codes.py +15 -0
- b1sl/b1sl/resources/_generated/bar_codes_service.py +21 -0
- b1sl/b1sl/resources/_generated/batch_number_details.py +15 -0
- b1sl/b1sl/resources/_generated/bill_of_exchange_transactions.py +15 -0
- b1sl/b1sl/resources/_generated/bin_location_attributes.py +15 -0
- b1sl/b1sl/resources/_generated/bin_location_attributes_service.py +21 -0
- b1sl/b1sl/resources/_generated/bin_location_fields.py +15 -0
- b1sl/b1sl/resources/_generated/bin_location_fields_service.py +21 -0
- b1sl/b1sl/resources/_generated/bin_locations.py +15 -0
- b1sl/b1sl/resources/_generated/bin_locations_service.py +21 -0
- b1sl/b1sl/resources/_generated/blanket_agreements.py +15 -0
- b1sl/b1sl/resources/_generated/blanket_agreements_service.py +21 -0
- b1sl/b1sl/resources/_generated/boe_document_types.py +15 -0
- b1sl/b1sl/resources/_generated/boe_document_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/boe_instructions.py +15 -0
- b1sl/b1sl/resources/_generated/boe_instructions_service.py +21 -0
- b1sl/b1sl/resources/_generated/boe_lines_service.py +30 -0
- b1sl/b1sl/resources/_generated/boe_portfolios.py +15 -0
- b1sl/b1sl/resources/_generated/boe_portfolios_service.py +21 -0
- b1sl/b1sl/resources/_generated/bp_fiscal_registry_id.py +15 -0
- b1sl/b1sl/resources/_generated/bp_opening_balance_service.py +41 -0
- b1sl/b1sl/resources/_generated/bp_priorities.py +15 -0
- b1sl/b1sl/resources/_generated/branches.py +15 -0
- b1sl/b1sl/resources/_generated/branches_service.py +21 -0
- b1sl/b1sl/resources/_generated/brazil_beverage_indexers.py +15 -0
- b1sl/b1sl/resources/_generated/brazil_beverage_indexers_service.py +21 -0
- b1sl/b1sl/resources/_generated/brazil_fuel_indexers.py +15 -0
- b1sl/b1sl/resources/_generated/brazil_fuel_indexers_service.py +21 -0
- b1sl/b1sl/resources/_generated/brazil_multi_indexers.py +15 -0
- b1sl/b1sl/resources/_generated/brazil_numeric_indexers.py +15 -0
- b1sl/b1sl/resources/_generated/brazil_string_indexers.py +15 -0
- b1sl/b1sl/resources/_generated/budget_distributions.py +15 -0
- b1sl/b1sl/resources/_generated/budget_scenarios.py +15 -0
- b1sl/b1sl/resources/_generated/budgets.py +15 -0
- b1sl/b1sl/resources/_generated/business_partner_groups.py +15 -0
- b1sl/b1sl/resources/_generated/business_partner_properties.py +15 -0
- b1sl/b1sl/resources/_generated/business_partner_properties_service.py +21 -0
- b1sl/b1sl/resources/_generated/business_partners.py +15 -0
- b1sl/b1sl/resources/_generated/business_partners_service.py +47 -0
- b1sl/b1sl/resources/_generated/business_places.py +15 -0
- b1sl/b1sl/resources/_generated/campaign_response_type.py +15 -0
- b1sl/b1sl/resources/_generated/campaign_response_type_service.py +21 -0
- b1sl/b1sl/resources/_generated/campaigns.py +15 -0
- b1sl/b1sl/resources/_generated/campaigns_service.py +21 -0
- b1sl/b1sl/resources/_generated/cash_discounts.py +15 -0
- b1sl/b1sl/resources/_generated/cash_discounts_service.py +21 -0
- b1sl/b1sl/resources/_generated/cash_flow_line_items.py +15 -0
- b1sl/b1sl/resources/_generated/cash_flow_line_items_service.py +21 -0
- b1sl/b1sl/resources/_generated/certificate_series.py +15 -0
- b1sl/b1sl/resources/_generated/certificate_series_service.py +21 -0
- b1sl/b1sl/resources/_generated/change_logs_service.py +51 -0
- b1sl/b1sl/resources/_generated/chart_of_accounts.py +15 -0
- b1sl/b1sl/resources/_generated/check_lines_service.py +38 -0
- b1sl/b1sl/resources/_generated/checksfor_payment.py +15 -0
- b1sl/b1sl/resources/_generated/choose_from_list.py +15 -0
- b1sl/b1sl/resources/_generated/client_mixin.py +3920 -0
- b1sl/b1sl/resources/_generated/closing_date_procedure.py +15 -0
- b1sl/b1sl/resources/_generated/cockpits.py +15 -0
- b1sl/b1sl/resources/_generated/cockpits_service.py +46 -0
- b1sl/b1sl/resources/_generated/commission_groups.py +15 -0
- b1sl/b1sl/resources/_generated/company_service.py +410 -0
- b1sl/b1sl/resources/_generated/contacts.py +15 -0
- b1sl/b1sl/resources/_generated/contract_templates.py +15 -0
- b1sl/b1sl/resources/_generated/correction_invoice.py +15 -0
- b1sl/b1sl/resources/_generated/correction_invoice_reversal.py +15 -0
- b1sl/b1sl/resources/_generated/correction_invoice_reversal_service.py +65 -0
- b1sl/b1sl/resources/_generated/correction_invoice_service.py +78 -0
- b1sl/b1sl/resources/_generated/correction_purchase_invoice.py +15 -0
- b1sl/b1sl/resources/_generated/correction_purchase_invoice_reversal.py +15 -0
- b1sl/b1sl/resources/_generated/correction_purchase_invoice_reversal_service.py +65 -0
- b1sl/b1sl/resources/_generated/correction_purchase_invoice_service.py +78 -0
- b1sl/b1sl/resources/_generated/cost_center_types.py +15 -0
- b1sl/b1sl/resources/_generated/cost_center_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/cost_element_service.py +21 -0
- b1sl/b1sl/resources/_generated/cost_elements.py +15 -0
- b1sl/b1sl/resources/_generated/counties.py +15 -0
- b1sl/b1sl/resources/_generated/counties_service.py +21 -0
- b1sl/b1sl/resources/_generated/countries.py +15 -0
- b1sl/b1sl/resources/_generated/countries_service.py +21 -0
- b1sl/b1sl/resources/_generated/credit_card_payments.py +15 -0
- b1sl/b1sl/resources/_generated/credit_cards.py +15 -0
- b1sl/b1sl/resources/_generated/credit_lines_service.py +38 -0
- b1sl/b1sl/resources/_generated/credit_notes.py +15 -0
- b1sl/b1sl/resources/_generated/credit_notes_service.py +100 -0
- b1sl/b1sl/resources/_generated/credit_payment_methods.py +15 -0
- b1sl/b1sl/resources/_generated/currencies.py +15 -0
- b1sl/b1sl/resources/_generated/customer_equipment_cards.py +15 -0
- b1sl/b1sl/resources/_generated/customs_declaration.py +15 -0
- b1sl/b1sl/resources/_generated/customs_groups.py +15 -0
- b1sl/b1sl/resources/_generated/cycle_count_determinations.py +15 -0
- b1sl/b1sl/resources/_generated/cycle_count_determinations_service.py +21 -0
- b1sl/b1sl/resources/_generated/dashboard_packages_service.py +28 -0
- b1sl/b1sl/resources/_generated/deductible_tax_service.py +21 -0
- b1sl/b1sl/resources/_generated/deductible_taxes.py +15 -0
- b1sl/b1sl/resources/_generated/deduction_tax_groups.py +15 -0
- b1sl/b1sl/resources/_generated/deduction_tax_hierarchies.py +15 -0
- b1sl/b1sl/resources/_generated/deduction_tax_sub_groups.py +15 -0
- b1sl/b1sl/resources/_generated/deduction_tax_sub_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/delivery_notes.py +15 -0
- b1sl/b1sl/resources/_generated/delivery_notes_service.py +85 -0
- b1sl/b1sl/resources/_generated/departments.py +15 -0
- b1sl/b1sl/resources/_generated/departments_service.py +21 -0
- b1sl/b1sl/resources/_generated/deposits.py +15 -0
- b1sl/b1sl/resources/_generated/deposits_service.py +53 -0
- b1sl/b1sl/resources/_generated/depreciation_areas.py +15 -0
- b1sl/b1sl/resources/_generated/depreciation_areas_service.py +21 -0
- b1sl/b1sl/resources/_generated/depreciation_type_pools.py +15 -0
- b1sl/b1sl/resources/_generated/depreciation_type_pools_service.py +21 -0
- b1sl/b1sl/resources/_generated/depreciation_types.py +15 -0
- b1sl/b1sl/resources/_generated/depreciation_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/determination_criterias.py +15 -0
- b1sl/b1sl/resources/_generated/determination_criterias_service.py +21 -0
- b1sl/b1sl/resources/_generated/dimensions.py +15 -0
- b1sl/b1sl/resources/_generated/dimensions_service.py +21 -0
- b1sl/b1sl/resources/_generated/distribution_rules.py +15 -0
- b1sl/b1sl/resources/_generated/distribution_rules_service.py +21 -0
- b1sl/b1sl/resources/_generated/dnf_code_setup.py +15 -0
- b1sl/b1sl/resources/_generated/dnf_code_setup_service.py +21 -0
- b1sl/b1sl/resources/_generated/down_payments.py +15 -0
- b1sl/b1sl/resources/_generated/down_payments_service.py +68 -0
- b1sl/b1sl/resources/_generated/drafts.py +15 -0
- b1sl/b1sl/resources/_generated/drafts_service.py +86 -0
- b1sl/b1sl/resources/_generated/dunning_letters.py +15 -0
- b1sl/b1sl/resources/_generated/dunning_terms.py +15 -0
- b1sl/b1sl/resources/_generated/dunning_terms_service.py +21 -0
- b1sl/b1sl/resources/_generated/dynamic_system_strings.py +15 -0
- b1sl/b1sl/resources/_generated/electronic_communication_action_service.py +122 -0
- b1sl/b1sl/resources/_generated/electronic_communication_actions_service.py +119 -0
- b1sl/b1sl/resources/_generated/electronic_file_formats.py +15 -0
- b1sl/b1sl/resources/_generated/electronic_file_formats_service.py +21 -0
- b1sl/b1sl/resources/_generated/email_groups.py +15 -0
- b1sl/b1sl/resources/_generated/email_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/employee_id_type.py +15 -0
- b1sl/b1sl/resources/_generated/employee_id_type_service.py +21 -0
- b1sl/b1sl/resources/_generated/employee_position.py +15 -0
- b1sl/b1sl/resources/_generated/employee_position_service.py +21 -0
- b1sl/b1sl/resources/_generated/employee_roles_setup.py +15 -0
- b1sl/b1sl/resources/_generated/employee_roles_setup_service.py +21 -0
- b1sl/b1sl/resources/_generated/employee_status.py +15 -0
- b1sl/b1sl/resources/_generated/employee_status_service.py +21 -0
- b1sl/b1sl/resources/_generated/employee_transfers.py +15 -0
- b1sl/b1sl/resources/_generated/employee_transfers_service.py +21 -0
- b1sl/b1sl/resources/_generated/employees_info.py +15 -0
- b1sl/b1sl/resources/_generated/employment_category_service.py +21 -0
- b1sl/b1sl/resources/_generated/employment_categorys.py +15 -0
- b1sl/b1sl/resources/_generated/enhanced_discount_groups.py +15 -0
- b1sl/b1sl/resources/_generated/enhanced_discount_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/exceptional_event_service.py +21 -0
- b1sl/b1sl/resources/_generated/exceptional_events.py +15 -0
- b1sl/b1sl/resources/_generated/extended_translations.py +15 -0
- b1sl/b1sl/resources/_generated/extended_translations_service.py +21 -0
- b1sl/b1sl/resources/_generated/external_calls_service.py +54 -0
- b1sl/b1sl/resources/_generated/external_reconciliations_service.py +104 -0
- b1sl/b1sl/resources/_generated/fa_account_determinations.py +15 -0
- b1sl/b1sl/resources/_generated/fa_account_determinations_service.py +21 -0
- b1sl/b1sl/resources/_generated/factoring_indicators.py +15 -0
- b1sl/b1sl/resources/_generated/financial_years.py +15 -0
- b1sl/b1sl/resources/_generated/financial_years_service.py +21 -0
- b1sl/b1sl/resources/_generated/fiscal_printer.py +15 -0
- b1sl/b1sl/resources/_generated/fiscal_printer_service.py +21 -0
- b1sl/b1sl/resources/_generated/fixed_asset_items_service.py +55 -0
- b1sl/b1sl/resources/_generated/form_preferences.py +15 -0
- b1sl/b1sl/resources/_generated/formatted_searches.py +15 -0
- b1sl/b1sl/resources/_generated/forms1099.py +15 -0
- b1sl/b1sl/resources/_generated/gl_account_advanced_rules.py +15 -0
- b1sl/b1sl/resources/_generated/gl_account_advanced_rules_service.py +21 -0
- b1sl/b1sl/resources/_generated/goods_return_request.py +15 -0
- b1sl/b1sl/resources/_generated/goods_return_request_service.py +69 -0
- b1sl/b1sl/resources/_generated/gov_pay_codes.py +15 -0
- b1sl/b1sl/resources/_generated/gov_pay_codes_service.py +21 -0
- b1sl/b1sl/resources/_generated/gt_is_service.py +28 -0
- b1sl/b1sl/resources/_generated/holidays.py +15 -0
- b1sl/b1sl/resources/_generated/house_bank_accounts.py +15 -0
- b1sl/b1sl/resources/_generated/incoming_payments.py +15 -0
- b1sl/b1sl/resources/_generated/india_hsn.py +15 -0
- b1sl/b1sl/resources/_generated/india_hsn_service.py +21 -0
- b1sl/b1sl/resources/_generated/industries.py +15 -0
- b1sl/b1sl/resources/_generated/integration_packages_configure.py +15 -0
- b1sl/b1sl/resources/_generated/integration_packages_configure_service.py +21 -0
- b1sl/b1sl/resources/_generated/internal_reconciliations.py +15 -0
- b1sl/b1sl/resources/_generated/internal_reconciliations_service.py +51 -0
- b1sl/b1sl/resources/_generated/intrastat_configuration.py +15 -0
- b1sl/b1sl/resources/_generated/intrastat_configuration_service.py +21 -0
- b1sl/b1sl/resources/_generated/inventory_countings.py +15 -0
- b1sl/b1sl/resources/_generated/inventory_countings_service.py +21 -0
- b1sl/b1sl/resources/_generated/inventory_cycles.py +15 -0
- b1sl/b1sl/resources/_generated/inventory_gen_entries.py +15 -0
- b1sl/b1sl/resources/_generated/inventory_gen_entry_service.py +67 -0
- b1sl/b1sl/resources/_generated/inventory_gen_exit_service.py +66 -0
- b1sl/b1sl/resources/_generated/inventory_gen_exits.py +15 -0
- b1sl/b1sl/resources/_generated/inventory_opening_balances.py +15 -0
- b1sl/b1sl/resources/_generated/inventory_opening_balances_service.py +21 -0
- b1sl/b1sl/resources/_generated/inventory_postings.py +15 -0
- b1sl/b1sl/resources/_generated/inventory_postings_service.py +34 -0
- b1sl/b1sl/resources/_generated/inventory_transfer_requests.py +15 -0
- b1sl/b1sl/resources/_generated/inventory_transfer_requests_service.py +43 -0
- b1sl/b1sl/resources/_generated/invoices.py +15 -0
- b1sl/b1sl/resources/_generated/invoices_service.py +100 -0
- b1sl/b1sl/resources/_generated/item_groups.py +15 -0
- b1sl/b1sl/resources/_generated/item_properties.py +15 -0
- b1sl/b1sl/resources/_generated/items.py +15 -0
- b1sl/b1sl/resources/_generated/journal_entries.py +15 -0
- b1sl/b1sl/resources/_generated/journal_entry_document_type_service.py +21 -0
- b1sl/b1sl/resources/_generated/journal_entry_document_types.py +15 -0
- b1sl/b1sl/resources/_generated/journal_vouchers_service.py +45 -0
- b1sl/b1sl/resources/_generated/knowledge_base_solutions.py +15 -0
- b1sl/b1sl/resources/_generated/kp_is.py +15 -0
- b1sl/b1sl/resources/_generated/kp_is_service.py +21 -0
- b1sl/b1sl/resources/_generated/landed_costs.py +15 -0
- b1sl/b1sl/resources/_generated/landed_costs_codes.py +15 -0
- b1sl/b1sl/resources/_generated/landed_costs_service.py +21 -0
- b1sl/b1sl/resources/_generated/legal_data.py +15 -0
- b1sl/b1sl/resources/_generated/length_measures.py +15 -0
- b1sl/b1sl/resources/_generated/license_service.py +21 -0
- b1sl/b1sl/resources/_generated/local_era.py +15 -0
- b1sl/b1sl/resources/_generated/manufacturers.py +15 -0
- b1sl/b1sl/resources/_generated/material_groups.py +15 -0
- b1sl/b1sl/resources/_generated/material_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/material_revaluation.py +15 -0
- b1sl/b1sl/resources/_generated/material_revaluation_fifo_service.py +33 -0
- b1sl/b1sl/resources/_generated/material_revaluation_snb_service.py +33 -0
- b1sl/b1sl/resources/_generated/messages.py +15 -0
- b1sl/b1sl/resources/_generated/messages_service.py +35 -0
- b1sl/b1sl/resources/_generated/mobile_add_on_setting.py +15 -0
- b1sl/b1sl/resources/_generated/mobile_add_on_setting_service.py +21 -0
- b1sl/b1sl/resources/_generated/mobile_app_service.py +240 -0
- b1sl/b1sl/resources/_generated/multi_language_translations.py +15 -0
- b1sl/b1sl/resources/_generated/nature_of_assessees.py +15 -0
- b1sl/b1sl/resources/_generated/nature_of_assessees_service.py +21 -0
- b1sl/b1sl/resources/_generated/ncm_codes_setup.py +15 -0
- b1sl/b1sl/resources/_generated/ncm_codes_setup_service.py +21 -0
- b1sl/b1sl/resources/_generated/nf_models.py +15 -0
- b1sl/b1sl/resources/_generated/nf_models_service.py +21 -0
- b1sl/b1sl/resources/_generated/nf_tax_categories.py +15 -0
- b1sl/b1sl/resources/_generated/nf_tax_categories_service.py +21 -0
- b1sl/b1sl/resources/_generated/nota_fiscal_cfop.py +15 -0
- b1sl/b1sl/resources/_generated/nota_fiscal_cst.py +15 -0
- b1sl/b1sl/resources/_generated/nota_fiscal_usage.py +15 -0
- b1sl/b1sl/resources/_generated/occurrence_codes.py +15 -0
- b1sl/b1sl/resources/_generated/occurrence_codes_service.py +21 -0
- b1sl/b1sl/resources/_generated/orders.py +15 -0
- b1sl/b1sl/resources/_generated/orders_service.py +94 -0
- b1sl/b1sl/resources/_generated/packages_types.py +15 -0
- b1sl/b1sl/resources/_generated/partners_setups.py +15 -0
- b1sl/b1sl/resources/_generated/partners_setups_service.py +21 -0
- b1sl/b1sl/resources/_generated/payment_blocks.py +15 -0
- b1sl/b1sl/resources/_generated/payment_blocks_service.py +21 -0
- b1sl/b1sl/resources/_generated/payment_calculation_service.py +37 -0
- b1sl/b1sl/resources/_generated/payment_drafts.py +15 -0
- b1sl/b1sl/resources/_generated/payment_reason_code_service.py +21 -0
- b1sl/b1sl/resources/_generated/payment_reason_codes.py +15 -0
- b1sl/b1sl/resources/_generated/payment_run_export.py +15 -0
- b1sl/b1sl/resources/_generated/payment_terms_types.py +15 -0
- b1sl/b1sl/resources/_generated/payment_terms_types_service.py +28 -0
- b1sl/b1sl/resources/_generated/pick_lists.py +15 -0
- b1sl/b1sl/resources/_generated/pick_lists_service.py +78 -0
- b1sl/b1sl/resources/_generated/pos_daily_summary.py +15 -0
- b1sl/b1sl/resources/_generated/predefined_texts.py +15 -0
- b1sl/b1sl/resources/_generated/predefined_texts_service.py +21 -0
- b1sl/b1sl/resources/_generated/price_lists.py +15 -0
- b1sl/b1sl/resources/_generated/product_trees.py +15 -0
- b1sl/b1sl/resources/_generated/production_orders.py +15 -0
- b1sl/b1sl/resources/_generated/profit_centers.py +15 -0
- b1sl/b1sl/resources/_generated/profit_centers_service.py +21 -0
- b1sl/b1sl/resources/_generated/project_management_configuration_service.py +333 -0
- b1sl/b1sl/resources/_generated/project_management_service.py +104 -0
- b1sl/b1sl/resources/_generated/project_management_time_sheet.py +15 -0
- b1sl/b1sl/resources/_generated/project_managements.py +15 -0
- b1sl/b1sl/resources/_generated/projects.py +15 -0
- b1sl/b1sl/resources/_generated/projects_service.py +21 -0
- b1sl/b1sl/resources/_generated/purchase_credit_notes.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_credit_notes_service.py +85 -0
- b1sl/b1sl/resources/_generated/purchase_delivery_notes.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_delivery_notes_service.py +85 -0
- b1sl/b1sl/resources/_generated/purchase_down_payments.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_down_payments_service.py +70 -0
- b1sl/b1sl/resources/_generated/purchase_invoices.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_invoices_service.py +85 -0
- b1sl/b1sl/resources/_generated/purchase_orders.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_orders_service.py +69 -0
- b1sl/b1sl/resources/_generated/purchase_quotations.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_quotations_service.py +70 -0
- b1sl/b1sl/resources/_generated/purchase_request_service.py +68 -0
- b1sl/b1sl/resources/_generated/purchase_requests.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_returns.py +15 -0
- b1sl/b1sl/resources/_generated/purchase_returns_service.py +85 -0
- b1sl/b1sl/resources/_generated/purchase_tax_invoices.py +15 -0
- b1sl/b1sl/resources/_generated/qr_code_service.py +33 -0
- b1sl/b1sl/resources/_generated/query_auth_groups.py +15 -0
- b1sl/b1sl/resources/_generated/query_categories.py +15 -0
- b1sl/b1sl/resources/_generated/query_service.py +29 -0
- b1sl/b1sl/resources/_generated/queue.py +15 -0
- b1sl/b1sl/resources/_generated/quotations.py +15 -0
- b1sl/b1sl/resources/_generated/quotations_service.py +69 -0
- b1sl/b1sl/resources/_generated/recurring_transaction_service.py +67 -0
- b1sl/b1sl/resources/_generated/relationships.py +15 -0
- b1sl/b1sl/resources/_generated/report_filter.py +15 -0
- b1sl/b1sl/resources/_generated/report_filter_service.py +30 -0
- b1sl/b1sl/resources/_generated/report_layouts_service.py +237 -0
- b1sl/b1sl/resources/_generated/report_types.py +15 -0
- b1sl/b1sl/resources/_generated/report_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/resource_capacities.py +15 -0
- b1sl/b1sl/resources/_generated/resource_capacities_service.py +34 -0
- b1sl/b1sl/resources/_generated/resource_groups.py +15 -0
- b1sl/b1sl/resources/_generated/resource_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/resource_properties.py +15 -0
- b1sl/b1sl/resources/_generated/resource_properties_service.py +21 -0
- b1sl/b1sl/resources/_generated/resources.py +15 -0
- b1sl/b1sl/resources/_generated/resources_service.py +21 -0
- b1sl/b1sl/resources/_generated/retorno_codes.py +15 -0
- b1sl/b1sl/resources/_generated/retorno_codes_service.py +21 -0
- b1sl/b1sl/resources/_generated/return_request.py +15 -0
- b1sl/b1sl/resources/_generated/return_request_service.py +69 -0
- b1sl/b1sl/resources/_generated/returns.py +15 -0
- b1sl/b1sl/resources/_generated/returns_service.py +85 -0
- b1sl/b1sl/resources/_generated/route_stages.py +15 -0
- b1sl/b1sl/resources/_generated/route_stages_service.py +21 -0
- b1sl/b1sl/resources/_generated/sales_forecast.py +15 -0
- b1sl/b1sl/resources/_generated/sales_opportunities.py +15 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_competitors_setup.py +15 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_competitors_setup_service.py +21 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_interests_setup.py +15 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_interests_setup_service.py +21 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_reasons_setup.py +15 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_reasons_setup_service.py +21 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_sources_setup.py +15 -0
- b1sl/b1sl/resources/_generated/sales_opportunity_sources_setup_service.py +21 -0
- b1sl/b1sl/resources/_generated/sales_persons.py +15 -0
- b1sl/b1sl/resources/_generated/sales_stages.py +15 -0
- b1sl/b1sl/resources/_generated/sales_tax_authorities.py +15 -0
- b1sl/b1sl/resources/_generated/sales_tax_authorities_types.py +15 -0
- b1sl/b1sl/resources/_generated/sales_tax_codes.py +15 -0
- b1sl/b1sl/resources/_generated/sales_tax_invoices.py +15 -0
- b1sl/b1sl/resources/_generated/sbo_bob_service.py +89 -0
- b1sl/b1sl/resources/_generated/sections.py +15 -0
- b1sl/b1sl/resources/_generated/sections_service.py +21 -0
- b1sl/b1sl/resources/_generated/self_credit_memo_service.py +69 -0
- b1sl/b1sl/resources/_generated/self_credit_memos.py +15 -0
- b1sl/b1sl/resources/_generated/self_invoice_service.py +69 -0
- b1sl/b1sl/resources/_generated/self_invoices.py +15 -0
- b1sl/b1sl/resources/_generated/serial_number_details.py +15 -0
- b1sl/b1sl/resources/_generated/series_service.py +305 -0
- b1sl/b1sl/resources/_generated/service_call_origins.py +15 -0
- b1sl/b1sl/resources/_generated/service_call_origins_service.py +21 -0
- b1sl/b1sl/resources/_generated/service_call_problem_sub_types.py +15 -0
- b1sl/b1sl/resources/_generated/service_call_problem_sub_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/service_call_problem_types.py +15 -0
- b1sl/b1sl/resources/_generated/service_call_problem_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/service_call_solution_status.py +15 -0
- b1sl/b1sl/resources/_generated/service_call_solution_status_service.py +21 -0
- b1sl/b1sl/resources/_generated/service_call_status.py +15 -0
- b1sl/b1sl/resources/_generated/service_call_status_service.py +21 -0
- b1sl/b1sl/resources/_generated/service_call_types.py +15 -0
- b1sl/b1sl/resources/_generated/service_call_types_service.py +21 -0
- b1sl/b1sl/resources/_generated/service_calls.py +15 -0
- b1sl/b1sl/resources/_generated/service_contracts.py +15 -0
- b1sl/b1sl/resources/_generated/service_groups.py +15 -0
- b1sl/b1sl/resources/_generated/service_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/service_tax_posting_service.py +36 -0
- b1sl/b1sl/resources/_generated/shipping_types.py +15 -0
- b1sl/b1sl/resources/_generated/short_link_mappings_service.py +26 -0
- b1sl/b1sl/resources/_generated/special_prices.py +15 -0
- b1sl/b1sl/resources/_generated/states.py +15 -0
- b1sl/b1sl/resources/_generated/states_service.py +21 -0
- b1sl/b1sl/resources/_generated/stock_takings.py +15 -0
- b1sl/b1sl/resources/_generated/stock_transfer_draft_service.py +34 -0
- b1sl/b1sl/resources/_generated/stock_transfer_drafts.py +15 -0
- b1sl/b1sl/resources/_generated/stock_transfer_service.py +43 -0
- b1sl/b1sl/resources/_generated/stock_transfers.py +15 -0
- b1sl/b1sl/resources/_generated/target_groups.py +15 -0
- b1sl/b1sl/resources/_generated/target_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/tax_code_determinations.py +15 -0
- b1sl/b1sl/resources/_generated/tax_code_determinations_service.py +21 -0
- b1sl/b1sl/resources/_generated/tax_code_determinations_tcd.py +15 -0
- b1sl/b1sl/resources/_generated/tax_code_determinations_tcd_service.py +21 -0
- b1sl/b1sl/resources/_generated/tax_invoice_report.py +15 -0
- b1sl/b1sl/resources/_generated/tax_web_sites.py +15 -0
- b1sl/b1sl/resources/_generated/tax_web_sites_service.py +27 -0
- b1sl/b1sl/resources/_generated/teams.py +15 -0
- b1sl/b1sl/resources/_generated/termination_reason.py +15 -0
- b1sl/b1sl/resources/_generated/termination_reason_service.py +21 -0
- b1sl/b1sl/resources/_generated/territories.py +15 -0
- b1sl/b1sl/resources/_generated/tracking_notes.py +15 -0
- b1sl/b1sl/resources/_generated/tracking_notes_service.py +21 -0
- b1sl/b1sl/resources/_generated/transaction_codes.py +15 -0
- b1sl/b1sl/resources/_generated/transaction_codes_service.py +21 -0
- b1sl/b1sl/resources/_generated/transportation_document.py +15 -0
- b1sl/b1sl/resources/_generated/tsr_exceptional_event_service.py +21 -0
- b1sl/b1sl/resources/_generated/tsr_exceptional_events.py +15 -0
- b1sl/b1sl/resources/_generated/unit_of_measurement_groups.py +15 -0
- b1sl/b1sl/resources/_generated/unit_of_measurement_groups_service.py +21 -0
- b1sl/b1sl/resources/_generated/unit_of_measurements.py +15 -0
- b1sl/b1sl/resources/_generated/unit_of_measurements_service.py +21 -0
- b1sl/b1sl/resources/_generated/user_default_groups.py +15 -0
- b1sl/b1sl/resources/_generated/user_fields_md.py +15 -0
- b1sl/b1sl/resources/_generated/user_keys_md.py +15 -0
- b1sl/b1sl/resources/_generated/user_languages.py +15 -0
- b1sl/b1sl/resources/_generated/user_menu_service.py +103 -0
- b1sl/b1sl/resources/_generated/user_objects_md.py +15 -0
- b1sl/b1sl/resources/_generated/user_permission_tree.py +15 -0
- b1sl/b1sl/resources/_generated/user_queries.py +15 -0
- b1sl/b1sl/resources/_generated/user_tables_md.py +15 -0
- b1sl/b1sl/resources/_generated/users.py +15 -0
- b1sl/b1sl/resources/_generated/users_service.py +21 -0
- b1sl/b1sl/resources/_generated/value_mapping.py +15 -0
- b1sl/b1sl/resources/_generated/value_mapping_communication.py +15 -0
- b1sl/b1sl/resources/_generated/value_mapping_service.py +64 -0
- b1sl/b1sl/resources/_generated/vat_groups.py +15 -0
- b1sl/b1sl/resources/_generated/vendor_payments.py +15 -0
- b1sl/b1sl/resources/_generated/w_tax_type_code_service.py +21 -0
- b1sl/b1sl/resources/_generated/w_tax_type_codes.py +15 -0
- b1sl/b1sl/resources/_generated/warehouse_locations.py +15 -0
- b1sl/b1sl/resources/_generated/warehouse_sublevel_codes.py +15 -0
- b1sl/b1sl/resources/_generated/warehouse_sublevel_codes_service.py +21 -0
- b1sl/b1sl/resources/_generated/warehouses.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_bookmark_tile_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_bookmark_tiles.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_dashboard_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_dashboards.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_form_setting_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_form_settings.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_launchpad_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_launchpads.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_listview_filter_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_listview_filters.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_notification_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_notifications.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_preference_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_preferences.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_recent_activities.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_recent_activity_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_variant_group_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_variant_groups.py +15 -0
- b1sl/b1sl/resources/_generated/web_client_variant_service.py +21 -0
- b1sl/b1sl/resources/_generated/web_client_variants.py +15 -0
- b1sl/b1sl/resources/_generated/weight_measures.py +15 -0
- b1sl/b1sl/resources/_generated/withholding_tax_codes.py +15 -0
- b1sl/b1sl/resources/_generated/witholding_tax_definition.py +15 -0
- b1sl/b1sl/resources/_generated/wizard_payment_methods.py +15 -0
- b1sl/b1sl/resources/_generated/workflow_task_service.py +47 -0
- b1sl/b1sl/resources/async_base.py +60 -0
- b1sl/b1sl/resources/base.py +159 -0
- b1sl/b1sl/resources/udo.py +78 -0
- b1sl/b1sl/rest_adapter.py +351 -0
- b1sl/b1sl/testing.py +24 -0
- b1sl/b1sl/tests/__init__.py +0 -0
- b1sl/b1sl/tests/test_01_settings.py +60 -0
- b1sl/b1sl/tests/test_02_rest_adapter.py +177 -0
- b1sl/b1sl/tests/test_03_items_endpoint.py +172 -0
- b1sl/b1sl/tests/test_04_serialnumberdetails_endpoint.py +181 -0
- b1sl/b1sl/tests/test_observability.py +153 -0
- b1sl/b1sl/tests/test_utils.py +24 -0
- b1sl/contrib/__init__.py +0 -0
- b1sl/contrib/django/__init__.py +15 -0
- b1sl/contrib/django/base.py +89 -0
- b1sl/contrib/django/odata_decode_middleware.py +14 -0
- b1sl/contrib/django/odata_transform_url_middleware.py +15 -0
- b1sl/py.typed +0 -0
- b1sl/saphdb/__init__.py +19 -0
- b1sl/saphdb/adapter.py +24 -0
- b1sl/saphdb/client.py +50 -0
- b1sl/saphdb/config.py +68 -0
- b1sl/saphdb/endpoints/serialnumberdetailodbc.py +100 -0
- b1sl/saphdb/exceptions/exceptions.py +19 -0
- b1sl/saphdb/main.py +18 -0
- b1sl/saphdb/models/result.py +18 -0
- b1sl/saphdb/models/serial.py +37 -0
- b1sl/saphdb/odbc_adapter.py +220 -0
- b1sl/saphdb/tests/__init__.py +0 -0
- b1sl/saphdb/tests/test_01_settings.py +37 -0
- b1sl/saphdb/tests/test_02_odbc_adapter.py +96 -0
- b1sl/saphdb/tests/test_04_serialnumberdetails_endpoint.py +131 -0
- b1sl_python-0.1.0.dist-info/METADATA +169 -0
- b1sl_python-0.1.0.dist-info/RECORD +579 -0
- b1sl_python-0.1.0.dist-info/WHEEL +4 -0
- b1sl_python-0.1.0.dist-info/licenses/LICENSE +21 -0
b1sl/__init__.py
ADDED
b1sl/b1sl/__init__.py
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
b1sl.b1sl — SDK for SAP B1 Service Layer (OData).
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import warnings
|
|
7
|
+
|
|
8
|
+
try:
|
|
9
|
+
from pydantic import ArbitraryTypeWarning
|
|
10
|
+
|
|
11
|
+
warnings.filterwarnings("ignore", category=ArbitraryTypeWarning, module=r"b1sl\..*")
|
|
12
|
+
except ImportError:
|
|
13
|
+
warnings.filterwarnings("ignore", module=r"b1sl\..*|pydantic\..*")
|
|
14
|
+
|
|
15
|
+
# Standard library pattern: prevent "No handlers could be found"
|
|
16
|
+
logging.getLogger("b1sl").addHandler(logging.NullHandler())
|
|
17
|
+
|
|
18
|
+
from b1sl.b1sl.async_client import AsyncB1Client
|
|
19
|
+
from b1sl.b1sl.async_rest_adapter import AsyncRestAdapter
|
|
20
|
+
from b1sl.b1sl.base_adapter import HookContext, ObservabilityConfig
|
|
21
|
+
from b1sl.b1sl.client import B1Client
|
|
22
|
+
from b1sl.b1sl.config import B1Config
|
|
23
|
+
from b1sl.b1sl.config_manager import B1Environment
|
|
24
|
+
from b1sl.b1sl.environment import B1Env
|
|
25
|
+
from b1sl.b1sl.exceptions.exceptions import SAPConcurrencyError
|
|
26
|
+
from b1sl.b1sl.resources.async_base import AsyncGenericResource
|
|
27
|
+
from b1sl.b1sl.resources.base import GenericResource, ODataQuery
|
|
28
|
+
from b1sl.b1sl.rest_adapter import RestAdapter
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
from b1sl.b1sl import entities
|
|
32
|
+
except ImportError:
|
|
33
|
+
entities = None # Before code generation
|
|
34
|
+
|
|
35
|
+
try:
|
|
36
|
+
from b1sl.b1sl import fields
|
|
37
|
+
except ImportError:
|
|
38
|
+
fields = None
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
"B1Client",
|
|
42
|
+
"AsyncB1Client",
|
|
43
|
+
"B1Config",
|
|
44
|
+
"B1Env",
|
|
45
|
+
"B1Environment",
|
|
46
|
+
"RestAdapter",
|
|
47
|
+
"AsyncRestAdapter",
|
|
48
|
+
"GenericResource",
|
|
49
|
+
"AsyncGenericResource",
|
|
50
|
+
"entities",
|
|
51
|
+
"fields",
|
|
52
|
+
"ODataQuery",
|
|
53
|
+
"HookContext",
|
|
54
|
+
"ObservabilityConfig",
|
|
55
|
+
"SAPConcurrencyError",
|
|
56
|
+
]
|
b1sl/b1sl/_types.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""
|
|
2
|
+
b1sl.b1sl._types
|
|
3
|
+
~~~~~~~~~~~~~~~~~~~~~~
|
|
4
|
+
Shared generic type variables for the SDK.
|
|
5
|
+
|
|
6
|
+
Import ``T`` from here instead of re-declaring it per-module so that
|
|
7
|
+
static analysis tools (mypy, pyright) resolve the same TypeVar object
|
|
8
|
+
across resource classes and the public API.
|
|
9
|
+
|
|
10
|
+
Usage::
|
|
11
|
+
|
|
12
|
+
from b1sl.b1sl._types import T
|
|
13
|
+
|
|
14
|
+
def get(self, code: str, *, model: Type[T] | None = None) -> MyModel | T:
|
|
15
|
+
...
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from typing import TypeVar
|
|
21
|
+
|
|
22
|
+
from pydantic import BaseModel
|
|
23
|
+
|
|
24
|
+
# T represents *any* Pydantic model a downstream developer injects.
|
|
25
|
+
# Bound to BaseModel so IDEs know every T has .model_validate(), .model_dump(), etc.
|
|
26
|
+
T = TypeVar("T", bound=BaseModel)
|
|
27
|
+
|
|
28
|
+
__all__ = ["T"]
|
b1sl/b1sl/adapter.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from b1sl.b1sl.config import B1Config
|
|
6
|
+
from b1sl.b1sl.rest_adapter import RestAdapter
|
|
7
|
+
|
|
8
|
+
# ── Legacy Django-only shared adapter ──────────────────────────────────────
|
|
9
|
+
# Prefer B1Client (via web/services/b1sl.py) for all new code.
|
|
10
|
+
# This module exists only for the legacy *_endpoint.py classes that have not
|
|
11
|
+
# yet been migrated to constructor-injected RestAdapter.
|
|
12
|
+
#
|
|
13
|
+
# NOTE: RestAdapter is no longer a Singleton. This module-level global IS the
|
|
14
|
+
# single shared instance for legacy endpoints. Do not instantiate RestAdapter
|
|
15
|
+
# directly in endpoint classes.
|
|
16
|
+
|
|
17
|
+
_logger = logging.getLogger(__name__)
|
|
18
|
+
_rest_adapter: RestAdapter | None = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_rest_adapter() -> RestAdapter:
|
|
22
|
+
"""Return (or lazily create) the shared Django adapter instance."""
|
|
23
|
+
global _rest_adapter
|
|
24
|
+
if _rest_adapter is None:
|
|
25
|
+
_rest_adapter = RestAdapter.from_config(B1Config.from_django_settings())
|
|
26
|
+
return _rest_adapter
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Eager init — fails silently if Django settings are not ready yet.
|
|
30
|
+
# Legacy endpoints that import `rest_adapter` directly will get None until
|
|
31
|
+
# settings are fully loaded; get_rest_adapter() will correct this on first call.
|
|
32
|
+
try:
|
|
33
|
+
rest_adapter = get_rest_adapter()
|
|
34
|
+
except Exception as _e:
|
|
35
|
+
_logger.warning(
|
|
36
|
+
"b1sl.b1sl.adapter: could not eagerly initialise rest_adapter "
|
|
37
|
+
f"({_e!r}). Legacy endpoints will fail until Django settings are ready. "
|
|
38
|
+
"Call get_rest_adapter() explicitly after settings are loaded."
|
|
39
|
+
)
|
|
40
|
+
rest_adapter = None
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from typing import Protocol
|
|
2
|
+
|
|
3
|
+
from b1sl.b1sl.models.result import Result
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RestAdapterProtocol(Protocol):
|
|
7
|
+
"""
|
|
8
|
+
Interface protocol for components that execute HTTP requests
|
|
9
|
+
against SAP B1 Service Layer and return Result objects.
|
|
10
|
+
|
|
11
|
+
Implemented statically by both the real RestAdapter and its Fakes.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
def get(
|
|
15
|
+
self, endpoint: str, ep_params: dict | None = None, data: dict | None = None
|
|
16
|
+
) -> Result: ...
|
|
17
|
+
|
|
18
|
+
def post(
|
|
19
|
+
self, endpoint: str, ep_params: dict | None = None, data: dict | None = None
|
|
20
|
+
) -> Result: ...
|
|
21
|
+
|
|
22
|
+
def patch(
|
|
23
|
+
self, endpoint: str, ep_params: dict | None = None, data: dict | None = None
|
|
24
|
+
) -> Result: ...
|
|
25
|
+
|
|
26
|
+
def delete(
|
|
27
|
+
self, endpoint: str, ep_params: dict | None = None, data: dict | None = None
|
|
28
|
+
) -> Result: ...
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from b1sl.b1sl.async_rest_adapter import AsyncRestAdapter
|
|
7
|
+
from b1sl.b1sl.base_adapter import ObservabilityConfig
|
|
8
|
+
from b1sl.b1sl.config import B1Config
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from b1sl.b1sl.models.base import B1Model
|
|
12
|
+
from b1sl.b1sl.resources.async_base import AsyncGenericResource
|
|
13
|
+
from b1sl.b1sl.resources.udo import AsyncUDOResource
|
|
14
|
+
|
|
15
|
+
# Models for typing convenience aliases
|
|
16
|
+
from b1sl.b1sl.models._generated.entities.inventory import Item
|
|
17
|
+
from b1sl.b1sl.models._generated.entities.businesspartners import BusinessPartner, Activity
|
|
18
|
+
from b1sl.b1sl.models._generated.entities.general import Document, Payment, User
|
|
19
|
+
from b1sl.b1sl.models._generated.entities.production import ProductionOrder
|
|
20
|
+
from b1sl.b1sl.models._generated.entities.finance import JournalEntry
|
|
21
|
+
from b1sl.b1sl.models._generated.entities.sales import ServiceCall
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class AsyncB1Client:
|
|
25
|
+
"""
|
|
26
|
+
Main asynchronous entry point for the SAP B1 Service Layer SDK.
|
|
27
|
+
|
|
28
|
+
This client is designed for high-concurrency environments like FastAPI,
|
|
29
|
+
Temporal, or Sanic. It uses an asynchronous context manager for automated
|
|
30
|
+
session management and httpx for non-blocking I/O.
|
|
31
|
+
|
|
32
|
+
AI Role: Recommended for modern web apps.
|
|
33
|
+
Use 'async with AsyncB1Client(config) as b1:' to ensure session cleanup.
|
|
34
|
+
|
|
35
|
+
Example:
|
|
36
|
+
async with AsyncB1Client(config) as b1:
|
|
37
|
+
item = await b1.items.get("A0001")
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
config: B1Config,
|
|
43
|
+
logger: logging.Logger | None = None,
|
|
44
|
+
version: str = "v2",
|
|
45
|
+
*,
|
|
46
|
+
observability: ObservabilityConfig | None = None,
|
|
47
|
+
session_id: str | None = None,
|
|
48
|
+
) -> None:
|
|
49
|
+
"""
|
|
50
|
+
Initializes the AsyncB1Client.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
config (B1Config): Validated configuration object.
|
|
54
|
+
logger (logging.Logger, optional): Custom logger; defaults
|
|
55
|
+
to a prefixed 'b1sl.AsyncB1Client' logger.
|
|
56
|
+
version (str): API version (defaults to 'v2').
|
|
57
|
+
session_id (str, optional): An existing B1SESSION cookie to reuse.
|
|
58
|
+
"""
|
|
59
|
+
self._adapter = AsyncRestAdapter(
|
|
60
|
+
config,
|
|
61
|
+
logger=logger,
|
|
62
|
+
version=version,
|
|
63
|
+
observability=observability,
|
|
64
|
+
session_id=session_id,
|
|
65
|
+
)
|
|
66
|
+
self.version = version
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def session_id(self) -> str | None:
|
|
70
|
+
"""
|
|
71
|
+
Retrieves the current SAP session ID.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
str: B1SESSION cookie value or None.
|
|
75
|
+
"""
|
|
76
|
+
return self._adapter.session_id
|
|
77
|
+
|
|
78
|
+
async def connect(self) -> None:
|
|
79
|
+
"""
|
|
80
|
+
Initializes the underlying HTTP client and logs in.
|
|
81
|
+
Must be called if not using the async context manager.
|
|
82
|
+
"""
|
|
83
|
+
await self._adapter.connect()
|
|
84
|
+
|
|
85
|
+
async def aclose(self) -> None:
|
|
86
|
+
"""
|
|
87
|
+
Logs out and closes the HTTP connection pool.
|
|
88
|
+
Must be called to ensure clean shutdown if not using context manager.
|
|
89
|
+
"""
|
|
90
|
+
await self._adapter.aclose()
|
|
91
|
+
|
|
92
|
+
async def __aenter__(self) -> AsyncB1Client:
|
|
93
|
+
"""
|
|
94
|
+
Entry point for the async context manager.
|
|
95
|
+
Logins and prepares the session.
|
|
96
|
+
"""
|
|
97
|
+
await self.connect()
|
|
98
|
+
return self
|
|
99
|
+
|
|
100
|
+
async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
|
|
101
|
+
"""
|
|
102
|
+
Exit point for the async context manager.
|
|
103
|
+
Ensures logout and connection pool cleanup.
|
|
104
|
+
"""
|
|
105
|
+
await self.aclose()
|
|
106
|
+
|
|
107
|
+
def get_resource(
|
|
108
|
+
self, model: type["B1Model"], endpoint: str
|
|
109
|
+
) -> "AsyncGenericResource":
|
|
110
|
+
"""
|
|
111
|
+
Instantiates a generic resource accessor for the given SAP entity.
|
|
112
|
+
|
|
113
|
+
AI Role: This is the primary, canonical way to map any Pydantic model
|
|
114
|
+
to an arbitrary Service Layer endpoint concurrently.
|
|
115
|
+
"""
|
|
116
|
+
from b1sl.b1sl.resources.async_base import AsyncGenericResource
|
|
117
|
+
|
|
118
|
+
class DynamicResource(AsyncGenericResource):
|
|
119
|
+
pass
|
|
120
|
+
|
|
121
|
+
DynamicResource.endpoint = endpoint
|
|
122
|
+
DynamicResource.model = model
|
|
123
|
+
|
|
124
|
+
return DynamicResource(self._adapter)
|
|
125
|
+
|
|
126
|
+
# --------------------------------------------------------------------------
|
|
127
|
+
# Thin Aliases for common endpoints (Developer Experience)
|
|
128
|
+
# --------------------------------------------------------------------------
|
|
129
|
+
|
|
130
|
+
@property
|
|
131
|
+
def items(self) -> "AsyncGenericResource[Item]":
|
|
132
|
+
"""Convenience alias for get_resource(Item, 'Items')."""
|
|
133
|
+
from b1sl.b1sl.models._generated.entities.inventory import Item
|
|
134
|
+
|
|
135
|
+
return self.get_resource(Item, "Items")
|
|
136
|
+
|
|
137
|
+
@property
|
|
138
|
+
def business_partners(self) -> "AsyncGenericResource[BusinessPartner]":
|
|
139
|
+
"""Convenience alias for get_resource(BusinessPartner, 'BusinessPartners')."""
|
|
140
|
+
from b1sl.b1sl.models._generated.entities.businesspartners import (
|
|
141
|
+
BusinessPartner,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
return self.get_resource(BusinessPartner, "BusinessPartners")
|
|
145
|
+
|
|
146
|
+
@property
|
|
147
|
+
def invoices(self) -> "AsyncGenericResource[Document]":
|
|
148
|
+
"""Convenience alias for get_resource(Document, 'Invoices')."""
|
|
149
|
+
from b1sl.b1sl.models._generated.entities.general import Document
|
|
150
|
+
|
|
151
|
+
return self.get_resource(Document, "Invoices")
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def quotations(self) -> "AsyncGenericResource[Document]":
|
|
155
|
+
"""Convenience alias for get_resource(Document, 'Quotations')."""
|
|
156
|
+
from b1sl.b1sl.models._generated.entities.general import Document
|
|
157
|
+
|
|
158
|
+
return self.get_resource(Document, "Quotations")
|
|
159
|
+
|
|
160
|
+
@property
|
|
161
|
+
def orders(self) -> "AsyncGenericResource[Document]":
|
|
162
|
+
"""Convenience alias for get_resource(Document, 'Orders')."""
|
|
163
|
+
from b1sl.b1sl.models._generated.entities.general import Document
|
|
164
|
+
|
|
165
|
+
return self.get_resource(Document, "Orders")
|
|
166
|
+
|
|
167
|
+
@property
|
|
168
|
+
def delivery_notes(self) -> "AsyncGenericResource[Document]":
|
|
169
|
+
"""Convenience alias for get_resource(Document, 'DeliveryNotes')."""
|
|
170
|
+
from b1sl.b1sl.models._generated.entities.general import Document
|
|
171
|
+
|
|
172
|
+
return self.get_resource(Document, "DeliveryNotes")
|
|
173
|
+
|
|
174
|
+
@property
|
|
175
|
+
def purchase_orders(self) -> "AsyncGenericResource[Document]":
|
|
176
|
+
"""Convenience alias for get_resource(Document, 'PurchaseOrders')."""
|
|
177
|
+
from b1sl.b1sl.models._generated.entities.general import Document
|
|
178
|
+
|
|
179
|
+
return self.get_resource(Document, "PurchaseOrders")
|
|
180
|
+
|
|
181
|
+
@property
|
|
182
|
+
def purchase_delivery_notes(self) -> "AsyncGenericResource[Document]":
|
|
183
|
+
"""Convenience alias for get_resource(Document, 'PurchaseDeliveryNotes')."""
|
|
184
|
+
from b1sl.b1sl.models._generated.entities.general import Document
|
|
185
|
+
|
|
186
|
+
return self.get_resource(Document, "PurchaseDeliveryNotes")
|
|
187
|
+
|
|
188
|
+
@property
|
|
189
|
+
def purchase_invoices(self) -> "AsyncGenericResource[Document]":
|
|
190
|
+
"""Convenience alias for get_resource(Document, 'PurchaseInvoices')."""
|
|
191
|
+
from b1sl.b1sl.models._generated.entities.general import Document
|
|
192
|
+
|
|
193
|
+
return self.get_resource(Document, "PurchaseInvoices")
|
|
194
|
+
|
|
195
|
+
@property
|
|
196
|
+
def incoming_payments(self) -> "AsyncGenericResource[Payment]":
|
|
197
|
+
"""Convenience alias for get_resource(Payment, 'IncomingPayments')."""
|
|
198
|
+
from b1sl.b1sl.models._generated.entities.general import Payment
|
|
199
|
+
|
|
200
|
+
return self.get_resource(Payment, "IncomingPayments")
|
|
201
|
+
|
|
202
|
+
@property
|
|
203
|
+
def vendor_payments(self) -> "AsyncGenericResource[Payment]":
|
|
204
|
+
"""Convenience alias for get_resource(Payment, 'VendorPayments')."""
|
|
205
|
+
from b1sl.b1sl.models._generated.entities.general import Payment
|
|
206
|
+
|
|
207
|
+
return self.get_resource(Payment, "VendorPayments")
|
|
208
|
+
|
|
209
|
+
@property
|
|
210
|
+
def users(self) -> "AsyncGenericResource[User]":
|
|
211
|
+
"""Convenience alias for get_resource(User, 'Users')."""
|
|
212
|
+
from b1sl.b1sl.models._generated.entities.general import User
|
|
213
|
+
|
|
214
|
+
return self.get_resource(User, "Users")
|
|
215
|
+
|
|
216
|
+
# --- Producción & Operaciones ---
|
|
217
|
+
|
|
218
|
+
@property
|
|
219
|
+
def production_orders(self) -> "AsyncGenericResource[ProductionOrder]":
|
|
220
|
+
"""Convenience alias for get_resource(ProductionOrder, 'ProductionOrders')."""
|
|
221
|
+
from b1sl.b1sl.models._generated.entities.production import ProductionOrder
|
|
222
|
+
|
|
223
|
+
return self.get_resource(ProductionOrder, "ProductionOrders")
|
|
224
|
+
|
|
225
|
+
# --- Contabilidad & Finanzas ---
|
|
226
|
+
|
|
227
|
+
@property
|
|
228
|
+
def journal_entries(self) -> "AsyncGenericResource[JournalEntry]":
|
|
229
|
+
"""Convenience alias for get_resource(JournalEntry, 'JournalEntries')."""
|
|
230
|
+
from b1sl.b1sl.models._generated.entities.finance import JournalEntry
|
|
231
|
+
|
|
232
|
+
return self.get_resource(JournalEntry, "JournalEntries")
|
|
233
|
+
|
|
234
|
+
# --- Servicio Post-Venta ---
|
|
235
|
+
|
|
236
|
+
@property
|
|
237
|
+
def service_calls(self) -> "AsyncGenericResource[ServiceCall]":
|
|
238
|
+
"""Convenience alias for get_resource(ServiceCall, 'ServiceCalls')."""
|
|
239
|
+
from b1sl.b1sl.models._generated.entities.sales import ServiceCall
|
|
240
|
+
|
|
241
|
+
return self.get_resource(ServiceCall, "ServiceCalls")
|
|
242
|
+
|
|
243
|
+
# --- CRM & Seguimiento ---
|
|
244
|
+
|
|
245
|
+
@property
|
|
246
|
+
def activities(self) -> "AsyncGenericResource[Activity]":
|
|
247
|
+
"""Convenience alias for get_resource(Activity, 'Activities')."""
|
|
248
|
+
from b1sl.b1sl.models._generated.entities.businesspartners import Activity
|
|
249
|
+
|
|
250
|
+
return self.get_resource(Activity, "Activities")
|
|
251
|
+
|
|
252
|
+
def udo(self, table_name: str) -> "AsyncUDOResource":
|
|
253
|
+
"""
|
|
254
|
+
Asynchronously access a User Defined Object (UDO) or User Table.
|
|
255
|
+
|
|
256
|
+
AI Role: Dynamic accessor for entities not pre-defined in the client.
|
|
257
|
+
|
|
258
|
+
Args:
|
|
259
|
+
table_name (str): The UDO name in SAP B1.
|
|
260
|
+
|
|
261
|
+
Returns:
|
|
262
|
+
AsyncUDOResource: A resource object bound to the UDO.
|
|
263
|
+
"""
|
|
264
|
+
from b1sl.b1sl.resources.udo import AsyncUDOResource
|
|
265
|
+
|
|
266
|
+
return AsyncUDOResource(adapter=self._adapter, table_name=table_name)
|
|
267
|
+
|
|
268
|
+
|