libredte-lib-sdk 0.5.1__tar.gz → 0.5.2__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 (85) hide show
  1. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/PKG-INFO +1 -1
  2. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/identifier/models.py +8 -0
  3. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/pyproject.toml +1 -1
  4. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/test_models.py +27 -0
  5. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/.claude/scheduled_tasks.lock +0 -0
  6. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/.github/workflows/ci.yml +0 -0
  7. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/.github/workflows/docs.yml +0 -0
  8. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/.gitignore +0 -0
  9. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/.readthedocs.yaml +0 -0
  10. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/CLAUDE.md +0 -0
  11. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/LICENSE +0 -0
  12. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/Makefile +0 -0
  13. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/README.rst +0 -0
  14. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/docs/Makefile +0 -0
  15. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/docs/conf.py +0 -0
  16. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/docs/index.rst +0 -0
  17. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/__init__.py +0 -0
  18. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/__init__.py +0 -0
  19. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/book/__init__.py +0 -0
  20. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/book/builder.py +0 -0
  21. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/book/loader.py +0 -0
  22. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/book/models.py +0 -0
  23. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/book/validator.py +0 -0
  24. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/common.py +0 -0
  25. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/__init__.py +0 -0
  26. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/builder.py +0 -0
  27. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/dispatcher.py +0 -0
  28. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/examples.py +0 -0
  29. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/loader.py +0 -0
  30. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/models.py +0 -0
  31. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/renderer.py +0 -0
  32. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/document/validator.py +0 -0
  33. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/enums.py +0 -0
  34. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/exchange/__init__.py +0 -0
  35. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/exchange/document_response.py +0 -0
  36. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/exchange/models.py +0 -0
  37. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/identifier/__init__.py +0 -0
  38. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/identifier/caf_faker.py +0 -0
  39. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/identifier/caf_loader.py +0 -0
  40. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/identifier/caf_validator.py +0 -0
  41. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/integration/__init__.py +0 -0
  42. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/integration/models.py +0 -0
  43. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/integration/sii_dte.py +0 -0
  44. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/integration/sii_rcv.py +0 -0
  45. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/integration/sii_rtc.py +0 -0
  46. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/ownership_transfer/__init__.py +0 -0
  47. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/ownership_transfer/aec.py +0 -0
  48. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/ownership_transfer/models.py +0 -0
  49. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/trading_parties/__init__.py +0 -0
  50. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/trading_parties/mandatario_manager.py +0 -0
  51. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/billing/trading_parties/models.py +0 -0
  52. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/client.py +0 -0
  53. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/exceptions.py +0 -0
  54. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/human_resources/__init__.py +0 -0
  55. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/human_resources/integration/__init__.py +0 -0
  56. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/human_resources/integration/previred_provider.py +0 -0
  57. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/human_resources/payroll/__init__.py +0 -0
  58. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/human_resources/payroll/calculator.py +0 -0
  59. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/human_resources/payroll/renderer.py +0 -0
  60. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/py.typed +0 -0
  61. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/sdk.py +0 -0
  62. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/system/__init__.py +0 -0
  63. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/system/certificate/__init__.py +0 -0
  64. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/system/certificate/loader.py +0 -0
  65. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/system/repository/__init__.py +0 -0
  66. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/libredte_lib_sdk/system/repository/catalog.py +0 -0
  67. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/__init__.py +0 -0
  68. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/conftest.py +0 -0
  69. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/__init__.py +0 -0
  70. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/conftest.py +0 -0
  71. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_book.py +0 -0
  72. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_caf.py +0 -0
  73. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_certificate_loader.py +0 -0
  74. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_document_loader.py +0 -0
  75. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_document_rendering.py +0 -0
  76. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_document_validation.py +0 -0
  77. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_examples.py +0 -0
  78. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_exchange.py +0 -0
  79. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_human_resources.py +0 -0
  80. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_operation_not_found.py +0 -0
  81. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_ownership_transfer.py +0 -0
  82. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/integration/test_repository.py +0 -0
  83. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/test_client.py +0 -0
  84. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/test_exceptions.py +0 -0
  85. {libredte_lib_sdk-0.5.1 → libredte_lib_sdk-0.5.2}/tests/test_services.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: libredte-lib-sdk
3
- Version: 0.5.1
3
+ Version: 0.5.2
4
4
  Summary: SDK Python para la API de LibreDTE Lib (facturacion electronica de Chile).
5
5
  Project-URL: Homepage, https://www.libredte.cl
6
6
  Project-URL: Source, https://github.com/libredte/libredte-lib-sdk-python
@@ -47,6 +47,14 @@ class Caf(XmlPayloadMixin):
47
47
  def from_api(cls, data: dict[str, Any]) -> Caf:
48
48
  """Construye un `Caf` desde el `data` que devuelve la API."""
49
49
  ambiente = data.get('ambiente')
50
+ if isinstance(ambiente, dict):
51
+ # La API serializa el enum de PHP (`SiiEnvironment: int`,
52
+ # caso `STAGING = 1` allá) como `{"name": ..., "value":
53
+ # ...}` — el nombre no calza con el de acá (`CERTIFICATION`
54
+ # en vez de `STAGING`, mismo ambiente de certificación del
55
+ # SII), pero el `value` entero sí es el mismo en ambos
56
+ # lados, así que se arma el enum desde ahí.
57
+ ambiente = ambiente.get('value')
50
58
  return cls(
51
59
  id=data['id'],
52
60
  emisor=data['emisor'],
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "libredte-lib-sdk"
7
- version = "0.5.1"
7
+ version = "0.5.2"
8
8
  description = "SDK Python para la API de LibreDTE Lib (facturacion electronica de Chile)."
9
9
  readme = "README.rst"
10
10
  license = { file = "LICENSE" }
@@ -282,6 +282,33 @@ def test_caf_from_api_ambiente_is_none_for_a_fake_caf():
282
282
  assert caf.certificacion is None
283
283
 
284
284
 
285
+ def test_caf_from_api_ambiente_as_object_uses_its_value():
286
+ """La API a veces serializa el enum de PHP como `{name, value}`."""
287
+ caf = Caf.from_api(
288
+ {
289
+ 'id': 'CAF33D1H100',
290
+ 'emisor': {'rut': '76192083-9', 'razon_social': 'SASCO SpA'},
291
+ 'tipoDocumento': 33,
292
+ 'folioDesde': 1,
293
+ 'folioHasta': 100,
294
+ 'cantidadFolios': 100,
295
+ 'fechaAutorizacion': '2026-01-01',
296
+ 'fechaVencimiento': '2026-06-30',
297
+ 'mesesAutorizacion': 2.17,
298
+ 'vigente': True,
299
+ 'vence': True,
300
+ 'idk': 100,
301
+ 'ambiente': {'name': 'STAGING', 'value': 1},
302
+ 'certificacion': 1,
303
+ 'publicKey': '-----BEGIN PUBLIC KEY-----',
304
+ 'privateKey': '-----BEGIN PRIVATE KEY-----',
305
+ 'xml': base64.b64encode(b'<AUTORIZACION/>').decode(),
306
+ },
307
+ )
308
+
309
+ assert caf.ambiente is SiiEnvironment.CERTIFICATION
310
+
311
+
285
312
  def test_send_result_reads_track_id():
286
313
  assert SendXmlDocumentResponse.from_api({'track_id': 456}).track_id == 456
287
314
  assert SendXmlDocumentResponse.from_api({}).track_id is None