glpi-python-client 0.6.4__tar.gz → 0.6.5__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 (170) hide show
  1. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/CHANGELOG.md +23 -0
  2. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/PKG-INFO +1 -1
  3. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/user_guide.rst +19 -0
  4. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/__init__.py +1 -1
  5. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/content/conversion.py +59 -0
  6. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/management/_document.py +14 -0
  7. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/pyproject.toml +1 -1
  8. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-asset-workflow/SKILL.md +1 -1
  9. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-client-setup/SKILL.md +1 -1
  10. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-contract-workflow/SKILL.md +1 -1
  11. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-document-workflow/SKILL.md +1 -1
  12. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-knowledge-base/SKILL.md +1 -1
  13. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-plugin-fields/SKILL.md +1 -1
  14. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-reporting-and-context/SKILL.md +1 -1
  15. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-team-members/SKILL.md +1 -1
  16. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-ticket-timeline/SKILL.md +1 -1
  17. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-ticket-workflow/SKILL.md +1 -1
  18. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/glpi-user-location-provisioning/SKILL.md +1 -1
  19. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/.gitignore +0 -0
  20. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/.pre-commit-config.yaml +0 -0
  21. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/.readthedocs.yaml +0 -0
  22. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/CONTRIBUTING.md +0 -0
  23. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/LICENSE +0 -0
  24. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/README.md +0 -0
  25. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/_static/.gitkeep +0 -0
  26. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/api_reference.rst +0 -0
  27. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/conf.py +0 -0
  28. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/development.md +0 -0
  29. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/development_rtd.rst +0 -0
  30. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/index.rst +0 -0
  31. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/installation.rst +0 -0
  32. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/publishing.md +0 -0
  33. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/publishing_rtd.rst +0 -0
  34. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/docs/sponsoring.rst +0 -0
  35. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/__init__.py +0 -0
  36. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/_concurrency.py +0 -0
  37. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/_testing.py +0 -0
  38. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/auth/__init__.py +0 -0
  39. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/auth/_v1_session.py +0 -0
  40. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/auth/auth.py +0 -0
  41. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/__init__.py +0 -0
  42. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/_base_client.py +0 -0
  43. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/__init__.py +0 -0
  44. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/administration/__init__.py +0 -0
  45. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/administration/_entity.py +0 -0
  46. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/administration/_user.py +0 -0
  47. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assets/__init__.py +0 -0
  48. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assets/_computer.py +0 -0
  49. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/__init__.py +0 -0
  50. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/_team.py +0 -0
  51. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/_ticket.py +0 -0
  52. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/timeline/__init__.py +0 -0
  53. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/timeline/_document.py +0 -0
  54. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/timeline/_followup.py +0 -0
  55. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/timeline/_solution.py +0 -0
  56. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/assistance/timeline/_task.py +0 -0
  57. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/dropdowns/__init__.py +0 -0
  58. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/dropdowns/_contract_type.py +0 -0
  59. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/dropdowns/_location.py +0 -0
  60. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/knowledgebase/__init__.py +0 -0
  61. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/knowledgebase/_article.py +0 -0
  62. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/knowledgebase/_category.py +0 -0
  63. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/knowledgebase/_comment.py +0 -0
  64. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/knowledgebase/_revision.py +0 -0
  65. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/management/__init__.py +0 -0
  66. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/management/_contract.py +0 -0
  67. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/management/_document.py +0 -0
  68. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/plugins/__init__.py +0 -0
  69. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/api/plugins/_fields.py +0 -0
  70. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/client.py +0 -0
  71. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/commons/__init__.py +0 -0
  72. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/commons/_config.py +0 -0
  73. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/commons/_constants.py +0 -0
  74. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/commons/_filters.py +0 -0
  75. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/commons/_http.py +0 -0
  76. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/commons/_payloads.py +0 -0
  77. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/commons/_transport.py +0 -0
  78. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/custom/__init__.py +0 -0
  79. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/custom/_statistics.py +0 -0
  80. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_async/clients/custom/_ticket_context.py +0 -0
  81. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_errors.py +0 -0
  82. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/__init__.py +0 -0
  83. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/_concurrency.py +0 -0
  84. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/_testing.py +0 -0
  85. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/auth/__init__.py +0 -0
  86. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/auth/_v1_session.py +0 -0
  87. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/auth/auth.py +0 -0
  88. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/__init__.py +0 -0
  89. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/_base_client.py +0 -0
  90. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/__init__.py +0 -0
  91. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/administration/__init__.py +0 -0
  92. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/administration/_entity.py +0 -0
  93. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/administration/_user.py +0 -0
  94. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assets/__init__.py +0 -0
  95. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assets/_computer.py +0 -0
  96. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/__init__.py +0 -0
  97. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/_team.py +0 -0
  98. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/_ticket.py +0 -0
  99. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/timeline/__init__.py +0 -0
  100. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/timeline/_document.py +0 -0
  101. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/timeline/_followup.py +0 -0
  102. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/timeline/_solution.py +0 -0
  103. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/assistance/timeline/_task.py +0 -0
  104. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/dropdowns/__init__.py +0 -0
  105. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/dropdowns/_contract_type.py +0 -0
  106. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/dropdowns/_location.py +0 -0
  107. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/knowledgebase/__init__.py +0 -0
  108. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/knowledgebase/_article.py +0 -0
  109. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/knowledgebase/_category.py +0 -0
  110. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/knowledgebase/_comment.py +0 -0
  111. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/knowledgebase/_revision.py +0 -0
  112. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/management/__init__.py +0 -0
  113. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/management/_contract.py +0 -0
  114. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/management/_document.py +0 -0
  115. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/plugins/__init__.py +0 -0
  116. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/api/plugins/_fields.py +0 -0
  117. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/client.py +0 -0
  118. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/commons/__init__.py +0 -0
  119. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/commons/_config.py +0 -0
  120. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/commons/_constants.py +0 -0
  121. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/commons/_filters.py +0 -0
  122. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/commons/_http.py +0 -0
  123. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/commons/_payloads.py +0 -0
  124. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/commons/_transport.py +0 -0
  125. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/custom/__init__.py +0 -0
  126. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/custom/_statistics.py +0 -0
  127. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/_sync/clients/custom/_ticket_context.py +0 -0
  128. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/content/__init__.py +0 -0
  129. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/__init__.py +0 -0
  130. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/_base.py +0 -0
  131. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/__init__.py +0 -0
  132. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/_common.py +0 -0
  133. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/_content.py +0 -0
  134. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/administration/__init__.py +0 -0
  135. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/administration/_entity.py +0 -0
  136. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/administration/_user.py +0 -0
  137. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assets/__init__.py +0 -0
  138. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assets/_computer.py +0 -0
  139. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assets/_contract_item.py +0 -0
  140. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/__init__.py +0 -0
  141. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/_team.py +0 -0
  142. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/_ticket.py +0 -0
  143. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/timeline/__init__.py +0 -0
  144. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/timeline/_document.py +0 -0
  145. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/timeline/_followup.py +0 -0
  146. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/timeline/_solution.py +0 -0
  147. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/assistance/timeline/_task.py +0 -0
  148. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/dropdowns/__init__.py +0 -0
  149. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/dropdowns/_contract_type.py +0 -0
  150. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/dropdowns/_location.py +0 -0
  151. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/enums.py +0 -0
  152. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/knowledgebase/__init__.py +0 -0
  153. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/knowledgebase/_article.py +0 -0
  154. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/knowledgebase/_category.py +0 -0
  155. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/knowledgebase/_comment.py +0 -0
  156. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/knowledgebase/_revision.py +0 -0
  157. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/management/__init__.py +0 -0
  158. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/management/_contract.py +0 -0
  159. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/management/_contract_cost.py +0 -0
  160. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/management/_document_item.py +0 -0
  161. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/plugins/__init__.py +0 -0
  162. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/api_schema/plugins/_fields.py +0 -0
  163. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/custom_schema/__init__.py +0 -0
  164. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/models/custom_schema/_ticket_context.py +0 -0
  165. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/py.typed +0 -0
  166. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/rsql.py +0 -0
  167. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/testing/__init__.py +0 -0
  168. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/testing/fixtures.py +0 -0
  169. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/glpi_python_client/testing/utils.py +0 -0
  170. {glpi_python_client-0.6.4 → glpi_python_client-0.6.5}/skills/README.md +0 -0
@@ -4,6 +4,29 @@ All notable changes to this project are documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## 0.6.5 — 2026-10-14
8
+
9
+ A patch release that lets a caller find the Document behind an image GLPI left
10
+ as a raw `data:` URI. GLPI may keep a large pasted image in the stored body as
11
+ `<img id="..." src="data:image/png;base64,...">` instead of rewriting it into
12
+ a document link, while still creating its Document, whose tag equals the
13
+ image's `id`. Existing methods are unchanged.
14
+
15
+ ### Added
16
+
17
+ - **`Link.image_id`**, a new last field of the `Link` the `rewrite_link`
18
+ callback receives: for an `<img>`, the value of its `id` attribute (trimmed;
19
+ `None` when absent or blank); always `None` for a link.
20
+ - **`GlpiContentConverter.data_image_ids(html)`** returns, in document order
21
+ and without duplicates, the `id` of every `<img>` whose `src` is a `data:`
22
+ URI, so a caller can tell whether it needs to read any Document at all. It
23
+ does not decode the base64, and leaves out an image inside `<pre>`, `<code>`,
24
+ `<kbd>` or `<samp>`, which the reader never offers to `rewrite_link`.
25
+ - **`GetDocument.tag`**, a read-only property: the Document's tag from
26
+ `extra_payload`, or `None` when absent or not a non-empty string. GLPI sets a
27
+ tag on the Documents it creates from an upload or an editor paste, images or
28
+ not.
29
+
7
30
  ## 0.6.4 — 2026-10-12
8
31
 
9
32
  A patch release that reads the documents GLPI links to a followup. GLPI's
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: glpi-python-client
3
- Version: 0.6.4
3
+ Version: 0.6.5
4
4
  Summary: A typed Python client for GLPI ITSM APIs.
5
5
  Project-URL: Homepage, https://github.com/baraline/glpi_python_client
6
6
  Project-URL: Documentation, https://glpi-python-client.readthedocs.io/en/latest/
@@ -2007,6 +2007,25 @@ other type raises ``TypeError``. It is not called for a value passed through
2007
2007
  as Markdown (``plain_text_is_markdown=True``), nor for a body read as its text.
2008
2008
  ``easyvista-python-client`` 0.4.3 carries the same hook.
2009
2009
 
2010
+ GLPI does not always rewrite a pasted image into a document link. A large one
2011
+ can stay in the stored body as ``<img id="tag-1" src="data:image/png;base64,...">``
2012
+ while GLPI still creates its Document, whose tag is the image's ``id``. For
2013
+ such an image ``Link.image_id`` is that ``id`` and ``href`` is the data URI;
2014
+ ``GlpiContentConverter.data_image_ids(html)`` lists those ids without
2015
+ converting, so a caller reads Documents only when a body needs it. A
2016
+ :class:`~glpi_python_client.models.GetDocument` exposes its tag as ``tag``:
2017
+
2018
+ .. code-block:: python
2019
+
2020
+ ids = GlpiContentConverter.data_image_ids(body)
2021
+ if ids:
2022
+ by_tag = {d.tag: d for d in documents if d.tag}
2023
+ matched = [by_tag[i] for i in ids if i in by_tag]
2024
+
2025
+ The ``id`` is body text, and anyone who can write the body can forge it. Match
2026
+ it only against Documents the caller already trusts, such as the same
2027
+ ticket's own, never against every Document the instance holds.
2028
+
2010
2029
  It is not a sanitiser
2011
2030
  ^^^^^^^^^^^^^^^^^^^^^
2012
2031
 
@@ -133,7 +133,7 @@ from glpi_python_client.rsql import (
133
133
  date_window,
134
134
  )
135
135
 
136
- __version__ = "0.6.4"
136
+ __version__ = "0.6.5"
137
137
 
138
138
  __all__ = [
139
139
  "AsyncGlpiClient",
@@ -179,6 +179,30 @@ def _plain_text_html(text: str) -> str:
179
179
  return "<p>" + "<br>".join(lines) + "</p>"
180
180
 
181
181
 
182
+ #: What a browser strips from the front of a URL, and drops from inside one.
183
+ _URL_LEADING = "".join(chr(c) for c in range(0x21))
184
+ _URL_INNER = str.maketrans("", "", "\t\r\n")
185
+
186
+ #: The elements inside which the reader writes no image, so offers none.
187
+ _UNFORMATTED = ("pre", "code", "kbd", "samp")
188
+
189
+
190
+ def _is_data_uri(src: str) -> bool:
191
+ """Whether a browser reads ``src`` as a ``data:`` URI.
192
+
193
+ The scheme is case-insensitive, leading C0 controls and spaces are
194
+ stripped, and tabs and line breaks are dropped wherever they are.
195
+ """
196
+
197
+ return src.lstrip(_URL_LEADING).translate(_URL_INNER).casefold().startswith("data:")
198
+
199
+
200
+ def _image_id(el: Tag) -> str | None:
201
+ """The trimmed ``id`` of an element, or ``None`` when it has none."""
202
+
203
+ return str(el.get("id") or "").strip() or None
204
+
205
+
182
206
  def _soup(html: str) -> BeautifulSoup:
183
207
  """Parse ``html`` and drop what a browser does not display."""
184
208
 
@@ -402,6 +426,12 @@ class Link:
402
426
  enclosing_href : str or None
403
427
  For an ``<img>`` inside a link, that link's ``href``; ``None``
404
428
  otherwise. The image is read before the link around it.
429
+ image_id : str or None
430
+ For an ``<img>``, the value of its ``id`` attribute, trimmed, or
431
+ ``None`` when it has none or the element is a link. GLPI sets it to
432
+ the tag of the Document it created for an image it has not rewritten
433
+ into a document link, and that Document carries the same value as its
434
+ tag, so a caller can find it.
405
435
  """
406
436
 
407
437
  href: str
@@ -410,6 +440,7 @@ class Link:
410
440
  image: bool = False
411
441
  document_id: int | None = None
412
442
  enclosing_href: str | None = None
443
+ image_id: str | None = None
413
444
 
414
445
 
415
446
  #: A ``rewrite_link`` callback: called with each link and image a read meets,
@@ -664,6 +695,7 @@ class _Converter(MarkdownConverter):
664
695
  enclosing_href=(
665
696
  None if around is None else str(around.get("href") or "")
666
697
  ),
698
+ image_id=_image_id(el),
667
699
  )
668
700
  )
669
701
  if isinstance(answer, str):
@@ -1021,6 +1053,33 @@ class GlpiContentConverter:
1021
1053
  document_id = int(values[0])
1022
1054
  return document_id if document_id > 0 else None
1023
1055
 
1056
+ @staticmethod
1057
+ def data_image_ids(html: str) -> tuple[str, ...]:
1058
+ """Return the ``id`` of every image a body keeps as a ``data:`` URI.
1059
+
1060
+ Each ``<img>`` whose ``src`` a browser reads as a ``data:`` URI and
1061
+ that has a non-empty ``id`` contributes it, in document order and
1062
+ without repeats. The base64 is not decoded. An image inside ``<pre>``,
1063
+ ``<code>``, ``<kbd>`` or ``<samp>`` is left out: the reader shows it
1064
+ as no image, so it never offers it to ``rewrite_link`` either.
1065
+
1066
+ GLPI sets a tag on the Documents it creates from an upload or an
1067
+ editor paste, images or not. For an image it has not rewritten into a
1068
+ document link, that tag is the ``id`` of the ``<img>``
1069
+ (:attr:`Link.image_id`, :attr:`GetDocument.tag`). A caller calls this
1070
+ first, to decide whether it needs to read any Document at all.
1071
+ """
1072
+
1073
+ if "<" not in html:
1074
+ return ()
1075
+ ids = (
1076
+ _image_id(img)
1077
+ for img in _soup(html).find_all("img")
1078
+ if _is_data_uri(str(img.get("src") or ""))
1079
+ and img.find_parent(_UNFORMATTED) is None
1080
+ )
1081
+ return tuple(dict.fromkeys(i for i in ids if i is not None))
1082
+
1024
1083
  @staticmethod
1025
1084
  def document_image(
1026
1085
  document_id: int,
@@ -61,6 +61,20 @@ class GetDocument(GlpiModel):
61
61
  mime: str | None = None
62
62
  sha1sum: str | None = None
63
63
 
64
+ @property
65
+ def tag(self) -> str | None:
66
+ """The tag GLPI gave the Document, or ``None``.
67
+
68
+ GLPI sets a tag on the Documents it creates from an upload or an
69
+ editor paste, images or not. For an image it has not rewritten into
70
+ a document link, it is the ``id`` of the ``<img>`` left in the body
71
+ (see ``GlpiContentConverter.data_image_ids``). Read from
72
+ ``extra_payload``; ``None`` when absent, empty or not a string.
73
+ """
74
+
75
+ value = self.extra_payload.get("tag")
76
+ return value if isinstance(value, str) and value else None
77
+
64
78
 
65
79
  class PostDocument(GlpiModel):
66
80
  """Request body for ``POST /Management/Document``.
@@ -35,7 +35,7 @@ exclude = [
35
35
 
36
36
  [project]
37
37
  name = "glpi-python-client"
38
- version = "0.6.4"
38
+ version = "0.6.5"
39
39
  description = "A typed Python client for GLPI ITSM APIs."
40
40
  readme = "README.md"
41
41
  requires-python = ">=3.11"
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and credentials allowed to read or write assets."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Asset Workflow
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to a GLPI v2 API, and valid GLPI credentials."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Client Setup
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and credentials allowed to read or write contracts."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Contract Workflow
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and v1 credentials configured on the client for binary uploads."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Document Workflow
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and — for category writes only — a legacy v1 session (v1_base_url + v1_user_token)."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Knowledge Base
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, the GLPI Fields plugin installed server-side, and a legacy v1 session (v1_base_url + v1_user_token) — every method in this family goes over the v1 API."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Plugin Fields
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and credentials allowed to read tickets, tasks, users, entities, and timeline records."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Reporting And Context
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and credentials allowed to manage ticket teams."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Team Members
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, and network access to the GLPI v2 API."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Ticket Timeline
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and credentials accepted by GlpiClient."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI Ticket Workflow
@@ -5,7 +5,7 @@ license: MIT
5
5
  compatibility: "Requires Python 3.11+, glpi-python-client, network access to the GLPI v2 API, and credentials allowed to read or write users, locations, and entities."
6
6
  metadata:
7
7
  package: glpi-python-client
8
- version: "0.6.4"
8
+ version: "0.6.5"
9
9
  ---
10
10
 
11
11
  # GLPI User, Location, And Entity Provisioning