click_and_drop_api 3.0.2__tar.gz → 3.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. {click_and_drop_api-3.0.2/click_and_drop_api.egg-info → click_and_drop_api-3.0.4}/PKG-INFO +1 -1
  2. click_and_drop_api-3.0.4/click_and_drop_api/examples/mock-label.pdf +0 -0
  3. click_and_drop_api-3.0.4/click_and_drop_api/examples/mock-manifest.pdf +0 -0
  4. click_and_drop_api-3.0.4/click_and_drop_api/examples/oba_full_workflow.py +138 -0
  5. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/shipping_countries.py +6 -1
  6. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/api.py +15 -42
  7. click_and_drop_api-3.0.4/click_and_drop_api/simple/base.py +505 -0
  8. click_and_drop_api-3.0.4/click_and_drop_api/simple/compatibility.py +8 -0
  9. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/mock.py +54 -17
  10. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/package_shipping_option.py +40 -0
  11. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/types.py +13 -0
  12. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4/click_and_drop_api.egg-info}/PKG-INFO +1 -1
  13. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api.egg-info/SOURCES.txt +6 -0
  14. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/pyproject.toml +4 -1
  15. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_mock_api.py +58 -63
  16. click_and_drop_api-3.0.4/test/test_mock_api_manifest.py +51 -0
  17. click_and_drop_api-3.0.4/test/test_mock_api_update_orders.py +207 -0
  18. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_shipping_option_model.py +15 -0
  19. click_and_drop_api-3.0.2/click_and_drop_api/simple/base.py +0 -228
  20. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/LICENSE +0 -0
  21. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/MANIFEST.in +0 -0
  22. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/README.md +0 -0
  23. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/__init__.py +0 -0
  24. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/api/__init__.py +0 -0
  25. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/api/labels_api.py +0 -0
  26. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/api/manifests_api.py +0 -0
  27. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/api/orders_api.py +0 -0
  28. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/api/version_api.py +0 -0
  29. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/api_client.py +0 -0
  30. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/api_response.py +0 -0
  31. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/configuration.py +0 -0
  32. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/__init__.py +0 -0
  33. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/__main__.py +0 -0
  34. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/check_oba.py +0 -0
  35. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/create_order.py +0 -0
  36. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/generate_label.py +0 -0
  37. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/package_size_and_cost.py +0 -0
  38. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/view_order.py +0 -0
  39. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/view_specific_orders.py +0 -0
  40. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/examples/view_version.py +0 -0
  41. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/exceptions.py +0 -0
  42. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/__init__.py +0 -0
  43. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/address_request.py +0 -0
  44. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/billing_details_request.py +0 -0
  45. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/create_order_error_response.py +0 -0
  46. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/create_order_label_error_response.py +0 -0
  47. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/create_order_request.py +0 -0
  48. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/create_order_response.py +0 -0
  49. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/create_orders_request.py +0 -0
  50. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/create_orders_response.py +0 -0
  51. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/create_packages_response.py +0 -0
  52. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/delete_orders_resource.py +0 -0
  53. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/deleted_order_info.py +0 -0
  54. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/dimensions_request.py +0 -0
  55. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/error_response.py +0 -0
  56. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/failed_order_response.py +0 -0
  57. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_order_details_resource.py +0 -0
  58. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_order_info_resource.py +0 -0
  59. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_order_line_result.py +0 -0
  60. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_orders_details_response.py +0 -0
  61. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_orders_response.py +0 -0
  62. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_postal_details_result.py +0 -0
  63. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_shipping_details_result.py +0 -0
  64. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_tag_details_result.py +0 -0
  65. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/get_version_resource.py +0 -0
  66. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/importer.py +0 -0
  67. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/label_generation_request.py +0 -0
  68. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/manifest_details_response.py +0 -0
  69. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/manifest_eligible_orders_request.py +0 -0
  70. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/manifest_errors_error_details_response.py +0 -0
  71. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/manifest_errors_response.py +0 -0
  72. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/manifest_orders_response.py +0 -0
  73. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/order_error_info.py +0 -0
  74. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/order_error_response.py +0 -0
  75. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/order_field_response.py +0 -0
  76. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/order_update_error.py +0 -0
  77. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/postage_details_request.py +0 -0
  78. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/product_item_request.py +0 -0
  79. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/recipient_details_request.py +0 -0
  80. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/sender_details_request.py +0 -0
  81. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/shipment_package_request.py +0 -0
  82. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/tag_request.py +0 -0
  83. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/update_order_status_request.py +0 -0
  84. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/update_order_status_response.py +0 -0
  85. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/update_orders_status_request.py +0 -0
  86. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/models/updated_order_info.py +0 -0
  87. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/py.typed +0 -0
  88. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/rest.py +0 -0
  89. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/__init__.py +0 -0
  90. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/addresses.py +0 -0
  91. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/errors.py +0 -0
  92. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/__init__.py +0 -0
  93. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/db.py +0 -0
  94. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/documents.py +0 -0
  95. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/format_dimensions.py +0 -0
  96. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/large_letter.py +0 -0
  97. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/large_parcel.py +0 -0
  98. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/letter.py +0 -0
  99. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/medium_parcel.py +0 -0
  100. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/large_letter-DE.txt +0 -0
  101. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/large_letter-GB.txt +0 -0
  102. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/large_parcel-DE.txt +0 -0
  103. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/large_parcel-GB.txt +0 -0
  104. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/letter-DE.txt +0 -0
  105. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/letter-GB.txt +0 -0
  106. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/medium_parcel-DE.txt +0 -0
  107. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/medium_parcel-GB.txt +0 -0
  108. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/small_parcel-DE.txt +0 -0
  109. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/non-oba codes/small_parcel-GB.txt +0 -0
  110. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba-codes/documents-DE.txt +0 -0
  111. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba-codes/large_letter-DE.txt +0 -0
  112. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba-codes/large_letter-GB.txt +0 -0
  113. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba-codes/letter-DE.txt +0 -0
  114. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba-codes/letter-GB.txt +0 -0
  115. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba-codes/parcel-DE.txt +0 -0
  116. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba-codes/parcel-GB.txt +0 -0
  117. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/oba_parser.py +0 -0
  118. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/parcel.py +0 -0
  119. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/parser.py +0 -0
  120. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping/small_parcel.py +0 -0
  121. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api/simple/shipping_test_result.py +0 -0
  122. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api.egg-info/dependency_links.txt +0 -0
  123. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api.egg-info/requires.txt +0 -0
  124. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/click_and_drop_api.egg-info/top_level.txt +0 -0
  125. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/setup.cfg +0 -0
  126. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/setup.py +0 -0
  127. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_address_request.py +0 -0
  128. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_billing_details_request.py +0 -0
  129. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_choose_size_by_weight.py +0 -0
  130. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_create_order_error_response.py +0 -0
  131. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_create_order_label_error_response.py +0 -0
  132. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_create_order_request.py +0 -0
  133. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_create_order_response.py +0 -0
  134. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_create_orders_request.py +0 -0
  135. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_create_orders_response.py +0 -0
  136. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_create_packages_response.py +0 -0
  137. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_delete_orders_resource.py +0 -0
  138. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_deleted_order_info.py +0 -0
  139. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_dimensions_request.py +0 -0
  140. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_error_response.py +0 -0
  141. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_failed_order_response.py +0 -0
  142. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_order_details_resource.py +0 -0
  143. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_order_info_resource.py +0 -0
  144. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_order_line_result.py +0 -0
  145. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_orders_details_response.py +0 -0
  146. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_orders_response.py +0 -0
  147. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_postal_details_result.py +0 -0
  148. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_shipping_details_result.py +0 -0
  149. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_tag_details_result.py +0 -0
  150. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_get_version_resource.py +0 -0
  151. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_importer.py +0 -0
  152. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_label_generation_request.py +0 -0
  153. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_labels_api.py +0 -0
  154. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_manifest_details_response.py +0 -0
  155. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_manifest_eligible_orders_request.py +0 -0
  156. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_manifest_errors_error_details_response.py +0 -0
  157. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_manifest_errors_response.py +0 -0
  158. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_manifest_orders_response.py +0 -0
  159. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_manifests_api.py +0 -0
  160. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_oba_parser.py +0 -0
  161. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_order_error_info.py +0 -0
  162. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_order_error_response.py +0 -0
  163. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_order_field_response.py +0 -0
  164. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_order_update_error.py +0 -0
  165. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_orders_api.py +0 -0
  166. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_parcel_constraints.py +0 -0
  167. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_parcel_weights.py +0 -0
  168. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_postage_details_request.py +0 -0
  169. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_product_item_request.py +0 -0
  170. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_recipient_details_request.py +0 -0
  171. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_sender_details_request.py +0 -0
  172. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_shipment_package_request.py +0 -0
  173. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_shipping_options.py +0 -0
  174. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_simple_create_api.py +0 -0
  175. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_tag_request.py +0 -0
  176. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_update_order_status_request.py +0 -0
  177. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_update_order_status_response.py +0 -0
  178. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_update_orders_status_request.py +0 -0
  179. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_updated_order_info.py +0 -0
  180. {click_and_drop_api-3.0.2 → click_and_drop_api-3.0.4}/test/test_version_api.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: click_and_drop_api
3
- Version: 3.0.2
3
+ Version: 3.0.4
4
4
  Summary: ChannelShipper & Royal Mail Public API
5
5
  Home-page:
6
6
  Author: OpenAPI Generator community
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env python
2
+ """Full OBA workflow: create a cheap domestic order, generate a label,
3
+ apply postage via manifest, and mark the order as despatched.
4
+
5
+ Steps performed:
6
+ 1. Verify the account is OBA (required for label generation and OBA services)
7
+ 2. Pick the cheapest domestic OBA service
8
+ 3. Create the order (with label generation requested at creation time)
9
+ 4. Save the label PDF to disk
10
+ 5. Manifest eligible orders (applies postage)
11
+ 6. Set the order status to "despatched"
12
+
13
+ Note: Label generation is only available for OBA customers.
14
+ """
15
+
16
+ import os
17
+ import sys
18
+ from datetime import datetime, UTC
19
+ from pathlib import Path
20
+
21
+ from click_and_drop_api.simple import (
22
+ ClickAndDrop,
23
+ CreateOrder,
24
+ LabelGeneration,
25
+ RecipientDetails,
26
+ Address,
27
+ db,
28
+ )
29
+
30
+ # ---------------------------------------------------------------------------
31
+ # Configuration
32
+ # ---------------------------------------------------------------------------
33
+
34
+ API_KEY = os.environ["API_KEY"]
35
+ REFERENCE = "oba-workflow-{now}".format(now=datetime.now(UTC).strftime("%Y%m%d%H%M%S"))
36
+ WEIGHT_GRAMS = 100
37
+
38
+ api = ClickAndDrop(API_KEY)
39
+
40
+ # ---------------------------------------------------------------------------
41
+ # Step 1: verify OBA
42
+ # ---------------------------------------------------------------------------
43
+
44
+ print("Checking account type…")
45
+ if not api.is_oba():
46
+ print("ERROR: This account is not OBA. Label generation requires an OBA account.")
47
+ sys.exit(1)
48
+ print("Account is OBA.")
49
+
50
+ # ---------------------------------------------------------------------------
51
+ # Step 2: pick cheapest domestic OBA service
52
+ # ---------------------------------------------------------------------------
53
+
54
+ cheapest = db.filter(is_oba=True, international=False).any_or_none
55
+ if cheapest is None:
56
+ print("ERROR: No domestic OBA service found in the shipping database.")
57
+ sys.exit(1)
58
+
59
+ print(
60
+ f"Using service: {cheapest.brand} {cheapest.service_code}"
61
+ f" ({cheapest.delivery_speed}) — £{cheapest.gross}"
62
+ )
63
+
64
+ # ---------------------------------------------------------------------------
65
+ # Step 3: create the order, requesting a label in the response
66
+ # ---------------------------------------------------------------------------
67
+
68
+ order = CreateOrder(
69
+ order_reference=REFERENCE,
70
+ recipient=RecipientDetails(
71
+ address=Address(
72
+ full_name="Nicco Kunzmann",
73
+ address_line1="1 Test Street",
74
+ city="London",
75
+ postcode="SW1A 1AA",
76
+ country_code="GB",
77
+ )
78
+ ),
79
+ order_date=datetime.now(UTC),
80
+ subtotal=1.00,
81
+ shipping_cost_charged=float(cheapest.gross),
82
+ total=1.00 + float(cheapest.gross),
83
+ currency_code="GBP",
84
+ postage_details=cheapest.as_postage_details(),
85
+ packages=[cheapest.as_package_request(weight_in_grams=WEIGHT_GRAMS)],
86
+ label=LabelGeneration(
87
+ include_label_in_response=True,
88
+ include_cn=False,
89
+ include_returns_label=False,
90
+ ),
91
+ )
92
+
93
+ print(f"Creating order {REFERENCE!r}…")
94
+ response = api.create_order(order)
95
+
96
+ if response.errors_count or not response.created_orders:
97
+ print(f"ERROR: Order creation failed: {response.failed_orders}")
98
+ sys.exit(1)
99
+
100
+ created = response.created_orders[0]
101
+ order_id = created.order_identifier
102
+ print(f"Order created: id={order_id}, reference={created.order_reference}")
103
+
104
+ # ---------------------------------------------------------------------------
105
+ # Step 4: save label PDF
106
+ # ---------------------------------------------------------------------------
107
+
108
+ print("Fetching label…")
109
+ label_pdf = api.get_label(order_id, "postageLabel", include_returns_label=False)
110
+ label_path = Path(__file__).parent / "label.pdf"
111
+ label_path.write_bytes(label_pdf)
112
+ print(f"Label saved to {label_path}")
113
+
114
+ # ---------------------------------------------------------------------------
115
+ # Step 5: manifest (applies postage)
116
+ # ---------------------------------------------------------------------------
117
+
118
+ print("Manifesting eligible orders…")
119
+ manifest = api.manifest_orders()
120
+ print(f"Manifest number: {manifest.manifest_number}")
121
+ if manifest.pdf is not None:
122
+ manifest_path = Path(__file__).parent / "manifest.pdf"
123
+ manifest_path.write_bytes(manifest.pdf)
124
+ print(f"Manifest PDF saved to {manifest_path}")
125
+
126
+ # ---------------------------------------------------------------------------
127
+ # Step 6: mark as despatched
128
+ # ---------------------------------------------------------------------------
129
+
130
+ print(f"Setting order {order_id} to 'despatched'…")
131
+ update = api.update_orders([order_id], status="despatched")
132
+
133
+ if update.errors:
134
+ print(f"WARNING: status update errors: {update.errors}")
135
+ else:
136
+ print("Order marked as despatched.")
137
+
138
+ print("Done.")
@@ -3,9 +3,14 @@
3
3
 
4
4
  Uses test_shipping internally: a test order is created and immediately deleted
5
5
  for each country, so no real shipments are made.
6
+
7
+ Arguments:
8
+
9
+ - service code (optional, defaults to OLP1)
6
10
  """
7
11
 
8
12
  import os
13
+ import sys
9
14
 
10
15
  from click_and_drop_api.simple import ClickAndDrop
11
16
 
@@ -14,7 +19,7 @@ API_KEY = os.environ["API_KEY"]
14
19
  api = ClickAndDrop(API_KEY)
15
20
 
16
21
  PACKAGE_SIZE = "letter"
17
- SERVICE_CODE = "OLP1"
22
+ SERVICE_CODE = "OLP1" if len(sys.argv) == 1 else sys.argv[1]
18
23
 
19
24
  countries = api.get_countries_for_shipping(
20
25
  package_size=PACKAGE_SIZE,
@@ -101,60 +101,23 @@ class ClickAndDrop(AbstractClickAndDrop):
101
101
  """The API key in use."""
102
102
  return self._key
103
103
 
104
- def get_orders(
105
- self, order_identifiers: Union[list[Union[str, int]], str, int]
104
+ def _get_orders(
105
+ self, order_identifiers: Union[list[Union[str, int]]]
106
106
  ) -> list[click_and_drop_api.GetOrderInfoResource]:
107
- """Get specific orders.
108
-
109
- Parameters:
110
- order_identifiers:
111
- One or several Order Identifiers or Order References.
112
- Order Identifiers are integer numbers.
113
- Order References are strings.
114
- The maximum number of identifiers is 100.
115
-
116
- Returns:
117
- A list of orders
118
-
119
- Raises:
120
- click_and_drop_api.exceptions.BadRequestException if an order with the same reference already exists
121
-
122
- https://api.parcel.royalmail.com/#tag/Orders/operation/GetSpecificOrdersAsync
123
- """
124
107
  return self._orders_api.get_specific_orders_async(
125
108
  order_identifiers=order_identifiers_to_string(order_identifiers)
126
109
  )
127
110
 
128
- def delete_orders(
129
- self, order_identifiers: Union[list[Union[str, int]], str, int]
111
+ def _delete_orders(
112
+ self, order_identifiers: list[Union[str, int]]
130
113
  ) -> click_and_drop_api.DeleteOrdersResource:
131
- """Delete specific orders.
132
-
133
- Please be aware labels generated on orders which are deleted are no longer valid and must be destroyed.
134
- Cancelled label information is automatically shared with Royal Mail Revenue Protection,
135
- and should a cancelled label be identified on an item in the Royal Mail Network,
136
- you will be charged on your account and an additional handling fee applied.
137
-
138
- Parameters:
139
- order_identifiers:
140
- One or several Order Identifiers or Order References.
141
- Order Identifiers are integer numbers.
142
- Order References are strings.
143
- The maximum number of identifiers is 100.
144
-
145
- https://api.parcel.royalmail.com/#tag/Orders/operation/DeleteOrdersAsync
146
- """
147
114
  return self._orders_api.delete_orders_async(
148
115
  order_identifiers=order_identifiers_to_string(order_identifiers)
149
116
  )
150
117
 
151
- def create_orders(
118
+ def _create_orders(
152
119
  self, orders: Union[list[CreateOrder], CreateOrder]
153
120
  ) -> click_and_drop_api.CreateOrdersResponse:
154
- """Create a new order.
155
-
156
- https://api.parcel.royalmail.com/#tag/Orders/operation/CreateOrdersAsync
157
- """
158
121
  if not isinstance(orders, list):
159
122
  orders = [orders]
160
123
  request = click_and_drop_api.CreateOrdersRequest(items=orders)
@@ -207,5 +170,15 @@ class ClickAndDrop(AbstractClickAndDrop):
207
170
  include_cn=include_cn,
208
171
  )
209
172
 
173
+ def _set_order_status(
174
+ self, request: click_and_drop_api.UpdateOrdersStatusRequest
175
+ ) -> click_and_drop_api.UpdateOrderStatusResponse:
176
+ return self._orders_api.update_orders_status_async(request)
177
+
178
+ def _manifest_orders(
179
+ self, request: click_and_drop_api.ManifestEligibleOrdersRequest
180
+ ) -> click_and_drop_api.ManifestOrdersResponse:
181
+ return self._manifests_api.manifest_eligible_async(request)
182
+
210
183
 
211
184
  __all__ = ["ClickAndDrop"]