snipepy 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 (472) hide show
  1. snipepy-0.1.0/.github/workflows/ci.yaml +86 -0
  2. snipepy-0.1.0/.github/workflows/pypi-publish.yml +82 -0
  3. snipepy-0.1.0/.gitignore +118 -0
  4. snipepy-0.1.0/AGENTS.md +802 -0
  5. snipepy-0.1.0/ARCHITECTURE.md +354 -0
  6. snipepy-0.1.0/CHANGELOG.md +73 -0
  7. snipepy-0.1.0/CONTRIBUTING.md +1351 -0
  8. snipepy-0.1.0/LICENSE +73 -0
  9. snipepy-0.1.0/LLMs.md +320 -0
  10. snipepy-0.1.0/PKG-INFO +138 -0
  11. snipepy-0.1.0/README.md +91 -0
  12. snipepy-0.1.0/SECURITY.md +55 -0
  13. snipepy-0.1.0/docs/README.md +56 -0
  14. snipepy-0.1.0/docs/adr/0001-http-429-retry-with-retry-after.md +120 -0
  15. snipepy-0.1.0/docs/adr/0002-setuptools-scm-version-management.md +98 -0
  16. snipepy-0.1.0/docs/adr/README.md +20 -0
  17. snipepy-0.1.0/docs/examples/US01-find-hardware-by-asset-tag.py +46 -0
  18. snipepy-0.1.0/docs/examples/US02-get-record-by-id.py +61 -0
  19. snipepy-0.1.0/docs/examples/US03-list-assets-assigned-to-user.py +58 -0
  20. snipepy-0.1.0/docs/examples/US04-list-hardware-by-status.py +42 -0
  21. snipepy-0.1.0/docs/examples/US05-list-hardware-by-location.py +54 -0
  22. snipepy-0.1.0/docs/examples/US06-list-hardware-by-category.py +51 -0
  23. snipepy-0.1.0/docs/examples/US07-process-large-list-with-pagination.py +51 -0
  24. snipepy-0.1.0/docs/examples/US08-combine-multiple-filters.py +58 -0
  25. snipepy-0.1.0/docs/examples/US09-create-new-hardware.py +60 -0
  26. snipepy-0.1.0/docs/examples/US10-assign-custom-field-value.py +63 -0
  27. snipepy-0.1.0/docs/examples/US11-create-prerequisites-for-hardware.py +104 -0
  28. snipepy-0.1.0/docs/examples/US12-bulk-import-assets-from-csv.py +116 -0
  29. snipepy-0.1.0/docs/examples/US13-update-single-field.py +43 -0
  30. snipepy-0.1.0/docs/examples/US14-bulk-status-update.py +67 -0
  31. snipepy-0.1.0/docs/examples/US15-full-record-replacement.py +59 -0
  32. snipepy-0.1.0/docs/examples/US16-assign-hardware-to-user.py +59 -0
  33. snipepy-0.1.0/docs/examples/US17-return-hardware.py +61 -0
  34. snipepy-0.1.0/docs/examples/US18-find-and-assign-deployable-hardware.py +64 -0
  35. snipepy-0.1.0/docs/examples/US19-assign-and-release-license-seat.py +65 -0
  36. snipepy-0.1.0/docs/examples/US20-record-deletion-soft-delete.py +46 -0
  37. snipepy-0.1.0/docs/examples/US21-restore-soft-deleted-record.py +57 -0
  38. snipepy-0.1.0/docs/examples/US22-find-expiring-licenses.py +65 -0
  39. snipepy-0.1.0/docs/examples/US23-find-assets-with-overdue-audits.py +49 -0
  40. snipepy-0.1.0/docs/examples/US24-fetch-list-sources-for-dropdowns.py +49 -0
  41. snipepy-0.1.0/docs/examples/US25-query-activity-log.py +67 -0
  42. snipepy-0.1.0/docs/examples/US26-assign-and-release-accessory.py +54 -0
  43. snipepy-0.1.0/docs/examples/US27-component-checkout-and-checkin.py +57 -0
  44. snipepy-0.1.0/docs/examples/US28-consumable-checkout.py +49 -0
  45. snipepy-0.1.0/docs/examples/US29-create-new-user.py +61 -0
  46. snipepy-0.1.0/docs/examples/US30-update-user-information.py +53 -0
  47. snipepy-0.1.0/docs/examples/US31-department-based-inventory-report.py +63 -0
  48. snipepy-0.1.0/docs/examples/US32-upload-file-to-asset.py +55 -0
  49. snipepy-0.1.0/docs/examples/US33-download-and-delete-asset-files.py +49 -0
  50. snipepy-0.1.0/docs/examples/US34-create-maintenance-record.py +51 -0
  51. snipepy-0.1.0/docs/examples/US35-asset-maintenance-history.py +67 -0
  52. snipepy-0.1.0/docs/examples/US36-hardware-refresh.py +81 -0
  53. snipepy-0.1.0/docs/examples/US37-staff-transfer.py +63 -0
  54. snipepy-0.1.0/docs/examples/US38-prepare-asset-inventory-form.py +80 -0
  55. snipepy-0.1.0/docs/examples/US39-handle-auth-errors.py +62 -0
  56. snipepy-0.1.0/docs/examples/US40-connection-error-handling-and-retry.py +62 -0
  57. snipepy-0.1.0/docs/examples/US41-partial-error-handling-in-bulk-ops.py +79 -0
  58. snipepy-0.1.0/docs/examples/US42-missing-data-detection.py +66 -0
  59. snipepy-0.1.0/docs/examples/US43-detect-duplicate-serial-numbers.py +58 -0
  60. snipepy-0.1.0/docs/examples/US44-detect-orphaned-deployments.py +53 -0
  61. snipepy-0.1.0/docs/examples/US45-inventory-reconciliation.py +72 -0
  62. snipepy-0.1.0/docs/examples/US46-inventory-report-by-manufacturer.py +52 -0
  63. snipepy-0.1.0/docs/examples/US47-asset-age-distribution.py +83 -0
  64. snipepy-0.1.0/docs/examples/US48-track-expiring-warranties.py +68 -0
  65. snipepy-0.1.0/docs/examples/US49-free-text-search.py +44 -0
  66. snipepy-0.1.0/docs/examples/US50-search-by-model-number.py +45 -0
  67. snipepy-0.1.0/docs/examples/US51-search-by-custom-field-value.py +54 -0
  68. snipepy-0.1.0/docs/examples/US52-search-by-order-number-and-supplier.py +48 -0
  69. snipepy-0.1.0/docs/examples/US53-multi-source-search.py +66 -0
  70. snipepy-0.1.0/docs/examples/US54-user-search.py +54 -0
  71. snipepy-0.1.0/docs/examples/US55-date-range-search.py +63 -0
  72. snipepy-0.1.0/docs/examples/US56-supplier-records-and-assets.py +57 -0
  73. snipepy-0.1.0/docs/examples/US57-fix-mislocated-devices.py +66 -0
  74. snipepy-0.1.0/docs/examples/US58-multi-dimensional-query.py +67 -0
  75. snipepy-0.1.0/docs/examples/US59-inventory-gap-analysis.py +64 -0
  76. snipepy-0.1.0/docs/examples/US61-depreciation-report.py +64 -0
  77. snipepy-0.1.0/docs/examples/US64-cleanup-after-device-replacement.py +73 -0
  78. snipepy-0.1.0/docs/examples/US65-barcode-and-label-generation.py +49 -0
  79. snipepy-0.1.0/docs/examples/US66-custom-field-and-fieldset-management.py +88 -0
  80. snipepy-0.1.0/docs/examples/US67-hardware-model-management.py +61 -0
  81. snipepy-0.1.0/docs/examples/US68-status-label-management.py +68 -0
  82. snipepy-0.1.0/docs/examples/US69-category-management.py +60 -0
  83. snipepy-0.1.0/docs/examples/US70-location-management.py +59 -0
  84. snipepy-0.1.0/docs/examples/US71-company-management.py +48 -0
  85. snipepy-0.1.0/docs/examples/US72-manufacturer-management.py +51 -0
  86. snipepy-0.1.0/docs/examples/US73-department-management.py +64 -0
  87. snipepy-0.1.0/docs/examples/US74-audit-queue-management.py +46 -0
  88. snipepy-0.1.0/docs/examples/US74-high-level-checkout-methods.py +90 -0
  89. snipepy-0.1.0/docs/examples/US75-audit-trend-analysis.py +54 -0
  90. snipepy-0.1.0/docs/examples/US76-bulk-delete-assets.py +46 -0
  91. snipepy-0.1.0/docs/examples/US77-bulk-checkout-to-user.py +130 -0
  92. snipepy-0.1.0/docs/examples/US78-bulk-checkout-to-location.py +112 -0
  93. snipepy-0.1.0/docs/examples/US79-bulk-checkout-and-checkin-lifecycle.py +120 -0
  94. snipepy-0.1.0/docs/examples/US80-clone-hardware.py +109 -0
  95. snipepy-0.1.0/docs/examples/bulk_import.py +47 -0
  96. snipepy-0.1.0/docs/examples/department_inventory.py +48 -0
  97. snipepy-0.1.0/docs/examples/duplicate_serials.py +50 -0
  98. snipepy-0.1.0/docs/examples/expiring_licenses.py +55 -0
  99. snipepy-0.1.0/docs/examples/hardware_refresh.py +64 -0
  100. snipepy-0.1.0/docs/examples/mcp_server.py +68 -0
  101. snipepy-0.1.0/docs/fixes/0001-asset-assigned-to-accepts-integer.md +86 -0
  102. snipepy-0.1.0/docs/fixes/0002-asset-maintenance-create-sends-title-not-name.md +61 -0
  103. snipepy-0.1.0/docs/fixes/0003-accessories-checkout-wrong-field-name.md +52 -0
  104. snipepy-0.1.0/docs/fixes/0004-restore-returns-string-not-model.md +61 -0
  105. snipepy-0.1.0/docs/fixes/0005-assets-checkout-returns-partial-response.md +54 -0
  106. snipepy-0.1.0/docs/fixes/0006-component-consumable-checkout-returns-none.md +56 -0
  107. snipepy-0.1.0/docs/fixes/0007-get-by-serial-list-envelope.md +56 -0
  108. snipepy-0.1.0/docs/fixes/0008-components-list-assets-pivot-fields.md +68 -0
  109. snipepy-0.1.0/docs/fixes/0009-fieldset-delete-fails-field-in-use.md +50 -0
  110. snipepy-0.1.0/docs/fixes/0010-list-audit-due-wrong-endpoint.md +49 -0
  111. snipepy-0.1.0/docs/fixes/0011-delete-file-missing-delete-suffix.md +52 -0
  112. snipepy-0.1.0/docs/fixes/0012-accessories-clone-endpoint-removed.md +39 -0
  113. snipepy-0.1.0/docs/fixes/0013-asset-models-restore-endpoint-removed.md +39 -0
  114. snipepy-0.1.0/docs/fixes/0014-locations-list-users-endpoint-removed.md +41 -0
  115. snipepy-0.1.0/docs/fixes/0015-custom-fields-create-sends-invalid-field-type.md +49 -0
  116. snipepy-0.1.0/docs/fixes/0016-maintenance-update-partial-test-uses-title.md +54 -0
  117. snipepy-0.1.0/docs/fixes/0017-users-list-missing-filter-params.md +42 -0
  118. snipepy-0.1.0/docs/fixes/0018-licenses-list-missing-filter-params.md +47 -0
  119. snipepy-0.1.0/docs/fixes/0019-html-entities-not-decoded-in-api-responses.md +72 -0
  120. snipepy-0.1.0/docs/fixes/0020-checkout-returns-500-when-mail-is-misconfigured.md +85 -0
  121. snipepy-0.1.0/docs/fixes/0022-asset-maintenance-create-requires-maintenance-type-id.md +71 -0
  122. snipepy-0.1.0/docs/fixes/0023-license-seat-assigned-to-field.md +62 -0
  123. snipepy-0.1.0/docs/fixes/0024-asset-create-omits-name-field.md +72 -0
  124. snipepy-0.1.0/docs/fixes/0025-clone-purchase-cost-float-type.md +67 -0
  125. snipepy-0.1.0/docs/fixes/NNNN-format-lint-errors.md +44 -0
  126. snipepy-0.1.0/docs/fixes/README.md +107 -0
  127. snipepy-0.1.0/docs/smoke-test-limitations.md +136 -0
  128. snipepy-0.1.0/docs/snipeit-api/README.md +274 -0
  129. snipepy-0.1.0/docs/snipeit-api/accessories.md +135 -0
  130. snipepy-0.1.0/docs/snipeit-api/api-table.md +173 -0
  131. snipepy-0.1.0/docs/snipeit-api/assets.md +444 -0
  132. snipepy-0.1.0/docs/snipeit-api/categories.md +90 -0
  133. snipepy-0.1.0/docs/snipeit-api/companies.md +84 -0
  134. snipepy-0.1.0/docs/snipeit-api/components.md +134 -0
  135. snipepy-0.1.0/docs/snipeit-api/consumables.md +131 -0
  136. snipepy-0.1.0/docs/snipeit-api/custom-fields.md +81 -0
  137. snipepy-0.1.0/docs/snipeit-api/departments.md +91 -0
  138. snipepy-0.1.0/docs/snipeit-api/fieldsets.md +101 -0
  139. snipepy-0.1.0/docs/snipeit-api/file-uploads.md +53 -0
  140. snipepy-0.1.0/docs/snipeit-api/groups.md +79 -0
  141. snipepy-0.1.0/docs/snipeit-api/licenses.md +203 -0
  142. snipepy-0.1.0/docs/snipeit-api/locations.md +121 -0
  143. snipepy-0.1.0/docs/snipeit-api/maintenances.md +131 -0
  144. snipepy-0.1.0/docs/snipeit-api/manufacturers.md +101 -0
  145. snipepy-0.1.0/docs/snipeit-api/models.md +130 -0
  146. snipepy-0.1.0/docs/snipeit-api/reports.md +54 -0
  147. snipepy-0.1.0/docs/snipeit-api/settings.md +72 -0
  148. snipepy-0.1.0/docs/snipeit-api/status-labels.md +114 -0
  149. snipepy-0.1.0/docs/snipeit-api/suppliers.md +68 -0
  150. snipepy-0.1.0/docs/snipeit-api/users.md +219 -0
  151. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessories-1.md +148 -0
  152. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessories-checkin.md +96 -0
  153. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessories-checkout.md +138 -0
  154. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessories.md +345 -0
  155. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessoriesid-1.md +159 -0
  156. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessoriesid-2.md +154 -0
  157. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessoriesid-3.md +93 -0
  158. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessoriesid.md +93 -0
  159. snipepy-0.1.0/docs/snipeit-api-web-docs/accessories/accessoriesidcheckedout.md +109 -0
  160. snipepy-0.1.0/docs/snipeit-api-web-docs/api-web-doc-index.md +301 -0
  161. snipepy-0.1.0/docs/snipeit-api-web-docs/api-web-sources.md +185 -0
  162. snipepy-0.1.0/docs/snipeit-api-web-docs/asset_maintenances/maintenances-1.md +140 -0
  163. snipepy-0.1.0/docs/snipeit-api-web-docs/asset_maintenances/maintenances-copy-1.md +136 -0
  164. snipepy-0.1.0/docs/snipeit-api-web-docs/asset_maintenances/maintenances-copy.md +140 -0
  165. snipepy-0.1.0/docs/snipeit-api-web-docs/asset_maintenances/maintenances.md +305 -0
  166. snipepy-0.1.0/docs/snipeit-api-web-docs/asset_maintenances/maintenancesid.md +264 -0
  167. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-audit-by-id.md +89 -0
  168. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-by-asset-tag.md +412 -0
  169. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-by-id.md +468 -0
  170. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-by-serial.md +412 -0
  171. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-checkin.md +149 -0
  172. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-checkout.md +184 -0
  173. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-create.md +365 -0
  174. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-delete.md +109 -0
  175. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-files-delete.md +103 -0
  176. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-list-files.md +106 -0
  177. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-list.md +576 -0
  178. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-partial-update.md +257 -0
  179. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-update.md +222 -0
  180. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardware-upload-files.md +129 -0
  181. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardwareaudit.md +219 -0
  182. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardwareauditdue.md +392 -0
  183. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardwareauditoverdue.md +392 -0
  184. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardwareidfilesfile_id.md +116 -0
  185. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardwareidlicenses.md +323 -0
  186. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardwareidrestore.md +103 -0
  187. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/hardwarelabels.md +99 -0
  188. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/updating-custom-fields.md +9 -0
  189. snipepy-0.1.0/docs/snipeit-api-web-docs/assets/uploading-files.md +39 -0
  190. snipepy-0.1.0/docs/snipeit-api-web-docs/categories/categories-1.md +182 -0
  191. snipepy-0.1.0/docs/snipeit-api-web-docs/categories/categories-2.md +198 -0
  192. snipepy-0.1.0/docs/snipeit-api-web-docs/categories/categoriesid-1.md +203 -0
  193. snipepy-0.1.0/docs/snipeit-api-web-docs/categories/categoriesid-2.md +166 -0
  194. snipepy-0.1.0/docs/snipeit-api-web-docs/categories/categoriesid-3.md +167 -0
  195. snipepy-0.1.0/docs/snipeit-api-web-docs/categories/categoriesid.md +210 -0
  196. snipepy-0.1.0/docs/snipeit-api-web-docs/companies/companies-1.md +167 -0
  197. snipepy-0.1.0/docs/snipeit-api-web-docs/companies/companies.md +223 -0
  198. snipepy-0.1.0/docs/snipeit-api-web-docs/companies/companiesid-1.md +184 -0
  199. snipepy-0.1.0/docs/snipeit-api-web-docs/companies/companiesid-2.md +195 -0
  200. snipepy-0.1.0/docs/snipeit-api-web-docs/companies/companiesid-3.md +158 -0
  201. snipepy-0.1.0/docs/snipeit-api-web-docs/companies/companiesid.md +237 -0
  202. snipepy-0.1.0/docs/snipeit-api-web-docs/components/components-1.md +138 -0
  203. snipepy-0.1.0/docs/snipeit-api-web-docs/components/components.md +351 -0
  204. snipepy-0.1.0/docs/snipeit-api-web-docs/components/componentsid-1.md +146 -0
  205. snipepy-0.1.0/docs/snipeit-api-web-docs/components/componentsid-2.md +146 -0
  206. snipepy-0.1.0/docs/snipeit-api-web-docs/components/componentsid-3.md +93 -0
  207. snipepy-0.1.0/docs/snipeit-api-web-docs/components/componentsid.md +93 -0
  208. snipepy-0.1.0/docs/snipeit-api-web-docs/components/componentsidassets.md +93 -0
  209. snipepy-0.1.0/docs/snipeit-api-web-docs/components/componentsidcheckin.md +115 -0
  210. snipepy-0.1.0/docs/snipeit-api-web-docs/components/componentsidcheckout.md +121 -0
  211. snipepy-0.1.0/docs/snipeit-api-web-docs/consumables/consumables-1.md +139 -0
  212. snipepy-0.1.0/docs/snipeit-api-web-docs/consumables/consumables-2.md +150 -0
  213. snipepy-0.1.0/docs/snipeit-api-web-docs/consumables/consumables.md +384 -0
  214. snipepy-0.1.0/docs/snipeit-api-web-docs/consumables/consumablesid-1.md +150 -0
  215. snipepy-0.1.0/docs/snipeit-api-web-docs/consumables/consumablesid-2.md +93 -0
  216. snipepy-0.1.0/docs/snipeit-api-web-docs/consumables/consumablesid.md +93 -0
  217. snipepy-0.1.0/docs/snipeit-api-web-docs/consumables/consumablesidcheckout.md +115 -0
  218. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fields-1.md +152 -0
  219. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fields-2.md +166 -0
  220. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fields.md +257 -0
  221. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsets.md +134 -0
  222. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsetsid-1.md +204 -0
  223. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsetsid-2.md +160 -0
  224. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsetsid.md +237 -0
  225. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsetsidfields.md +219 -0
  226. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsid-1.md +160 -0
  227. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsid-2.md +167 -0
  228. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsid.md +142 -0
  229. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsidassociate.md +160 -0
  230. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/fieldsiddisassociate.md +160 -0
  231. snipepy-0.1.0/docs/snipeit-api-web-docs/custom_fields__fieldsets/update-fields.md +171 -0
  232. snipepy-0.1.0/docs/snipeit-api-web-docs/departments/departments-1.md +137 -0
  233. snipepy-0.1.0/docs/snipeit-api-web-docs/departments/departments-edit.md +157 -0
  234. snipepy-0.1.0/docs/snipeit-api-web-docs/departments/departments.md +184 -0
  235. snipepy-0.1.0/docs/snipeit-api-web-docs/departments/departmentsid-1.md +157 -0
  236. snipepy-0.1.0/docs/snipeit-api-web-docs/departments/departmentsid-2.md +184 -0
  237. snipepy-0.1.0/docs/snipeit-api-web-docs/departments/departmentsid.md +165 -0
  238. snipepy-0.1.0/docs/snipeit-api-web-docs/groups/groups-1.md +89 -0
  239. snipepy-0.1.0/docs/snipeit-api-web-docs/groups/groupsid-1.md +103 -0
  240. snipepy-0.1.0/docs/snipeit-api-web-docs/groups/groupsid-2.md +115 -0
  241. snipepy-0.1.0/docs/snipeit-api-web-docs/groups/groupsid-3.md +94 -0
  242. snipepy-0.1.0/docs/snipeit-api-web-docs/groups/groupsid-4.md +115 -0
  243. snipepy-0.1.0/docs/snipeit-api-web-docs/groups/groupsid.md +94 -0
  244. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/license-seats-checkin-checkout-patch.md +15 -0
  245. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/license-seats-checkin-checkout-put.md +179 -0
  246. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licenses.md +407 -0
  247. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licensesid-1.md +197 -0
  248. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licensesid-2.md +187 -0
  249. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licensesid-3.md +110 -0
  250. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licensesid.md +246 -0
  251. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licensesidseats.md +205 -0
  252. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licensesidseatsseat_id-2.md +179 -0
  253. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/licensesidseatsseat_id.md +198 -0
  254. snipepy-0.1.0/docs/snipeit-api-web-docs/licenses/testinput.md +224 -0
  255. snipepy-0.1.0/docs/snipeit-api-web-docs/locations/locations-1.md +93 -0
  256. snipepy-0.1.0/docs/snipeit-api-web-docs/locations/locations-2.md +136 -0
  257. snipepy-0.1.0/docs/snipeit-api-web-docs/locations/locations-3.md +147 -0
  258. snipepy-0.1.0/docs/snipeit-api-web-docs/locations/locations.md +171 -0
  259. snipepy-0.1.0/docs/snipeit-api-web-docs/locations/locationsid-2.md +87 -0
  260. snipepy-0.1.0/docs/snipeit-api-web-docs/locations/locationsid.md +144 -0
  261. snipepy-0.1.0/docs/snipeit-api-web-docs/manufacturers/manufacturers-1.md +100 -0
  262. snipepy-0.1.0/docs/snipeit-api-web-docs/manufacturers/manufacturers.md +215 -0
  263. snipepy-0.1.0/docs/snipeit-api-web-docs/manufacturers/manufacturersid-1.md +167 -0
  264. snipepy-0.1.0/docs/snipeit-api-web-docs/manufacturers/manufacturersid-2.md +167 -0
  265. snipepy-0.1.0/docs/snipeit-api-web-docs/manufacturers/manufacturersid-3.md +185 -0
  266. snipepy-0.1.0/docs/snipeit-api-web-docs/manufacturers/manufacturersid.md +185 -0
  267. snipepy-0.1.0/docs/snipeit-api-web-docs/misc/version.md +78 -0
  268. snipepy-0.1.0/docs/snipeit-api-web-docs/models/models-1.md +196 -0
  269. snipepy-0.1.0/docs/snipeit-api-web-docs/models/models.md +192 -0
  270. snipepy-0.1.0/docs/snipeit-api-web-docs/models/modelsid-1.md +218 -0
  271. snipepy-0.1.0/docs/snipeit-api-web-docs/models/modelsid-2.md +206 -0
  272. snipepy-0.1.0/docs/snipeit-api-web-docs/models/modelsid-3.md +167 -0
  273. snipepy-0.1.0/docs/snipeit-api-web-docs/models/modelsid.md +167 -0
  274. snipepy-0.1.0/docs/snipeit-api-web-docs/models/uploading-model-files.md +39 -0
  275. snipepy-0.1.0/docs/snipeit-api-web-docs/reports/reportsactivity.md +203 -0
  276. snipepy-0.1.0/docs/snipeit-api-web-docs/settings/backups-1.md +82 -0
  277. snipepy-0.1.0/docs/snipeit-api-web-docs/settings/backupsdownloadfile.md +97 -0
  278. snipepy-0.1.0/docs/snipeit-api-web-docs/status_labels/statuslabels-1.md +173 -0
  279. snipepy-0.1.0/docs/snipeit-api-web-docs/status_labels/statuslabels.md +233 -0
  280. snipepy-0.1.0/docs/snipeit-api-web-docs/status_labels/statuslabelsid-1.md +93 -0
  281. snipepy-0.1.0/docs/snipeit-api-web-docs/status_labels/statuslabelsid-2.md +184 -0
  282. snipepy-0.1.0/docs/snipeit-api-web-docs/status_labels/statuslabelsid-3.md +183 -0
  283. snipepy-0.1.0/docs/snipeit-api-web-docs/status_labels/statuslabelsid.md +163 -0
  284. snipepy-0.1.0/docs/snipeit-api-web-docs/status_labels/statuslabelsidassetlist.md +93 -0
  285. snipepy-0.1.0/docs/snipeit-api-web-docs/suppliers/suppliers.md +152 -0
  286. snipepy-0.1.0/docs/snipeit-api-web-docs/suppliers/suppliersid.md +91 -0
  287. snipepy-0.1.0/docs/snipeit-api-web-docs/users/users-2.md +194 -0
  288. snipepy-0.1.0/docs/snipeit-api-web-docs/users/users-3.md +184 -0
  289. snipepy-0.1.0/docs/snipeit-api-web-docs/users/users-restore.md +102 -0
  290. snipepy-0.1.0/docs/snipeit-api-web-docs/users/users.md +323 -0
  291. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersid-1.md +94 -0
  292. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersid-2.md +181 -0
  293. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersid.md +94 -0
  294. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersidaccessories.md +257 -0
  295. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersidassets.md +111 -0
  296. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersideulas.md +93 -0
  297. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersidlicenses.md +290 -0
  298. snipepy-0.1.0/docs/snipeit-api-web-docs/users/usersme.md +128 -0
  299. snipepy-0.1.0/pyproject.toml +389 -0
  300. snipepy-0.1.0/requirements-dev.txt +10 -0
  301. snipepy-0.1.0/requirements.txt +3 -0
  302. snipepy-0.1.0/scripts/dev/copy_test_token.sh +42 -0
  303. snipepy-0.1.0/scripts/dev/down_all_instances.sh +58 -0
  304. snipepy-0.1.0/scripts/dev/down_demo_instance.sh +13 -0
  305. snipepy-0.1.0/scripts/dev/up_all_instances.sh +59 -0
  306. snipepy-0.1.0/scripts/dev/up_demo_instance.sh +32 -0
  307. snipepy-0.1.0/setup.cfg +4 -0
  308. snipepy-0.1.0/skills/snipepy-onboarding/SKILL.md +303 -0
  309. snipepy-0.1.0/src/snipepy/__init__.py +73 -0
  310. snipepy-0.1.0/src/snipepy/_config.py +45 -0
  311. snipepy-0.1.0/src/snipepy/_constants.py +15 -0
  312. snipepy-0.1.0/src/snipepy/_http_client.py +382 -0
  313. snipepy-0.1.0/src/snipepy/_whitelist.py +70 -0
  314. snipepy-0.1.0/src/snipepy/models/__init__.py +111 -0
  315. snipepy-0.1.0/src/snipepy/models/_shared.py +125 -0
  316. snipepy-0.1.0/src/snipepy/models/accessories.py +59 -0
  317. snipepy-0.1.0/src/snipepy/models/asset_maintenances.py +55 -0
  318. snipepy-0.1.0/src/snipepy/models/asset_models.py +47 -0
  319. snipepy-0.1.0/src/snipepy/models/assets.py +170 -0
  320. snipepy-0.1.0/src/snipepy/models/categories.py +39 -0
  321. snipepy-0.1.0/src/snipepy/models/companies.py +35 -0
  322. snipepy-0.1.0/src/snipepy/models/components.py +79 -0
  323. snipepy-0.1.0/src/snipepy/models/consumables.py +43 -0
  324. snipepy-0.1.0/src/snipepy/models/custom_fields.py +67 -0
  325. snipepy-0.1.0/src/snipepy/models/departments.py +33 -0
  326. snipepy-0.1.0/src/snipepy/models/groups.py +30 -0
  327. snipepy-0.1.0/src/snipepy/models/licenses.py +99 -0
  328. snipepy-0.1.0/src/snipepy/models/locations.py +41 -0
  329. snipepy-0.1.0/src/snipepy/models/manufacturers.py +39 -0
  330. snipepy-0.1.0/src/snipepy/models/reports.py +68 -0
  331. snipepy-0.1.0/src/snipepy/models/settings.py +25 -0
  332. snipepy-0.1.0/src/snipepy/models/status_labels.py +34 -0
  333. snipepy-0.1.0/src/snipepy/models/suppliers.py +45 -0
  334. snipepy-0.1.0/src/snipepy/models/users.py +60 -0
  335. snipepy-0.1.0/src/snipepy/py.typed +0 -0
  336. snipepy-0.1.0/src/snipepy/services/__init__.py +43 -0
  337. snipepy-0.1.0/src/snipepy/services/_pagination.py +28 -0
  338. snipepy-0.1.0/src/snipepy/services/accessories.py +126 -0
  339. snipepy-0.1.0/src/snipepy/services/asset_maintenances.py +109 -0
  340. snipepy-0.1.0/src/snipepy/services/asset_models.py +97 -0
  341. snipepy-0.1.0/src/snipepy/services/assets.py +517 -0
  342. snipepy-0.1.0/src/snipepy/services/categories.py +80 -0
  343. snipepy-0.1.0/src/snipepy/services/companies.py +68 -0
  344. snipepy-0.1.0/src/snipepy/services/components.py +123 -0
  345. snipepy-0.1.0/src/snipepy/services/consumables.py +106 -0
  346. snipepy-0.1.0/src/snipepy/services/custom_fields.py +118 -0
  347. snipepy-0.1.0/src/snipepy/services/departments.py +91 -0
  348. snipepy-0.1.0/src/snipepy/services/groups.py +66 -0
  349. snipepy-0.1.0/src/snipepy/services/licenses.py +146 -0
  350. snipepy-0.1.0/src/snipepy/services/locations.py +113 -0
  351. snipepy-0.1.0/src/snipepy/services/manufacturers.py +78 -0
  352. snipepy-0.1.0/src/snipepy/services/reports.py +64 -0
  353. snipepy-0.1.0/src/snipepy/services/settings.py +53 -0
  354. snipepy-0.1.0/src/snipepy/services/status_labels.py +110 -0
  355. snipepy-0.1.0/src/snipepy/services/suppliers.py +93 -0
  356. snipepy-0.1.0/src/snipepy/services/users.py +180 -0
  357. snipepy-0.1.0/src/snipepy/snipepy.py +144 -0
  358. snipepy-0.1.0/src/snipepy.egg-info/PKG-INFO +138 -0
  359. snipepy-0.1.0/src/snipepy.egg-info/SOURCES.txt +470 -0
  360. snipepy-0.1.0/src/snipepy.egg-info/dependency_links.txt +1 -0
  361. snipepy-0.1.0/src/snipepy.egg-info/requires.txt +17 -0
  362. snipepy-0.1.0/src/snipepy.egg-info/scm_file_list.json +467 -0
  363. snipepy-0.1.0/src/snipepy.egg-info/scm_version.json +8 -0
  364. snipepy-0.1.0/src/snipepy.egg-info/top_level.txt +1 -0
  365. snipepy-0.1.0/tests/__init__.py +0 -0
  366. snipepy-0.1.0/tests/conftest.py +40 -0
  367. snipepy-0.1.0/tests/docker/test/latest/docker-compose.yaml +43 -0
  368. snipepy-0.1.0/tests/docker/test/latest/setup.sh +26 -0
  369. snipepy-0.1.0/tests/docker/test/readme.md +134 -0
  370. snipepy-0.1.0/tests/docker/test/v4.8.0/docker-compose.yaml +45 -0
  371. snipepy-0.1.0/tests/docker/test/v4.8.0/setup.sh +29 -0
  372. snipepy-0.1.0/tests/docker/test/v8.0.0/docker-compose.yaml +43 -0
  373. snipepy-0.1.0/tests/docker/test/v8.0.0/setup.sh +40 -0
  374. snipepy-0.1.0/tests/docker/test/v8.1.4/docker-compose.yaml +43 -0
  375. snipepy-0.1.0/tests/docker/test/v8.1.4/setup.sh +40 -0
  376. snipepy-0.1.0/tests/docker/test/v8.2.0/docker-compose.yaml +43 -0
  377. snipepy-0.1.0/tests/docker/test/v8.2.0/setup.sh +26 -0
  378. snipepy-0.1.0/tests/docker/test/v8.2.1/docker-compose.yaml +43 -0
  379. snipepy-0.1.0/tests/docker/test/v8.2.1/setup.sh +26 -0
  380. snipepy-0.1.0/tests/docker/test/v8.3.0/docker-compose.yaml +43 -0
  381. snipepy-0.1.0/tests/docker/test/v8.3.0/setup.sh +26 -0
  382. snipepy-0.1.0/tests/docker/test/v8.3.5/docker-compose.yaml +43 -0
  383. snipepy-0.1.0/tests/docker/test/v8.3.5/setup.sh +26 -0
  384. snipepy-0.1.0/tests/docker/test/v8.3.6/docker-compose.yaml +43 -0
  385. snipepy-0.1.0/tests/docker/test/v8.3.6/setup.sh +26 -0
  386. snipepy-0.1.0/tests/docker/test/v8.3.7/docker-compose.yaml +43 -0
  387. snipepy-0.1.0/tests/docker/test/v8.3.7/setup.sh +26 -0
  388. snipepy-0.1.0/tests/docker/test/v8.4.0/docker-compose.yaml +43 -0
  389. snipepy-0.1.0/tests/docker/test/v8.4.0/setup.sh +26 -0
  390. snipepy-0.1.0/tests/docker/test/v8.4.1/docker-compose.yaml +43 -0
  391. snipepy-0.1.0/tests/docker/test/v8.4.1/setup.sh +26 -0
  392. snipepy-0.1.0/tests/docker/test/v8.5.0/docker-compose.yaml +43 -0
  393. snipepy-0.1.0/tests/docker/test/v8.5.0/setup.sh +26 -0
  394. snipepy-0.1.0/tests/docker/test/v8.6.0/docker-compose.yaml +43 -0
  395. snipepy-0.1.0/tests/docker/test/v8.6.0/setup.sh +26 -0
  396. snipepy-0.1.0/tests/docker/test/v8.6.1/docker-compose.yaml +43 -0
  397. snipepy-0.1.0/tests/docker/test/v8.6.1/setup.sh +26 -0
  398. snipepy-0.1.0/tests/smoke/__init__.py +3 -0
  399. snipepy-0.1.0/tests/smoke/conftest.py +408 -0
  400. snipepy-0.1.0/tests/smoke/test_accessories.py +89 -0
  401. snipepy-0.1.0/tests/smoke/test_asset_maintenances.py +73 -0
  402. snipepy-0.1.0/tests/smoke/test_asset_models.py +78 -0
  403. snipepy-0.1.0/tests/smoke/test_assets.py +496 -0
  404. snipepy-0.1.0/tests/smoke/test_categories.py +68 -0
  405. snipepy-0.1.0/tests/smoke/test_companies.py +55 -0
  406. snipepy-0.1.0/tests/smoke/test_components.py +91 -0
  407. snipepy-0.1.0/tests/smoke/test_consumables.py +76 -0
  408. snipepy-0.1.0/tests/smoke/test_custom_fields.py +141 -0
  409. snipepy-0.1.0/tests/smoke/test_departments.py +55 -0
  410. snipepy-0.1.0/tests/smoke/test_groups.py +51 -0
  411. snipepy-0.1.0/tests/smoke/test_licenses.py +122 -0
  412. snipepy-0.1.0/tests/smoke/test_locations.py +80 -0
  413. snipepy-0.1.0/tests/smoke/test_manufacturers.py +63 -0
  414. snipepy-0.1.0/tests/smoke/test_model_fieldset_defaults.py +321 -0
  415. snipepy-0.1.0/tests/smoke/test_reports.py +38 -0
  416. snipepy-0.1.0/tests/smoke/test_settings.py +23 -0
  417. snipepy-0.1.0/tests/smoke/test_status_labels.py +85 -0
  418. snipepy-0.1.0/tests/smoke/test_suppliers.py +55 -0
  419. snipepy-0.1.0/tests/smoke/test_us_detection.py +201 -0
  420. snipepy-0.1.0/tests/smoke/test_us_error_handling.py +142 -0
  421. snipepy-0.1.0/tests/smoke/test_us_files.py +81 -0
  422. snipepy-0.1.0/tests/smoke/test_us_hardware_lifecycle.py +168 -0
  423. snipepy-0.1.0/tests/smoke/test_us_hardware_read.py +161 -0
  424. snipepy-0.1.0/tests/smoke/test_us_hardware_write.py +303 -0
  425. snipepy-0.1.0/tests/smoke/test_us_license_scenarios.py +112 -0
  426. snipepy-0.1.0/tests/smoke/test_us_maintenance_scenarios.py +160 -0
  427. snipepy-0.1.0/tests/smoke/test_us_management.py +381 -0
  428. snipepy-0.1.0/tests/smoke/test_us_peripherals.py +134 -0
  429. snipepy-0.1.0/tests/smoke/test_us_report_scenarios.py +150 -0
  430. snipepy-0.1.0/tests/smoke/test_us_search.py +168 -0
  431. snipepy-0.1.0/tests/smoke/test_us_user_scenarios.py +173 -0
  432. snipepy-0.1.0/tests/smoke/test_users.py +160 -0
  433. snipepy-0.1.0/tests/unit/__init__.py +0 -0
  434. snipepy-0.1.0/tests/unit/config/test_config.py +209 -0
  435. snipepy-0.1.0/tests/unit/http_client/conftest.py +163 -0
  436. snipepy-0.1.0/tests/unit/http_client/test_http_client_init.py +27 -0
  437. snipepy-0.1.0/tests/unit/http_client/test_http_client_public_api.py +182 -0
  438. snipepy-0.1.0/tests/unit/http_client/test_http_client_rate_limit.py +115 -0
  439. snipepy-0.1.0/tests/unit/http_client/test_http_client_request.py +711 -0
  440. snipepy-0.1.0/tests/unit/http_client/test_http_unescape.py +187 -0
  441. snipepy-0.1.0/tests/unit/models/__init__.py +1 -0
  442. snipepy-0.1.0/tests/unit/models/test_asset_models.py +149 -0
  443. snipepy-0.1.0/tests/unit/models/test_assets.py +121 -0
  444. snipepy-0.1.0/tests/unit/models/test_custom_fields.py +122 -0
  445. snipepy-0.1.0/tests/unit/models/test_remaining_models.py +900 -0
  446. snipepy-0.1.0/tests/unit/models/test_reports.py +64 -0
  447. snipepy-0.1.0/tests/unit/models/test_shared.py +121 -0
  448. snipepy-0.1.0/tests/unit/services/__init__.py +0 -0
  449. snipepy-0.1.0/tests/unit/services/conftest.py +152 -0
  450. snipepy-0.1.0/tests/unit/services/test_accessories_service.py +145 -0
  451. snipepy-0.1.0/tests/unit/services/test_asset_maintenances_service.py +156 -0
  452. snipepy-0.1.0/tests/unit/services/test_asset_models_service.py +188 -0
  453. snipepy-0.1.0/tests/unit/services/test_assets_service.py +789 -0
  454. snipepy-0.1.0/tests/unit/services/test_categories_service.py +139 -0
  455. snipepy-0.1.0/tests/unit/services/test_companies_service.py +116 -0
  456. snipepy-0.1.0/tests/unit/services/test_components_service.py +143 -0
  457. snipepy-0.1.0/tests/unit/services/test_consumables_service.py +140 -0
  458. snipepy-0.1.0/tests/unit/services/test_custom_fields_service.py +246 -0
  459. snipepy-0.1.0/tests/unit/services/test_departments_service.py +150 -0
  460. snipepy-0.1.0/tests/unit/services/test_groups_service.py +127 -0
  461. snipepy-0.1.0/tests/unit/services/test_licenses_service.py +239 -0
  462. snipepy-0.1.0/tests/unit/services/test_locations_service.py +171 -0
  463. snipepy-0.1.0/tests/unit/services/test_manufacturers_service.py +126 -0
  464. snipepy-0.1.0/tests/unit/services/test_pagination.py +60 -0
  465. snipepy-0.1.0/tests/unit/services/test_reports_service.py +159 -0
  466. snipepy-0.1.0/tests/unit/services/test_settings_service.py +105 -0
  467. snipepy-0.1.0/tests/unit/services/test_status_labels_service.py +201 -0
  468. snipepy-0.1.0/tests/unit/services/test_suppliers_service.py +166 -0
  469. snipepy-0.1.0/tests/unit/services/test_users_service.py +362 -0
  470. snipepy-0.1.0/tests/unit/test_exceptions.py +54 -0
  471. snipepy-0.1.0/tests/unit/test_public_api.py +53 -0
  472. snipepy-0.1.0/tests/unit/test_snipepy.py +101 -0
@@ -0,0 +1,86 @@
1
+ name: Snipepy CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ static-analysis:
13
+ name: Static Analysis
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Checkout repository
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.10"
23
+ cache: "pip"
24
+ cache-dependency-path: pyproject.toml
25
+
26
+ - name: Install project with dev dependencies
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install -e .[dev]
30
+ pip install tox
31
+
32
+ - name: Check code formatting
33
+ run: tox -e format
34
+
35
+ - name: Run linter
36
+ run: tox -e lint
37
+
38
+ - name: Run type checker
39
+ run: tox -e typecheck
40
+
41
+ - name: Detect unused code
42
+ run: tox -e deadcode
43
+
44
+ - name: Run security checks
45
+ run: tox -e sec
46
+
47
+ test-matrix:
48
+ name: Tests (Python ${{ matrix.python-version }})
49
+ runs-on: ubuntu-latest
50
+ needs: static-analysis
51
+ timeout-minutes: 15
52
+ strategy:
53
+ fail-fast: false
54
+ matrix:
55
+ python-version:
56
+ - "3.10"
57
+ - "3.11"
58
+ - "3.12"
59
+ - "3.13"
60
+ include:
61
+ - python-version: "3.14"
62
+ allow-prereleases: true
63
+ steps:
64
+ - name: Checkout repository
65
+ uses: actions/checkout@v4
66
+
67
+ - name: Set up Python ${{ matrix.python-version }}
68
+ uses: actions/setup-python@v5
69
+ with:
70
+ python-version: ${{ matrix.python-version }}
71
+ allow-prereleases: ${{ matrix.allow-prereleases || false }}
72
+ cache: "pip"
73
+ cache-dependency-path: pyproject.toml
74
+
75
+ - name: Install project with dev dependencies
76
+ run: |
77
+ python -m pip install --upgrade pip
78
+ pip install -e .[dev]
79
+ pip install tox
80
+
81
+ - name: Run tests
82
+ env:
83
+ PYTHON_VERSION: ${{ matrix.python-version }}
84
+ run: |
85
+ TOX_ENV_NAME="py$(echo $PYTHON_VERSION | tr -d '.')"
86
+ tox -e $TOX_ENV_NAME
@@ -0,0 +1,82 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ name: Build distribution
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ with:
17
+ fetch-depth: 0
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: "3.x"
23
+
24
+ - name: Install build tool
25
+ run: python -m pip install --upgrade build setuptools_scm
26
+
27
+ - name: Build sdist and wheel
28
+ run: python -m build
29
+
30
+ - name: Upload build artifacts
31
+ uses: actions/upload-artifact@v4
32
+ with:
33
+ name: dist
34
+ path: dist/
35
+
36
+ publish-pypi:
37
+ name: Publish to PyPI
38
+ needs: build
39
+ if: >-
40
+ github.event_name == 'release' &&
41
+ github.event.action == 'published' &&
42
+ !github.event.release.prerelease
43
+ runs-on: ubuntu-latest
44
+ environment:
45
+ name: pypi_env
46
+ url: https://pypi.org/project/snipepy/
47
+ permissions:
48
+ id-token: write
49
+ steps:
50
+ - name: Download build artifacts
51
+ uses: actions/download-artifact@v4
52
+ with:
53
+ name: dist
54
+ path: dist/
55
+
56
+ - name: Publish to PyPI
57
+ uses: pypa/gh-action-pypi-publish@release/v1
58
+
59
+ publish-testpypi:
60
+ name: Publish to TestPyPI
61
+ needs: build
62
+ if: >-
63
+ github.event_name == 'release' &&
64
+ github.event.action == 'published' &&
65
+ github.event.release.prerelease
66
+ runs-on: ubuntu-latest
67
+ environment:
68
+ name: testpypi_env
69
+ url: https://test.pypi.org/project/snipepy/
70
+ permissions:
71
+ id-token: write
72
+ steps:
73
+ - name: Download build artifacts
74
+ uses: actions/download-artifact@v4
75
+ with:
76
+ name: dist
77
+ path: dist/
78
+
79
+ - name: Publish to TestPyPI
80
+ uses: pypa/gh-action-pypi-publish@release/v1
81
+ with:
82
+ repository-url: https://test.pypi.org/legacy/
@@ -0,0 +1,118 @@
1
+ __pycache__/
2
+ .zed
3
+ *.py[codz]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ results
11
+ downloads/
12
+ eggs/
13
+ .eggs/
14
+ lib/
15
+ lib64/
16
+ parts/
17
+ sdist/
18
+ var/
19
+ wheels/
20
+ share/python-wheels/
21
+ *.egg-info/
22
+ .installed.cfg
23
+ *.egg
24
+ MANIFEST
25
+ *.manifest
26
+ *.spec
27
+ pip-log.txt
28
+ pip-delete-this-directory.txt
29
+ htmlcov/
30
+ .tox/
31
+ .nox/
32
+ .coverage
33
+ .coverage.*
34
+ .cache
35
+ nosetests.xml
36
+ coverage.xml
37
+ *.cover
38
+ *.py.cover
39
+ .hypothesis/
40
+ .pytest_cache/
41
+ cover/
42
+ *.mo
43
+ *.pot
44
+ *.log
45
+ local_settings.py
46
+ db.sqlite3
47
+ db.sqlite3-journal
48
+ instance/
49
+ .webassets-cache
50
+ .scrapy
51
+ docs/_build/
52
+ .pybuilder/
53
+ target/
54
+ .ipynb_checkpoints
55
+ profile_default/
56
+ ipython_config.py
57
+ .python-version
58
+ Pipfile.lock
59
+ uv.lock
60
+ poetry.lock
61
+ poetry.toml
62
+ pdm.lock
63
+ pdm.toml
64
+ .pdm-python
65
+ .pdm-build/
66
+ pixi.lock
67
+ .pixi
68
+ __pypackages__/
69
+ celerybeat-schedule
70
+ celerybeat.pid
71
+ *.rdb
72
+ *.aof
73
+ *.pid
74
+ mnesia/
75
+ rabbitmq/
76
+ rabbitmq-data/
77
+ activemq-data/
78
+ *.sage.py
79
+ .env
80
+ .envrc
81
+ .venv
82
+ .test.env*
83
+ env/
84
+ venv/
85
+ ENV/
86
+ .env
87
+ env.bak/
88
+ venv.bak/
89
+ .spyderproject
90
+ .spyproject
91
+ .ropeproject
92
+ /site
93
+ .mypy_cache/
94
+ .dmypy.json
95
+ dmypy.json
96
+ .pyre/
97
+ .pytype/
98
+ cython_debug/
99
+ .idea/
100
+ .abstra/
101
+ .vscode/
102
+ .ruff_cache/
103
+ .pypirc
104
+ marimo/_static/
105
+ marimo/_lsp/
106
+ __marimo__/
107
+ .streamlit/secrets.toml
108
+ docs/scenarios/
109
+ .DS_Store
110
+ .TODO*
111
+ .test.api.token
112
+ .claude*
113
+ .agents*
114
+ coverage
115
+
116
+ # Local issue tracker (private, not pushed to remote)
117
+ .issues/
118
+ .test_pypi_publish.sh