b1sl-python 0.1.0__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.
Files changed (609) hide show
  1. b1sl_python-0.1.0/.env.example +29 -0
  2. b1sl_python-0.1.0/.gitignore +229 -0
  3. b1sl_python-0.1.0/LICENSE +21 -0
  4. b1sl_python-0.1.0/Makefile +59 -0
  5. b1sl_python-0.1.0/PKG-INFO +169 -0
  6. b1sl_python-0.1.0/README.md +129 -0
  7. b1sl_python-0.1.0/ROADMAP.md +23 -0
  8. b1sl_python-0.1.0/configs/dev.json +16 -0
  9. b1sl_python-0.1.0/configs/qa.json.example +16 -0
  10. b1sl_python-0.1.0/pyproject.toml +106 -0
  11. b1sl_python-0.1.0/src/b1sl/__init__.py +5 -0
  12. b1sl_python-0.1.0/src/b1sl/b1sl/__init__.py +56 -0
  13. b1sl_python-0.1.0/src/b1sl/b1sl/_types.py +28 -0
  14. b1sl_python-0.1.0/src/b1sl/b1sl/adapter.py +40 -0
  15. b1sl_python-0.1.0/src/b1sl/b1sl/adapter_protocol.py +28 -0
  16. b1sl_python-0.1.0/src/b1sl/b1sl/async_client.py +268 -0
  17. b1sl_python-0.1.0/src/b1sl/b1sl/async_rest_adapter.py +347 -0
  18. b1sl_python-0.1.0/src/b1sl/b1sl/base_adapter.py +394 -0
  19. b1sl_python-0.1.0/src/b1sl/b1sl/client.py +112 -0
  20. b1sl_python-0.1.0/src/b1sl/b1sl/config.py +138 -0
  21. b1sl_python-0.1.0/src/b1sl/b1sl/config_manager.py +77 -0
  22. b1sl_python-0.1.0/src/b1sl/b1sl/contrib/__init__.py +14 -0
  23. b1sl_python-0.1.0/src/b1sl/b1sl/contrib/django/__init__.py +13 -0
  24. b1sl_python-0.1.0/src/b1sl/b1sl/contrib/django/middleware/__init__.py +27 -0
  25. b1sl_python-0.1.0/src/b1sl/b1sl/contrib/django/middleware/base.py +89 -0
  26. b1sl_python-0.1.0/src/b1sl/b1sl/contrib/django/middleware/odata_decode_middleware.py +20 -0
  27. b1sl_python-0.1.0/src/b1sl/b1sl/contrib/django/middleware/odata_transform_url_middleware.py +20 -0
  28. b1sl_python-0.1.0/src/b1sl/b1sl/entities/__init__.py +2209 -0
  29. b1sl_python-0.1.0/src/b1sl/b1sl/environment.py +36 -0
  30. b1sl_python-0.1.0/src/b1sl/b1sl/exceptions/exceptions.py +142 -0
  31. b1sl_python-0.1.0/src/b1sl/b1sl/fields/__init__.py +2020 -0
  32. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/__init__.py +0 -0
  33. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/complex_types.py +6926 -0
  34. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/__init__.py +0 -0
  35. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/businesspartners.py +544 -0
  36. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/finance.py +451 -0
  37. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/general.py +4587 -0
  38. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/inventory.py +761 -0
  39. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/production.py +256 -0
  40. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/purchasing.py +53 -0
  41. b1sl_python-0.1.0/src/b1sl/b1sl/fields/_generated/entities/sales.py +244 -0
  42. b1sl_python-0.1.0/src/b1sl/b1sl/logging_utils.py +119 -0
  43. b1sl_python-0.1.0/src/b1sl/b1sl/models/__init__.py +13 -0
  44. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/__init__.py +0 -0
  45. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/_types.py +5 -0
  46. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/complex_types.py +6929 -0
  47. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/__init__.py +581 -0
  48. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/businesspartners.py +565 -0
  49. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/finance.py +472 -0
  50. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/general.py +4831 -0
  51. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/inventory.py +786 -0
  52. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/production.py +272 -0
  53. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/purchasing.py +64 -0
  54. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/entities/sales.py +263 -0
  55. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/enums.py +3501 -0
  56. b1sl_python-0.1.0/src/b1sl/b1sl/models/_generated/resources/__init__.py +0 -0
  57. b1sl_python-0.1.0/src/b1sl/b1sl/models/_overrides/inventory.py +24 -0
  58. b1sl_python-0.1.0/src/b1sl/b1sl/models/base.py +209 -0
  59. b1sl_python-0.1.0/src/b1sl/b1sl/models/odata_query_model.py +50 -0
  60. b1sl_python-0.1.0/src/b1sl/b1sl/models/paginated_result.py +85 -0
  61. b1sl_python-0.1.0/src/b1sl/b1sl/models/result.py +17 -0
  62. b1sl_python-0.1.0/src/b1sl/b1sl/resources/__init__.py +11 -0
  63. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/__init__.py +0 -0
  64. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/account_category.py +15 -0
  65. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/account_category_service.py +21 -0
  66. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/account_segmentation_categories.py +15 -0
  67. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/account_segmentations.py +15 -0
  68. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/accounts_service.py +33 -0
  69. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/accrual_types.py +15 -0
  70. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/accrual_types_service.py +21 -0
  71. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/activities.py +15 -0
  72. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/activities_service.py +109 -0
  73. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/activity_locations.py +15 -0
  74. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/activity_recipient_lists.py +15 -0
  75. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/activity_recipient_lists_service.py +21 -0
  76. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/activity_statuses.py +15 -0
  77. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/activity_types.py +15 -0
  78. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/additional_expenses.py +15 -0
  79. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/address_service.py +38 -0
  80. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/alert_managements.py +16 -0
  81. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/alternate_cat_num.py +15 -0
  82. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/alternative_items_service.py +113 -0
  83. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/approval_requests.py +15 -0
  84. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/approval_requests_service.py +33 -0
  85. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/approval_stages.py +15 -0
  86. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/approval_stages_service.py +21 -0
  87. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/approval_templates.py +15 -0
  88. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/approval_templates_service.py +21 -0
  89. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_capitalization.py +15 -0
  90. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_capitalization_credit_memo.py +15 -0
  91. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_capitalization_credit_memo_service.py +37 -0
  92. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_capitalization_service.py +37 -0
  93. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_classes.py +15 -0
  94. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_classes_service.py +21 -0
  95. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_depreciation_groups.py +15 -0
  96. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_depreciation_groups_service.py +21 -0
  97. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_groups.py +15 -0
  98. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_groups_service.py +21 -0
  99. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_manual_depreciation.py +15 -0
  100. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_manual_depreciation_service.py +37 -0
  101. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_retirement.py +15 -0
  102. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_retirement_service.py +37 -0
  103. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_transfer.py +15 -0
  104. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/asset_transfer_service.py +37 -0
  105. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/attachments2.py +15 -0
  106. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/attribute_groups.py +15 -0
  107. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/attribute_groups_service.py +21 -0
  108. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bank_charges_allocation_codes.py +15 -0
  109. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bank_charges_allocation_codes_service.py +21 -0
  110. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bank_pages.py +15 -0
  111. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bank_statements.py +15 -0
  112. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bank_statements_service.py +32 -0
  113. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/banks.py +15 -0
  114. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bar_codes.py +15 -0
  115. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bar_codes_service.py +21 -0
  116. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/batch_number_details.py +15 -0
  117. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bill_of_exchange_transactions.py +15 -0
  118. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bin_location_attributes.py +15 -0
  119. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bin_location_attributes_service.py +21 -0
  120. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bin_location_fields.py +15 -0
  121. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bin_location_fields_service.py +21 -0
  122. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bin_locations.py +15 -0
  123. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bin_locations_service.py +21 -0
  124. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/blanket_agreements.py +15 -0
  125. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/blanket_agreements_service.py +21 -0
  126. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/boe_document_types.py +15 -0
  127. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/boe_document_types_service.py +21 -0
  128. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/boe_instructions.py +15 -0
  129. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/boe_instructions_service.py +21 -0
  130. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/boe_lines_service.py +30 -0
  131. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/boe_portfolios.py +15 -0
  132. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/boe_portfolios_service.py +21 -0
  133. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bp_fiscal_registry_id.py +15 -0
  134. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bp_opening_balance_service.py +41 -0
  135. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/bp_priorities.py +15 -0
  136. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/branches.py +15 -0
  137. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/branches_service.py +21 -0
  138. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/brazil_beverage_indexers.py +15 -0
  139. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/brazil_beverage_indexers_service.py +21 -0
  140. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/brazil_fuel_indexers.py +15 -0
  141. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/brazil_fuel_indexers_service.py +21 -0
  142. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/brazil_multi_indexers.py +15 -0
  143. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/brazil_numeric_indexers.py +15 -0
  144. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/brazil_string_indexers.py +15 -0
  145. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/budget_distributions.py +15 -0
  146. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/budget_scenarios.py +15 -0
  147. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/budgets.py +15 -0
  148. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/business_partner_groups.py +15 -0
  149. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/business_partner_properties.py +15 -0
  150. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/business_partner_properties_service.py +21 -0
  151. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/business_partners.py +15 -0
  152. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/business_partners_service.py +47 -0
  153. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/business_places.py +15 -0
  154. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/campaign_response_type.py +15 -0
  155. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/campaign_response_type_service.py +21 -0
  156. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/campaigns.py +15 -0
  157. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/campaigns_service.py +21 -0
  158. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cash_discounts.py +15 -0
  159. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cash_discounts_service.py +21 -0
  160. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cash_flow_line_items.py +15 -0
  161. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cash_flow_line_items_service.py +21 -0
  162. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/certificate_series.py +15 -0
  163. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/certificate_series_service.py +21 -0
  164. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/change_logs_service.py +51 -0
  165. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/chart_of_accounts.py +15 -0
  166. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/check_lines_service.py +38 -0
  167. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/checksfor_payment.py +15 -0
  168. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/choose_from_list.py +15 -0
  169. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/client_mixin.py +3920 -0
  170. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/closing_date_procedure.py +15 -0
  171. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cockpits.py +15 -0
  172. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cockpits_service.py +46 -0
  173. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/commission_groups.py +15 -0
  174. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/company_service.py +410 -0
  175. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/contacts.py +15 -0
  176. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/contract_templates.py +15 -0
  177. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_invoice.py +15 -0
  178. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_invoice_reversal.py +15 -0
  179. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_invoice_reversal_service.py +65 -0
  180. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_invoice_service.py +78 -0
  181. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_purchase_invoice.py +15 -0
  182. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_purchase_invoice_reversal.py +15 -0
  183. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_purchase_invoice_reversal_service.py +65 -0
  184. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/correction_purchase_invoice_service.py +78 -0
  185. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cost_center_types.py +15 -0
  186. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cost_center_types_service.py +21 -0
  187. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cost_element_service.py +21 -0
  188. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cost_elements.py +15 -0
  189. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/counties.py +15 -0
  190. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/counties_service.py +21 -0
  191. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/countries.py +15 -0
  192. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/countries_service.py +21 -0
  193. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/credit_card_payments.py +15 -0
  194. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/credit_cards.py +15 -0
  195. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/credit_lines_service.py +38 -0
  196. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/credit_notes.py +15 -0
  197. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/credit_notes_service.py +100 -0
  198. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/credit_payment_methods.py +15 -0
  199. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/currencies.py +15 -0
  200. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/customer_equipment_cards.py +15 -0
  201. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/customs_declaration.py +15 -0
  202. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/customs_groups.py +15 -0
  203. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cycle_count_determinations.py +15 -0
  204. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/cycle_count_determinations_service.py +21 -0
  205. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dashboard_packages_service.py +28 -0
  206. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deductible_tax_service.py +21 -0
  207. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deductible_taxes.py +15 -0
  208. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deduction_tax_groups.py +15 -0
  209. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deduction_tax_hierarchies.py +15 -0
  210. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deduction_tax_sub_groups.py +15 -0
  211. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deduction_tax_sub_groups_service.py +21 -0
  212. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/delivery_notes.py +15 -0
  213. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/delivery_notes_service.py +85 -0
  214. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/departments.py +15 -0
  215. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/departments_service.py +21 -0
  216. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deposits.py +15 -0
  217. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/deposits_service.py +53 -0
  218. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/depreciation_areas.py +15 -0
  219. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/depreciation_areas_service.py +21 -0
  220. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/depreciation_type_pools.py +15 -0
  221. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/depreciation_type_pools_service.py +21 -0
  222. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/depreciation_types.py +15 -0
  223. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/depreciation_types_service.py +21 -0
  224. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/determination_criterias.py +15 -0
  225. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/determination_criterias_service.py +21 -0
  226. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dimensions.py +15 -0
  227. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dimensions_service.py +21 -0
  228. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/distribution_rules.py +15 -0
  229. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/distribution_rules_service.py +21 -0
  230. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dnf_code_setup.py +15 -0
  231. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dnf_code_setup_service.py +21 -0
  232. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/down_payments.py +15 -0
  233. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/down_payments_service.py +68 -0
  234. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/drafts.py +15 -0
  235. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/drafts_service.py +86 -0
  236. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dunning_letters.py +15 -0
  237. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dunning_terms.py +15 -0
  238. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dunning_terms_service.py +21 -0
  239. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/dynamic_system_strings.py +15 -0
  240. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/electronic_communication_action_service.py +122 -0
  241. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/electronic_communication_actions_service.py +119 -0
  242. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/electronic_file_formats.py +15 -0
  243. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/electronic_file_formats_service.py +21 -0
  244. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/email_groups.py +15 -0
  245. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/email_groups_service.py +21 -0
  246. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_id_type.py +15 -0
  247. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_id_type_service.py +21 -0
  248. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_position.py +15 -0
  249. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_position_service.py +21 -0
  250. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_roles_setup.py +15 -0
  251. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_roles_setup_service.py +21 -0
  252. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_status.py +15 -0
  253. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_status_service.py +21 -0
  254. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_transfers.py +15 -0
  255. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employee_transfers_service.py +21 -0
  256. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employees_info.py +15 -0
  257. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employment_category_service.py +21 -0
  258. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/employment_categorys.py +15 -0
  259. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/enhanced_discount_groups.py +15 -0
  260. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/enhanced_discount_groups_service.py +21 -0
  261. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/exceptional_event_service.py +21 -0
  262. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/exceptional_events.py +15 -0
  263. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/extended_translations.py +15 -0
  264. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/extended_translations_service.py +21 -0
  265. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/external_calls_service.py +54 -0
  266. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/external_reconciliations_service.py +104 -0
  267. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/fa_account_determinations.py +15 -0
  268. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/fa_account_determinations_service.py +21 -0
  269. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/factoring_indicators.py +15 -0
  270. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/financial_years.py +15 -0
  271. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/financial_years_service.py +21 -0
  272. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/fiscal_printer.py +15 -0
  273. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/fiscal_printer_service.py +21 -0
  274. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/fixed_asset_items_service.py +55 -0
  275. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/form_preferences.py +15 -0
  276. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/formatted_searches.py +15 -0
  277. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/forms1099.py +15 -0
  278. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/gl_account_advanced_rules.py +15 -0
  279. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/gl_account_advanced_rules_service.py +21 -0
  280. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/goods_return_request.py +15 -0
  281. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/goods_return_request_service.py +69 -0
  282. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/gov_pay_codes.py +15 -0
  283. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/gov_pay_codes_service.py +21 -0
  284. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/gt_is_service.py +28 -0
  285. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/holidays.py +15 -0
  286. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/house_bank_accounts.py +15 -0
  287. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/incoming_payments.py +15 -0
  288. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/india_hsn.py +15 -0
  289. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/india_hsn_service.py +21 -0
  290. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/industries.py +15 -0
  291. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/integration_packages_configure.py +15 -0
  292. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/integration_packages_configure_service.py +21 -0
  293. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/internal_reconciliations.py +15 -0
  294. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/internal_reconciliations_service.py +51 -0
  295. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/intrastat_configuration.py +15 -0
  296. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/intrastat_configuration_service.py +21 -0
  297. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_countings.py +15 -0
  298. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_countings_service.py +21 -0
  299. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_cycles.py +15 -0
  300. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_gen_entries.py +15 -0
  301. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_gen_entry_service.py +67 -0
  302. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_gen_exit_service.py +66 -0
  303. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_gen_exits.py +15 -0
  304. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_opening_balances.py +15 -0
  305. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_opening_balances_service.py +21 -0
  306. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_postings.py +15 -0
  307. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_postings_service.py +34 -0
  308. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_transfer_requests.py +15 -0
  309. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/inventory_transfer_requests_service.py +43 -0
  310. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/invoices.py +15 -0
  311. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/invoices_service.py +100 -0
  312. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/item_groups.py +15 -0
  313. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/item_properties.py +15 -0
  314. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/items.py +15 -0
  315. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/journal_entries.py +15 -0
  316. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/journal_entry_document_type_service.py +21 -0
  317. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/journal_entry_document_types.py +15 -0
  318. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/journal_vouchers_service.py +45 -0
  319. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/knowledge_base_solutions.py +15 -0
  320. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/kp_is.py +15 -0
  321. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/kp_is_service.py +21 -0
  322. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/landed_costs.py +15 -0
  323. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/landed_costs_codes.py +15 -0
  324. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/landed_costs_service.py +21 -0
  325. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/legal_data.py +15 -0
  326. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/length_measures.py +15 -0
  327. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/license_service.py +21 -0
  328. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/local_era.py +15 -0
  329. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/manufacturers.py +15 -0
  330. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/material_groups.py +15 -0
  331. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/material_groups_service.py +21 -0
  332. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/material_revaluation.py +15 -0
  333. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/material_revaluation_fifo_service.py +33 -0
  334. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/material_revaluation_snb_service.py +33 -0
  335. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/messages.py +15 -0
  336. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/messages_service.py +35 -0
  337. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/mobile_add_on_setting.py +15 -0
  338. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/mobile_add_on_setting_service.py +21 -0
  339. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/mobile_app_service.py +240 -0
  340. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/multi_language_translations.py +15 -0
  341. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nature_of_assessees.py +15 -0
  342. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nature_of_assessees_service.py +21 -0
  343. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/ncm_codes_setup.py +15 -0
  344. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/ncm_codes_setup_service.py +21 -0
  345. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nf_models.py +15 -0
  346. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nf_models_service.py +21 -0
  347. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nf_tax_categories.py +15 -0
  348. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nf_tax_categories_service.py +21 -0
  349. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nota_fiscal_cfop.py +15 -0
  350. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nota_fiscal_cst.py +15 -0
  351. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/nota_fiscal_usage.py +15 -0
  352. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/occurrence_codes.py +15 -0
  353. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/occurrence_codes_service.py +21 -0
  354. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/orders.py +15 -0
  355. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/orders_service.py +94 -0
  356. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/packages_types.py +15 -0
  357. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/partners_setups.py +15 -0
  358. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/partners_setups_service.py +21 -0
  359. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_blocks.py +15 -0
  360. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_blocks_service.py +21 -0
  361. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_calculation_service.py +37 -0
  362. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_drafts.py +15 -0
  363. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_reason_code_service.py +21 -0
  364. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_reason_codes.py +15 -0
  365. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_run_export.py +15 -0
  366. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_terms_types.py +15 -0
  367. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/payment_terms_types_service.py +28 -0
  368. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/pick_lists.py +15 -0
  369. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/pick_lists_service.py +78 -0
  370. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/pos_daily_summary.py +15 -0
  371. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/predefined_texts.py +15 -0
  372. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/predefined_texts_service.py +21 -0
  373. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/price_lists.py +15 -0
  374. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/product_trees.py +15 -0
  375. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/production_orders.py +15 -0
  376. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/profit_centers.py +15 -0
  377. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/profit_centers_service.py +21 -0
  378. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/project_management_configuration_service.py +333 -0
  379. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/project_management_service.py +104 -0
  380. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/project_management_time_sheet.py +15 -0
  381. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/project_managements.py +15 -0
  382. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/projects.py +15 -0
  383. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/projects_service.py +21 -0
  384. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_credit_notes.py +15 -0
  385. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_credit_notes_service.py +85 -0
  386. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_delivery_notes.py +15 -0
  387. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_delivery_notes_service.py +85 -0
  388. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_down_payments.py +15 -0
  389. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_down_payments_service.py +70 -0
  390. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_invoices.py +15 -0
  391. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_invoices_service.py +85 -0
  392. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_orders.py +15 -0
  393. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_orders_service.py +69 -0
  394. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_quotations.py +15 -0
  395. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_quotations_service.py +70 -0
  396. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_request_service.py +68 -0
  397. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_requests.py +15 -0
  398. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_returns.py +15 -0
  399. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_returns_service.py +85 -0
  400. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/purchase_tax_invoices.py +15 -0
  401. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/qr_code_service.py +33 -0
  402. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/query_auth_groups.py +15 -0
  403. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/query_categories.py +15 -0
  404. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/query_service.py +29 -0
  405. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/queue.py +15 -0
  406. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/quotations.py +15 -0
  407. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/quotations_service.py +69 -0
  408. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/recurring_transaction_service.py +67 -0
  409. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/relationships.py +15 -0
  410. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/report_filter.py +15 -0
  411. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/report_filter_service.py +30 -0
  412. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/report_layouts_service.py +237 -0
  413. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/report_types.py +15 -0
  414. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/report_types_service.py +21 -0
  415. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resource_capacities.py +15 -0
  416. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resource_capacities_service.py +34 -0
  417. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resource_groups.py +15 -0
  418. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resource_groups_service.py +21 -0
  419. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resource_properties.py +15 -0
  420. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resource_properties_service.py +21 -0
  421. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resources.py +15 -0
  422. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/resources_service.py +21 -0
  423. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/retorno_codes.py +15 -0
  424. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/retorno_codes_service.py +21 -0
  425. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/return_request.py +15 -0
  426. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/return_request_service.py +69 -0
  427. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/returns.py +15 -0
  428. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/returns_service.py +85 -0
  429. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/route_stages.py +15 -0
  430. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/route_stages_service.py +21 -0
  431. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_forecast.py +15 -0
  432. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunities.py +15 -0
  433. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_competitors_setup.py +15 -0
  434. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_competitors_setup_service.py +21 -0
  435. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_interests_setup.py +15 -0
  436. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_interests_setup_service.py +21 -0
  437. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_reasons_setup.py +15 -0
  438. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_reasons_setup_service.py +21 -0
  439. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_sources_setup.py +15 -0
  440. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_opportunity_sources_setup_service.py +21 -0
  441. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_persons.py +15 -0
  442. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_stages.py +15 -0
  443. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_tax_authorities.py +15 -0
  444. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_tax_authorities_types.py +15 -0
  445. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_tax_codes.py +15 -0
  446. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sales_tax_invoices.py +15 -0
  447. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sbo_bob_service.py +89 -0
  448. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sections.py +15 -0
  449. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/sections_service.py +21 -0
  450. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/self_credit_memo_service.py +69 -0
  451. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/self_credit_memos.py +15 -0
  452. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/self_invoice_service.py +69 -0
  453. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/self_invoices.py +15 -0
  454. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/serial_number_details.py +15 -0
  455. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/series_service.py +305 -0
  456. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_origins.py +15 -0
  457. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_origins_service.py +21 -0
  458. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_problem_sub_types.py +15 -0
  459. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_problem_sub_types_service.py +21 -0
  460. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_problem_types.py +15 -0
  461. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_problem_types_service.py +21 -0
  462. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_solution_status.py +15 -0
  463. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_solution_status_service.py +21 -0
  464. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_status.py +15 -0
  465. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_status_service.py +21 -0
  466. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_types.py +15 -0
  467. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_call_types_service.py +21 -0
  468. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_calls.py +15 -0
  469. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_contracts.py +15 -0
  470. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_groups.py +15 -0
  471. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_groups_service.py +21 -0
  472. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/service_tax_posting_service.py +36 -0
  473. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/shipping_types.py +15 -0
  474. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/short_link_mappings_service.py +26 -0
  475. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/special_prices.py +15 -0
  476. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/states.py +15 -0
  477. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/states_service.py +21 -0
  478. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/stock_takings.py +15 -0
  479. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/stock_transfer_draft_service.py +34 -0
  480. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/stock_transfer_drafts.py +15 -0
  481. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/stock_transfer_service.py +43 -0
  482. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/stock_transfers.py +15 -0
  483. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/target_groups.py +15 -0
  484. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/target_groups_service.py +21 -0
  485. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tax_code_determinations.py +15 -0
  486. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tax_code_determinations_service.py +21 -0
  487. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tax_code_determinations_tcd.py +15 -0
  488. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tax_code_determinations_tcd_service.py +21 -0
  489. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tax_invoice_report.py +15 -0
  490. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tax_web_sites.py +15 -0
  491. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tax_web_sites_service.py +27 -0
  492. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/teams.py +15 -0
  493. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/termination_reason.py +15 -0
  494. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/termination_reason_service.py +21 -0
  495. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/territories.py +15 -0
  496. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tracking_notes.py +15 -0
  497. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tracking_notes_service.py +21 -0
  498. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/transaction_codes.py +15 -0
  499. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/transaction_codes_service.py +21 -0
  500. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/transportation_document.py +15 -0
  501. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tsr_exceptional_event_service.py +21 -0
  502. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/tsr_exceptional_events.py +15 -0
  503. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/unit_of_measurement_groups.py +15 -0
  504. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/unit_of_measurement_groups_service.py +21 -0
  505. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/unit_of_measurements.py +15 -0
  506. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/unit_of_measurements_service.py +21 -0
  507. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_default_groups.py +15 -0
  508. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_fields_md.py +15 -0
  509. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_keys_md.py +15 -0
  510. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_languages.py +15 -0
  511. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_menu_service.py +103 -0
  512. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_objects_md.py +15 -0
  513. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_permission_tree.py +15 -0
  514. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_queries.py +15 -0
  515. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/user_tables_md.py +15 -0
  516. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/users.py +15 -0
  517. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/users_service.py +21 -0
  518. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/value_mapping.py +15 -0
  519. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/value_mapping_communication.py +15 -0
  520. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/value_mapping_service.py +64 -0
  521. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/vat_groups.py +15 -0
  522. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/vendor_payments.py +15 -0
  523. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/w_tax_type_code_service.py +21 -0
  524. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/w_tax_type_codes.py +15 -0
  525. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/warehouse_locations.py +15 -0
  526. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/warehouse_sublevel_codes.py +15 -0
  527. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/warehouse_sublevel_codes_service.py +21 -0
  528. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/warehouses.py +15 -0
  529. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_bookmark_tile_service.py +21 -0
  530. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_bookmark_tiles.py +15 -0
  531. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_dashboard_service.py +21 -0
  532. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_dashboards.py +15 -0
  533. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_form_setting_service.py +21 -0
  534. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_form_settings.py +15 -0
  535. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_launchpad_service.py +21 -0
  536. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_launchpads.py +15 -0
  537. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_listview_filter_service.py +21 -0
  538. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_listview_filters.py +15 -0
  539. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_notification_service.py +21 -0
  540. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_notifications.py +15 -0
  541. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_preference_service.py +21 -0
  542. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_preferences.py +15 -0
  543. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_recent_activities.py +15 -0
  544. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_recent_activity_service.py +21 -0
  545. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_variant_group_service.py +21 -0
  546. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_variant_groups.py +15 -0
  547. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_variant_service.py +21 -0
  548. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/web_client_variants.py +15 -0
  549. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/weight_measures.py +15 -0
  550. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/withholding_tax_codes.py +15 -0
  551. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/witholding_tax_definition.py +15 -0
  552. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/wizard_payment_methods.py +15 -0
  553. b1sl_python-0.1.0/src/b1sl/b1sl/resources/_generated/workflow_task_service.py +47 -0
  554. b1sl_python-0.1.0/src/b1sl/b1sl/resources/async_base.py +60 -0
  555. b1sl_python-0.1.0/src/b1sl/b1sl/resources/base.py +159 -0
  556. b1sl_python-0.1.0/src/b1sl/b1sl/resources/udo.py +78 -0
  557. b1sl_python-0.1.0/src/b1sl/b1sl/rest_adapter.py +351 -0
  558. b1sl_python-0.1.0/src/b1sl/b1sl/testing.py +24 -0
  559. b1sl_python-0.1.0/src/b1sl/b1sl/tests/__init__.py +0 -0
  560. b1sl_python-0.1.0/src/b1sl/b1sl/tests/test_01_settings.py +60 -0
  561. b1sl_python-0.1.0/src/b1sl/b1sl/tests/test_02_rest_adapter.py +177 -0
  562. b1sl_python-0.1.0/src/b1sl/b1sl/tests/test_03_items_endpoint.py +172 -0
  563. b1sl_python-0.1.0/src/b1sl/b1sl/tests/test_04_serialnumberdetails_endpoint.py +181 -0
  564. b1sl_python-0.1.0/src/b1sl/b1sl/tests/test_observability.py +153 -0
  565. b1sl_python-0.1.0/src/b1sl/b1sl/tests/test_utils.py +24 -0
  566. b1sl_python-0.1.0/src/b1sl/contrib/__init__.py +0 -0
  567. b1sl_python-0.1.0/src/b1sl/contrib/django/__init__.py +15 -0
  568. b1sl_python-0.1.0/src/b1sl/contrib/django/base.py +89 -0
  569. b1sl_python-0.1.0/src/b1sl/contrib/django/odata_decode_middleware.py +14 -0
  570. b1sl_python-0.1.0/src/b1sl/contrib/django/odata_transform_url_middleware.py +15 -0
  571. b1sl_python-0.1.0/src/b1sl/py.typed +0 -0
  572. b1sl_python-0.1.0/src/b1sl/saphdb/__init__.py +19 -0
  573. b1sl_python-0.1.0/src/b1sl/saphdb/adapter.py +24 -0
  574. b1sl_python-0.1.0/src/b1sl/saphdb/client.py +50 -0
  575. b1sl_python-0.1.0/src/b1sl/saphdb/config.py +68 -0
  576. b1sl_python-0.1.0/src/b1sl/saphdb/endpoints/serialnumberdetailodbc.py +100 -0
  577. b1sl_python-0.1.0/src/b1sl/saphdb/exceptions/exceptions.py +19 -0
  578. b1sl_python-0.1.0/src/b1sl/saphdb/main.py +18 -0
  579. b1sl_python-0.1.0/src/b1sl/saphdb/models/result.py +18 -0
  580. b1sl_python-0.1.0/src/b1sl/saphdb/models/serial.py +37 -0
  581. b1sl_python-0.1.0/src/b1sl/saphdb/odbc_adapter.py +220 -0
  582. b1sl_python-0.1.0/src/b1sl/saphdb/tests/__init__.py +0 -0
  583. b1sl_python-0.1.0/src/b1sl/saphdb/tests/test_01_settings.py +37 -0
  584. b1sl_python-0.1.0/src/b1sl/saphdb/tests/test_02_odbc_adapter.py +96 -0
  585. b1sl_python-0.1.0/src/b1sl/saphdb/tests/test_04_serialnumberdetails_endpoint.py +131 -0
  586. b1sl_python-0.1.0/tests/__init__.py +0 -0
  587. b1sl_python-0.1.0/tests/conftest.py +167 -0
  588. b1sl_python-0.1.0/tests/fakes/__init__.py +0 -0
  589. b1sl_python-0.1.0/tests/fakes/fake_rest_adapter.py +174 -0
  590. b1sl_python-0.1.0/tests/fixtures/__init__.py +0 -0
  591. b1sl_python-0.1.0/tests/fixtures/mock_responses/items_list.json +15 -0
  592. b1sl_python-0.1.0/tests/fixtures/mock_responses/items_single.json +6 -0
  593. b1sl_python-0.1.0/tests/fixtures/test_data.py +20 -0
  594. b1sl_python-0.1.0/tests/integration/__init__.py +0 -0
  595. b1sl_python-0.1.0/tests/integration/cassettes/test_items_real/test_get_item_real.yaml +547 -0
  596. b1sl_python-0.1.0/tests/integration/cassettes/test_items_real/test_list_items_real.yaml +2537 -0
  597. b1sl_python-0.1.0/tests/integration/conftest.py +69 -0
  598. b1sl_python-0.1.0/tests/integration/test_items_real.py +32 -0
  599. b1sl_python-0.1.0/tests/test_async_adapter.py +114 -0
  600. b1sl_python-0.1.0/tests/test_b1sl_adapter.py +159 -0
  601. b1sl_python-0.1.0/tests/test_middleware.py +37 -0
  602. b1sl_python-0.1.0/tests/test_saphdb_adapter.py +40 -0
  603. b1sl_python-0.1.0/tests/unit/__init__.py +0 -0
  604. b1sl_python-0.1.0/tests/unit/mocks/items_list.json +12 -0
  605. b1sl_python-0.1.0/tests/unit/mocks/items_single.json +6 -0
  606. b1sl_python-0.1.0/tests/unit/test_items_mock.py +82 -0
  607. b1sl_python-0.1.0/tests/unit/test_rest_adapter.py +69 -0
  608. b1sl_python-0.1.0/tests/unit/test_service_calls.py +74 -0
  609. b1sl_python-0.1.0/uv.lock +821 -0
@@ -0,0 +1,29 @@
1
+ # SAP B1 - Configuración de Credenciales (Capa 2)
2
+ # COPIAR ESTE ARCHIVO A .env.test PARA PRUEBAS REALES
3
+
4
+ # Service Layer
5
+ B1SL_BASE_URL=https://localhost:50000/b1s/v2
6
+ B1SL_COMPANY_DB=SBODemoMX
7
+ B1SL_USERNAME=manager
8
+ B1SL_PASSWORD=sap
9
+ B1SL_SSL_VERIFY=0
10
+
11
+ # Entorno de ejecución del SDK
12
+ # Valores válidos: dev | test | prod
13
+ # - dev → logs en texto legible (default)
14
+ # - test → igual a dev, indica aislamiento de pruebas
15
+ # - prod → logs en JSON estructurado (para ELK, Datadog, etc.)
16
+ B1SL_ENV=dev
17
+
18
+ # Control de ejecución de tests de integración
19
+ # 1 = Ejecuta integración real (tests/integration/)
20
+ # 0 = Solo mocks (tests/unit/) o salta los marcados con @pytest.mark.integration
21
+ SAP_B1_INTEGRATION=0
22
+
23
+ # --- Advanced Tuning (Opcional) ---
24
+ # B1SL_REUSE_TOKEN=1
25
+ # B1SL_TOKEN_TIMEOUT=900
26
+ # B1SL_MAX_PAGE_SIZE=20
27
+ # B1SL_ETAG_CACHE_SIZE=256
28
+ # B1SL_CONNECT_TIMEOUT=10
29
+ # B1SL_READ_TIMEOUT=60
@@ -0,0 +1,229 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ # Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ # poetry.lock
109
+ # poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ # pdm.lock
116
+ # pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ # pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # Redis
135
+ *.rdb
136
+ *.aof
137
+ *.pid
138
+
139
+ # RabbitMQ
140
+ mnesia/
141
+ rabbitmq/
142
+ rabbitmq-data/
143
+
144
+ # ActiveMQ
145
+ activemq-data/
146
+
147
+ # SageMath parsed files
148
+ *.sage.py
149
+
150
+ # Environments
151
+ .env
152
+ .envrc
153
+ .venv
154
+ env/
155
+ venv/
156
+ ENV/
157
+ env.bak/
158
+ venv.bak/
159
+
160
+ # Spyder project settings
161
+ .spyderproject
162
+ .spyproject
163
+
164
+ # Rope project settings
165
+ .ropeproject
166
+
167
+ # mkdocs documentation
168
+ /site
169
+
170
+ # mypy
171
+ .mypy_cache/
172
+ .dmypy.json
173
+ dmypy.json
174
+
175
+ # Pyre type checker
176
+ .pyre/
177
+
178
+ # pytype static type analyzer
179
+ .pytype/
180
+
181
+ # Cython debug symbols
182
+ cython_debug/
183
+
184
+ # PyCharm
185
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
188
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
+ # .idea/
190
+
191
+ # Abstra
192
+ # Abstra is an AI-powered process automation framework.
193
+ # Ignore directories containing user credentials, local state, and settings.
194
+ # Learn more at https://abstra.io/docs
195
+ .abstra/
196
+
197
+ # Visual Studio Code
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
+ # you could uncomment the following to ignore the entire vscode folder
202
+ # .vscode/
203
+
204
+ # Ruff stuff:
205
+ .ruff_cache/
206
+
207
+ # PyPI configuration file
208
+ .pypirc
209
+
210
+ # Marimo
211
+ marimo/_static/
212
+ marimo/_lsp/
213
+ __marimo__/
214
+
215
+ # Streamlit
216
+ .streamlit/secrets.toml
217
+ # SAP B1 Test Secrets
218
+ .env.test
219
+
220
+ # SAP Metadata (Sensitive/Real info)
221
+ metadata/**/*.real.xml
222
+ metadata/**/*.real.json
223
+
224
+ # Vscode
225
+ .vscode/
226
+
227
+ # Agent specific
228
+ .agents/
229
+ skills-lock.json
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Eliceo Guzman
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,59 @@
1
+ # SAP B1 Python SDK - Testing & Development
2
+
3
+ .PHONY: help test test-vcr test-record test-demo test-ci coverage-html lint clean
4
+
5
+ # Default variables
6
+ PYTHONPATH := src:.
7
+ PYTEST := .venv/bin/pytest
8
+ VENV := .venv
9
+
10
+ help:
11
+ @echo "Available commands:"
12
+ @echo " make test - Run unit tests only (Fast, No network)"
13
+ @echo " make test-vcr - Run integration tests with recorded cassettes (Offline)"
14
+ @echo " make test-record - Record new VCR cassettes against a real SAP server (Requires .env)"
15
+ @echo " make test-demo - Live smoke tests against SAP demo server (APP_ENV=demo)"
16
+ @echo " make test-ci - Full test suite + coverage (for GitHub Actions)"
17
+ @echo " make coverage-html - Run test-ci and open visual HTML gap analysis"
18
+ @echo " make lint - Run static analysis (Ruff + Mypy)"
19
+ @echo " make clean - Remove cache and temporary files"
20
+
21
+ test:
22
+ @echo "🚀 Running unit tests (Layer 1)..."
23
+ PYTHONPATH=$(PYTHONPATH) $(PYTEST) -m "not (integration or vcr)"
24
+
25
+ test-vcr:
26
+ @echo "📽️ Running integration tests with VCR cassettes (Layer 2)..."
27
+ PYTHONPATH=$(PYTHONPATH) $(PYTEST) -m "vcr" --record-mode=none
28
+
29
+ test-record:
30
+ @if [ ! -f .env ]; then echo "❌ Error: .env file required for recording."; exit 1; fi
31
+ @echo "🔴 Recording new cassettes... (Requires connection to SAP)"
32
+ PYTHONPATH=$(PYTHONPATH) $(PYTEST) -m "vcr" --record-mode=all
33
+
34
+ test-demo:
35
+ @if [ ! -f .env ]; then echo "❌ Error: .env file required for demo tests."; exit 1; fi
36
+ @echo "🏗️ Running live smoke tests against demo server..."
37
+ APP_ENV=demo PYTHONPATH=$(PYTHONPATH) $(PYTEST) -m "integration"
38
+
39
+ test-ci:
40
+ @echo "⛓️ Running full CI suite (Unit + VCR + Coverage)..."
41
+ PYTHONPATH=$(PYTHONPATH) $(PYTEST) -m "not integration" --cov=src --cov-report=xml --cov-report=term
42
+
43
+ coverage-html: test-ci
44
+ @echo "📊 Generating visual coverage report..."
45
+ .venv/bin/coverage html -d htmlcov/
46
+ @if [ "$$(uname)" = "Darwin" ]; then open htmlcov/index.html; \
47
+ elif [ "$$(expr substr $$(uname -s) 1 5)" = "Linux" ]; then xdg-open htmlcov/index.html; \
48
+ else echo "Open htmlcov/index.html manually to see report."; fi
49
+
50
+ lint:
51
+ @echo "🧹 Linting code..."
52
+ $(VENV)/bin/ruff check src tests
53
+ $(VENV)/bin/mypy src
54
+
55
+ clean:
56
+ @echo "🧹 Cleaning temporary files..."
57
+ rm -rf .pytest_cache .mypy_cache .coverage htmlcov .ruff_cache coverage.xml
58
+ find . -type d -name "__pycache__" -exec rm -rf {} +
59
+ find . -type f -name "*.pyc" -delete
@@ -0,0 +1,169 @@
1
+ Metadata-Version: 2.4
2
+ Name: b1sl-python
3
+ Version: 0.1.0
4
+ Summary: A framework-agnostic Python SDK for SAP Business One Service Layer and SAP HANA. (Unofficial)
5
+ Author: Eliceo Guzman
6
+ License: MIT
7
+ License-File: LICENSE
8
+ Keywords: erp,hana,odata,sap,sap-b1,service-layer
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Typing :: Typed
15
+ Requires-Python: <3.13,>=3.11
16
+ Requires-Dist: httpx<1,>=0.28.1
17
+ Requires-Dist: pydantic<3,>=2.0.0
18
+ Requires-Dist: python-dotenv>=1.2.2
19
+ Provides-Extra: all
20
+ Requires-Dist: b1sl[django,generator,hana]; extra == 'all'
21
+ Provides-Extra: dev
22
+ Requires-Dist: mypy; extra == 'dev'
23
+ Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
24
+ Requires-Dist: pytest-cov; extra == 'dev'
25
+ Requires-Dist: pytest-django; extra == 'dev'
26
+ Requires-Dist: pytest-recording>=0.13.4; extra == 'dev'
27
+ Requires-Dist: pytest<9.0,>=8.0; extra == 'dev'
28
+ Requires-Dist: python-dotenv>=1.2.2; extra == 'dev'
29
+ Requires-Dist: responses>=0.26.0; extra == 'dev'
30
+ Requires-Dist: respx>=0.22.0; extra == 'dev'
31
+ Requires-Dist: ruff; extra == 'dev'
32
+ Provides-Extra: django
33
+ Requires-Dist: django<6,>=4.2; extra == 'django'
34
+ Provides-Extra: generator
35
+ Requires-Dist: beautifulsoup4>=4.14.3; extra == 'generator'
36
+ Requires-Dist: lxml>=6.0.2; extra == 'generator'
37
+ Provides-Extra: hana
38
+ Requires-Dist: hdbcli<3,>=2.20.0; extra == 'hana'
39
+ Description-Content-Type: text/markdown
40
+
41
+ # b1sl
42
+ ### Modern, async-first Python SDK for SAP Business One Service Layer.
43
+
44
+ ![b1sl Banner](docs/assets/hero_banner.png)
45
+
46
+ [![Python Version](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
47
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://opensource.org/licenses/MIT)
48
+ [![Pydantic v2](https://img.shields.io/badge/Pydantic-v2-orange.svg)](https://docs.pydantic.dev/)
49
+ [![Built with httpx](https://img.shields.io/badge/HTTP-httpx-blueviolet.svg)](https://www.python-httpx.org/)
50
+
51
+ b1sl is a high-performance SDK designed for the SAP B1 Service Layer, focusing on concurrency, type safety, and efficient session management.
52
+
53
+ ---
54
+
55
+ ## Key Features
56
+
57
+ * **Async-First Architecture**: Built on top of `httpx` for non-blocking I/O.
58
+ * **Type Safety**: Full Pydantic v2 integration for all SAP entities.
59
+ * **Smart Session Management**: Automatic 401 re-authentication with internal locking to prevent license exhaustion.
60
+ * **Session Hydration**: Reuse existing `B1SESSION` IDs across serverless functions or Temporal activities.
61
+ * **Optimistic Concurrency**: Automated ETag handling with smart cache invalidation on 412 conflicts.
62
+ * **Observability**: Structured logging and event hooks for performance monitoring.
63
+
64
+ ---
65
+
66
+ ## Installation
67
+
68
+ ```bash
69
+ # Using pip
70
+ pip install b1sl
71
+
72
+ # Using uv
73
+ uv add b1sl
74
+ ```
75
+
76
+ ---
77
+
78
+ ## Quick Start
79
+
80
+ ```python
81
+ import asyncio
82
+ from b1sl.b1sl import AsyncB1Client, B1Config
83
+
84
+ async def main():
85
+ config = B1Config.from_env()
86
+
87
+ async with AsyncB1Client(config) as b1:
88
+ # Full type hints for items and major entities
89
+ item = await b1.items.get("C1000")
90
+ print(f"Item: {item.ItemName}")
91
+
92
+ if __name__ == "__main__":
93
+ asyncio.run(main())
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Advanced Usage: FastAPI Integration
99
+
100
+ b1sl is optimized for modern web frameworks. We recommend using the Lifespan pattern to share a single connection pool:
101
+
102
+ ```python
103
+ from fastapi import FastAPI
104
+ from contextlib import asynccontextmanager
105
+ from b1sl.b1sl import AsyncB1Client, B1Config
106
+
107
+ b1_client = None
108
+
109
+ @asynccontextmanager
110
+ async def lifespan(app: FastAPI):
111
+ global b1_client
112
+ config = B1Config.from_env()
113
+ b1_client = AsyncB1Client(config)
114
+ await b1_client.connect()
115
+ yield
116
+ await b1_client.aclose()
117
+
118
+ app = FastAPI(lifespan=lifespan)
119
+
120
+ @app.get("/items/{item_code}")
121
+ async def get_item(item_code: str):
122
+ return await b1_client.items.get(item_code)
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Architecture Overview
128
+
129
+ | Feature | Implementation | Benefit |
130
+ | :--- | :--- | :--- |
131
+ | **HTTP Engine** | `httpx` (Async/Sync) | Superior performance & timeouts |
132
+ | **Data Models** | `Pydantic v2` | Instant validation & IDE autocomplete |
133
+ | **Auth** | Auto-retry 401 & Hydration | Zero-downtime session management |
134
+ | **Concurrency** | Shared Connection Pool | Prevents SAP License Exhaustion |
135
+
136
+ ---
137
+
138
+ ## Why b1sl?
139
+
140
+ In production environments, SAP Business One Service Layer is sensitive to session limits and licensing costs. Traditional wrappers often create redundant connections, leading to overhead and frequent auth failures.
141
+
142
+ **b1sl** addresses these issues through:
143
+ 1. **Session Persistence**: Maintaining long-lived sessions and performing atomic re-authentication.
144
+ 2. **Resource Efficiency**: Validated Pydantic models reduce runtime exceptions and memory footprint.
145
+ 3. **Concurrency Control**: Internal locking ensures that concurrent requests wait for a single login attempt instead of triggering multiple auth calls.
146
+
147
+ ---
148
+
149
+ ## SAP Compatibility
150
+
151
+ This SDK is optimized for modern Service Layer environments and defaults to **v2 (OData V4)**.
152
+
153
+ * **Verified Baseline**: Service Layer **1.27** (SAP 10.0 FP 2405).
154
+ * **Minimum for ETags**: Requires Service Layer **1.21+** (March 2021).
155
+ * **Backward Compatibility**: Supports **v1 (OData V2)** through client configuration.
156
+
157
+ For a detailed history of Service Layer features and specific version support, see the [Full Compatibility Timeline](docs/01-compatibility.md).
158
+
159
+ ---
160
+
161
+ ## Contributing
162
+
163
+ Contributions are welcome. Please open an issue to discuss proposed changes before submitting a pull request.
164
+
165
+ ---
166
+
167
+ ## License
168
+
169
+ MIT © 2026.
@@ -0,0 +1,129 @@
1
+ # b1sl
2
+ ### Modern, async-first Python SDK for SAP Business One Service Layer.
3
+
4
+ ![b1sl Banner](docs/assets/hero_banner.png)
5
+
6
+ [![Python Version](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://opensource.org/licenses/MIT)
8
+ [![Pydantic v2](https://img.shields.io/badge/Pydantic-v2-orange.svg)](https://docs.pydantic.dev/)
9
+ [![Built with httpx](https://img.shields.io/badge/HTTP-httpx-blueviolet.svg)](https://www.python-httpx.org/)
10
+
11
+ b1sl is a high-performance SDK designed for the SAP B1 Service Layer, focusing on concurrency, type safety, and efficient session management.
12
+
13
+ ---
14
+
15
+ ## Key Features
16
+
17
+ * **Async-First Architecture**: Built on top of `httpx` for non-blocking I/O.
18
+ * **Type Safety**: Full Pydantic v2 integration for all SAP entities.
19
+ * **Smart Session Management**: Automatic 401 re-authentication with internal locking to prevent license exhaustion.
20
+ * **Session Hydration**: Reuse existing `B1SESSION` IDs across serverless functions or Temporal activities.
21
+ * **Optimistic Concurrency**: Automated ETag handling with smart cache invalidation on 412 conflicts.
22
+ * **Observability**: Structured logging and event hooks for performance monitoring.
23
+
24
+ ---
25
+
26
+ ## Installation
27
+
28
+ ```bash
29
+ # Using pip
30
+ pip install b1sl
31
+
32
+ # Using uv
33
+ uv add b1sl
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Quick Start
39
+
40
+ ```python
41
+ import asyncio
42
+ from b1sl.b1sl import AsyncB1Client, B1Config
43
+
44
+ async def main():
45
+ config = B1Config.from_env()
46
+
47
+ async with AsyncB1Client(config) as b1:
48
+ # Full type hints for items and major entities
49
+ item = await b1.items.get("C1000")
50
+ print(f"Item: {item.ItemName}")
51
+
52
+ if __name__ == "__main__":
53
+ asyncio.run(main())
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Advanced Usage: FastAPI Integration
59
+
60
+ b1sl is optimized for modern web frameworks. We recommend using the Lifespan pattern to share a single connection pool:
61
+
62
+ ```python
63
+ from fastapi import FastAPI
64
+ from contextlib import asynccontextmanager
65
+ from b1sl.b1sl import AsyncB1Client, B1Config
66
+
67
+ b1_client = None
68
+
69
+ @asynccontextmanager
70
+ async def lifespan(app: FastAPI):
71
+ global b1_client
72
+ config = B1Config.from_env()
73
+ b1_client = AsyncB1Client(config)
74
+ await b1_client.connect()
75
+ yield
76
+ await b1_client.aclose()
77
+
78
+ app = FastAPI(lifespan=lifespan)
79
+
80
+ @app.get("/items/{item_code}")
81
+ async def get_item(item_code: str):
82
+ return await b1_client.items.get(item_code)
83
+ ```
84
+
85
+ ---
86
+
87
+ ## Architecture Overview
88
+
89
+ | Feature | Implementation | Benefit |
90
+ | :--- | :--- | :--- |
91
+ | **HTTP Engine** | `httpx` (Async/Sync) | Superior performance & timeouts |
92
+ | **Data Models** | `Pydantic v2` | Instant validation & IDE autocomplete |
93
+ | **Auth** | Auto-retry 401 & Hydration | Zero-downtime session management |
94
+ | **Concurrency** | Shared Connection Pool | Prevents SAP License Exhaustion |
95
+
96
+ ---
97
+
98
+ ## Why b1sl?
99
+
100
+ In production environments, SAP Business One Service Layer is sensitive to session limits and licensing costs. Traditional wrappers often create redundant connections, leading to overhead and frequent auth failures.
101
+
102
+ **b1sl** addresses these issues through:
103
+ 1. **Session Persistence**: Maintaining long-lived sessions and performing atomic re-authentication.
104
+ 2. **Resource Efficiency**: Validated Pydantic models reduce runtime exceptions and memory footprint.
105
+ 3. **Concurrency Control**: Internal locking ensures that concurrent requests wait for a single login attempt instead of triggering multiple auth calls.
106
+
107
+ ---
108
+
109
+ ## SAP Compatibility
110
+
111
+ This SDK is optimized for modern Service Layer environments and defaults to **v2 (OData V4)**.
112
+
113
+ * **Verified Baseline**: Service Layer **1.27** (SAP 10.0 FP 2405).
114
+ * **Minimum for ETags**: Requires Service Layer **1.21+** (March 2021).
115
+ * **Backward Compatibility**: Supports **v1 (OData V2)** through client configuration.
116
+
117
+ For a detailed history of Service Layer features and specific version support, see the [Full Compatibility Timeline](docs/01-compatibility.md).
118
+
119
+ ---
120
+
121
+ ## Contributing
122
+
123
+ Contributions are welcome. Please open an issue to discuss proposed changes before submitting a pull request.
124
+
125
+ ---
126
+
127
+ ## License
128
+
129
+ MIT © 2026.
@@ -0,0 +1,23 @@
1
+ # Roadmap / TODOs (Target: v0.1.x+)
2
+
3
+ ## 1. Dynamic UDF (User Defined Fields) Handling
4
+ **Context:** Currently, UDFs (fields starting with `U_`) are either filtered out or treated as raw `str/Any` through Pydantic's `extra="allow"`. If a developer wants strict validation, they must create a custom subclass extending the generated entity.
5
+ **Proposal:**
6
+ - Implement an interceptor at the Pydantic Base model level that automatically parses unknown fields starting with `U_` into a special `udfs` dictionary property.
7
+ - This avoids needing to declare a new class just to serialize/deserialize basic UDFs while keeping the core metadata clean.
8
+
9
+ ## 2. Transparent Pagination Generators
10
+ **Context:** The API returns `odata.nextLink` for large recordsets. Currently, the user likely needs to manually inspect `result.next_link` and make a subsequent request.
11
+ **Proposal:**
12
+ - Add an `async for` generator (e.g., `client.items.stream()`) that internally handles fetching the next pages automatically as the developer iterates over the results.
13
+
14
+ ## 3. $batch Request Support
15
+ **Context:** SAP B1 Service Layer supports OData `$batch` requests to execute multiple creates/updates in a single HTTP transaction.
16
+ **Proposal:**
17
+ - Implement a `BatchBuilder` utility that allows queuing operations and submitting them together to drastically reduce HTTP overhead for bulk sync processes.
18
+
19
+ ## 4. OData Query Builder Enhancements
20
+ **Context:** We have constants for fields (`F.Item.item_code`), but filter construction might still rely on strings (`$filter=ItemCode eq 'A001'`).
21
+ **Proposal:**
22
+ - Allow pythonic operator overloading on the `F` schema constants to automatically build OData strings.
23
+ - Example: `client.items.filter(F.Item.item_code == 'A001' & F.Item.valid == 'tYES')`
@@ -0,0 +1,16 @@
1
+ {
2
+ "test_data": {
3
+ "items": {
4
+ "simple": "9990140071261",
5
+ "batch": "BATCH-001",
6
+ "service": "SERV-002"
7
+ },
8
+ "customers": {
9
+ "retail": "C20000",
10
+ "wholesale": "C30000"
11
+ },
12
+ "warehouses": {
13
+ "main": "01"
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "test_data": {
3
+ "items": {
4
+ "simple": "ITEM-001",
5
+ "batch": "BATCH-001",
6
+ "service": "SERV-002"
7
+ },
8
+ "customers": {
9
+ "retail": "C10000",
10
+ "wholesale": "C20000"
11
+ },
12
+ "warehouses": {
13
+ "main": "01"
14
+ }
15
+ }
16
+ }