anncsu-sdk 0.0.10.dev3__tar.gz → 0.0.10.dev5__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 (527) hide show
  1. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/PKG-INFO +1 -1
  2. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/CLI.md +38 -14
  3. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/VALIDATION.md +2 -0
  4. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdk-accessi.md +25 -2
  5. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdk-odonimi.md +29 -1
  6. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/__init__.py +10 -1
  7. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/accesso_validation.py +68 -0
  8. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/models/validated.py +77 -2
  9. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/accesso.py +31 -10
  10. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/odonimo.py +48 -3
  11. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/__init__.py +6 -0
  12. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/odonimo_validation.py +60 -0
  13. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/validated.py +70 -7
  14. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/accessi/test_accesso_validation.py +134 -1
  15. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_accesso.py +167 -0
  16. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_odonimo.py +292 -0
  17. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/odonimi/test_odonimo_validation.py +180 -3
  18. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.devcontainer/README.md +0 -0
  19. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.devcontainer/devcontainer.json +0 -0
  20. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.devcontainer/setup.sh +0 -0
  21. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.gitattributes +0 -0
  22. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.github/workflows/README.md +0 -0
  23. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.github/workflows/ci.yml +0 -0
  24. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.github/workflows/publish.yml +0 -0
  25. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.gitignore +0 -0
  26. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.pre-commit-config.yaml +0 -0
  27. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.python-version +0 -0
  28. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/gen.lock +0 -0
  29. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/gen.yaml +0 -0
  30. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/out.accessi.openapi.yaml +0 -0
  31. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/out.coordinate.openapi.yaml +0 -0
  32. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/out.odonimi.openapi.yaml +0 -0
  33. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/out.openapi.yaml +0 -0
  34. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/workflow.lock +0 -0
  35. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.speakeasy/workflow.yaml +0 -0
  36. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/.vscode/settings.json +0 -0
  37. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/CONTRIBUTING.md +0 -0
  38. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/LICENSE +0 -0
  39. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/README.md +0 -0
  40. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/USAGE.md +0 -0
  41. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/SECURITY.md +0 -0
  42. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetpathparambadrequesterror.md +0 -0
  43. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetpathparaminternalservererror.md +0 -0
  44. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetpathparammethodnotallowederror.md +0 -0
  45. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetpathparamnotfounderror.md +0 -0
  46. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetpathparamunprocessableentityerror.md +0 -0
  47. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetqueryparambadrequesterror.md +0 -0
  48. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetqueryparaminternalservererror.md +0 -0
  49. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetqueryparammethodnotallowederror.md +0 -0
  50. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetqueryparamnotfounderror.md +0 -0
  51. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessigetqueryparamunprocessableentityerror.md +0 -0
  52. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessipostbadrequesterror.md +0 -0
  53. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessipostinternalservererror.md +0 -0
  54. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessipostmethodnotallowederror.md +0 -0
  55. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessipostnotfounderror.md +0 -0
  56. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessipostunprocessableentityerror.md +0 -0
  57. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetpathparambadrequesterror.md +0 -0
  58. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetpathparaminternalservererror.md +0 -0
  59. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetpathparammethodnotallowederror.md +0 -0
  60. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetpathparamnotfounderror.md +0 -0
  61. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetpathparamunprocessableentityerror.md +0 -0
  62. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetqueryparambadrequesterror.md +0 -0
  63. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetqueryparaminternalservererror.md +0 -0
  64. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetqueryparammethodnotallowederror.md +0 -0
  65. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetqueryparamnotfounderror.md +0 -0
  66. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiproggetqueryparamunprocessableentityerror.md +0 -0
  67. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiprogpostbadrequesterror.md +0 -0
  68. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiprogpostinternalservererror.md +0 -0
  69. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiprogpostmethodnotallowederror.md +0 -0
  70. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiprogpostnotfounderror.md +0 -0
  71. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoaccessiprogpostunprocessableentityerror.md +0 -0
  72. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetpathparambadrequesterror.md +0 -0
  73. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetpathparaminternalservererror.md +0 -0
  74. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetpathparammethodnotallowederror.md +0 -0
  75. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetpathparamnotfounderror.md +0 -0
  76. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetpathparamunprocessableentityerror.md +0 -0
  77. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetqueryparambadrequesterror.md +0 -0
  78. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetqueryparaminternalservererror.md +0 -0
  79. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetqueryparammethodnotallowederror.md +0 -0
  80. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetqueryparamnotfounderror.md +0 -0
  81. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimigetqueryparamunprocessableentityerror.md +0 -0
  82. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimipostbadrequesterror.md +0 -0
  83. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimipostinternalservererror.md +0 -0
  84. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimipostmethodnotallowederror.md +0 -0
  85. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimipostnotfounderror.md +0 -0
  86. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimipostunprocessableentityerror.md +0 -0
  87. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetpathparambadrequesterror.md +0 -0
  88. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetpathparaminternalservererror.md +0 -0
  89. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetpathparammethodnotallowederror.md +0 -0
  90. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetpathparamnotfounderror.md +0 -0
  91. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetpathparamunprocessableentityerror.md +0 -0
  92. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetqueryparambadrequesterror.md +0 -0
  93. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetqueryparaminternalservererror.md +0 -0
  94. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetqueryparammethodnotallowederror.md +0 -0
  95. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetqueryparamnotfounderror.md +0 -0
  96. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiproggetqueryparamunprocessableentityerror.md +0 -0
  97. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiprogpostbadrequesterror.md +0 -0
  98. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiprogpostinternalservererror.md +0 -0
  99. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiprogpostmethodnotallowederror.md +0 -0
  100. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiprogpostnotfounderror.md +0 -0
  101. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/elencoodonimiprogpostunprocessableentityerror.md +0 -0
  102. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetpathparambadrequesterror.md +0 -0
  103. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetpathparaminternalservererror.md +0 -0
  104. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetpathparammethodnotallowederror.md +0 -0
  105. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetpathparamunprocessableentityerror.md +0 -0
  106. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetqueryparambadrequesterror.md +0 -0
  107. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetqueryparaminternalservererror.md +0 -0
  108. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetqueryparammethodnotallowederror.md +0 -0
  109. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessogetqueryparamunprocessableentityerror.md +0 -0
  110. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessopostbadrequesterror.md +0 -0
  111. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessopostinternalservererror.md +0 -0
  112. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessopostmethodnotallowederror.md +0 -0
  113. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteaccessopostunprocessableentityerror.md +0 -0
  114. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetpathparambadrequesterror.md +0 -0
  115. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetpathparaminternalservererror.md +0 -0
  116. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetpathparammethodnotallowederror.md +0 -0
  117. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetpathparamunprocessableentityerror.md +0 -0
  118. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetqueryparambadrequesterror.md +0 -0
  119. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetqueryparaminternalservererror.md +0 -0
  120. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetqueryparammethodnotallowederror.md +0 -0
  121. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimogetqueryparamunprocessableentityerror.md +0 -0
  122. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimopostbadrequesterror.md +0 -0
  123. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimopostinternalservererror.md +0 -0
  124. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimopostmethodnotallowederror.md +0 -0
  125. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/esisteodonimopostunprocessableentityerror.md +0 -0
  126. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetpathparambadrequesterror.md +0 -0
  127. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetpathparaminternalservererror.md +0 -0
  128. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetpathparammethodnotallowederror.md +0 -0
  129. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetpathparamnotfounderror.md +0 -0
  130. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetpathparamunprocessableentityerror.md +0 -0
  131. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetqueryparambadrequesterror.md +0 -0
  132. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetqueryparaminternalservererror.md +0 -0
  133. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetqueryparammethodnotallowederror.md +0 -0
  134. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetqueryparamnotfounderror.md +0 -0
  135. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccgetqueryparamunprocessableentityerror.md +0 -0
  136. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccpostbadrequesterror.md +0 -0
  137. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccpostinternalservererror.md +0 -0
  138. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccpostmethodnotallowederror.md +0 -0
  139. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccpostnotfounderror.md +0 -0
  140. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazaccpostunprocessableentityerror.md +0 -0
  141. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetpathparambadrequesterror.md +0 -0
  142. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetpathparaminternalservererror.md +0 -0
  143. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetpathparammethodnotallowederror.md +0 -0
  144. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetpathparamnotfounderror.md +0 -0
  145. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetpathparamunprocessableentityerror.md +0 -0
  146. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetqueryparambadrequesterror.md +0 -0
  147. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetqueryparaminternalservererror.md +0 -0
  148. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetqueryparammethodnotallowederror.md +0 -0
  149. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetqueryparamnotfounderror.md +0 -0
  150. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareagetqueryparamunprocessableentityerror.md +0 -0
  151. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareapostbadrequesterror.md +0 -0
  152. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareapostinternalservererror.md +0 -0
  153. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareapostmethodnotallowederror.md +0 -0
  154. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareapostnotfounderror.md +0 -0
  155. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/prognazareapostunprocessableentityerror.md +0 -0
  156. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/errors/serviceunavailableerror.md +0 -0
  157. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessigetpathparamdata.md +0 -0
  158. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessigetpathparamrequest.md +0 -0
  159. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessigetpathparamresponse.md +0 -0
  160. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessigetqueryparamdata.md +0 -0
  161. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessigetqueryparamrequest.md +0 -0
  162. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessigetqueryparamresponse.md +0 -0
  163. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessipostdata.md +0 -0
  164. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessipostrequest.md +0 -0
  165. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessipostresponse.md +0 -0
  166. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiproggetpathparamdata.md +0 -0
  167. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiproggetpathparamrequest.md +0 -0
  168. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiproggetpathparamresponse.md +0 -0
  169. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiproggetqueryparamdata.md +0 -0
  170. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiproggetqueryparamrequest.md +0 -0
  171. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiproggetqueryparamresponse.md +0 -0
  172. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiprogpostdata.md +0 -0
  173. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiprogpostrequest.md +0 -0
  174. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoaccessiprogpostresponse.md +0 -0
  175. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimigetpathparamdata.md +0 -0
  176. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimigetpathparamrequest.md +0 -0
  177. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimigetpathparamresponse.md +0 -0
  178. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimigetqueryparamdata.md +0 -0
  179. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimigetqueryparamrequest.md +0 -0
  180. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimigetqueryparamresponse.md +0 -0
  181. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimipostdata.md +0 -0
  182. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimipostrequest.md +0 -0
  183. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimipostresponse.md +0 -0
  184. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiproggetpathparamdata.md +0 -0
  185. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiproggetpathparamrequest.md +0 -0
  186. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiproggetpathparamresponse.md +0 -0
  187. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiproggetqueryparamdata.md +0 -0
  188. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiproggetqueryparamrequest.md +0 -0
  189. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiproggetqueryparamresponse.md +0 -0
  190. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiprogpostdata.md +0 -0
  191. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiprogpostrequest.md +0 -0
  192. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/elencoodonimiprogpostresponse.md +0 -0
  193. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteaccessogetpathparamrequest.md +0 -0
  194. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteaccessogetpathparamresponse.md +0 -0
  195. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteaccessogetqueryparamrequest.md +0 -0
  196. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteaccessogetqueryparamresponse.md +0 -0
  197. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteaccessopostrequest.md +0 -0
  198. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteaccessopostresponse.md +0 -0
  199. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteodonimogetpathparamrequest.md +0 -0
  200. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteodonimogetpathparamresponse.md +0 -0
  201. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteodonimogetqueryparamrequest.md +0 -0
  202. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteodonimogetqueryparamresponse.md +0 -0
  203. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteodonimopostrequest.md +0 -0
  204. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/esisteodonimopostresponse.md +0 -0
  205. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccgetpathparamdata.md +0 -0
  206. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccgetpathparamrequest.md +0 -0
  207. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccgetpathparamresponse.md +0 -0
  208. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccgetqueryparamdata.md +0 -0
  209. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccgetqueryparamrequest.md +0 -0
  210. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccgetqueryparamresponse.md +0 -0
  211. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccpostdata.md +0 -0
  212. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccpostrequest.md +0 -0
  213. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazaccpostresponse.md +0 -0
  214. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareagetpathparamdata.md +0 -0
  215. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareagetpathparamrequest.md +0 -0
  216. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareagetpathparamresponse.md +0 -0
  217. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareagetqueryparamdata.md +0 -0
  218. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareagetqueryparamrequest.md +0 -0
  219. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareagetqueryparamresponse.md +0 -0
  220. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareapostdata.md +0 -0
  221. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareapostrequest.md +0 -0
  222. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/prognazareapostresponse.md +0 -0
  223. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/showstatusresponse.md +0 -0
  224. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/models/utils/retryconfig.md +0 -0
  225. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdk-coordinate.md +0 -0
  226. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdk-pa.md +0 -0
  227. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdks/anncsu/README.md +0 -0
  228. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdks/jsonpost/README.md +0 -0
  229. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdks/pathparam/README.md +0 -0
  230. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdks/queryparam/README.md +0 -0
  231. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/sdks/status/README.md +0 -0
  232. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/docs/speakeasy.md +0 -0
  233. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/.spectral.yaml +0 -0
  234. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/README.md +0 -0
  235. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/dev/Specifica API - ANNCSU - Aggiornamento accessi.yaml +0 -0
  236. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/dev/Specifica API - ANNCSU - Aggiornamento coordinate massivo.yml +0 -0
  237. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/dev/Specifica API - ANNCSU - Aggiornamento coordinate.yml +0 -0
  238. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/dev/Specifica API - ANNCSU - Aggiornamento odonimi.yaml +0 -0
  239. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/dev/Specifica API - ANNCSU /342/200/223 Consultazione per le PA.yaml" +0 -0
  240. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/oas/prod/Specifica API - ANNCSU /342/200/223 Consultazione per le PA.yaml" +0 -0
  241. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/pylintrc +0 -0
  242. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/pyproject.toml +0 -0
  243. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/scripts/create_client_assertion.py +0 -0
  244. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/scripts/post_speakeasy_generation.py +0 -0
  245. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/scripts/publish.sh +0 -0
  246. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/_version.py +0 -0
  247. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/accessi.py +0 -0
  248. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/__init__.py +0 -0
  249. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/anncsuerror.py +0 -0
  250. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/apierror.py +0 -0
  251. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/no_response_error.py +0 -0
  252. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/responsevalidationerror.py +0 -0
  253. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/rispostaerrore.py +0 -0
  254. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/errors/show_statusop.py +0 -0
  255. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/models/__init__.py +0 -0
  256. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/models/richiestaoperazione.py +0 -0
  257. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/models/rispostaoperazione.py +0 -0
  258. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/models/security.py +0 -0
  259. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/models/show_statusop.py +0 -0
  260. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/py.typed +0 -0
  261. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/sdk.py +0 -0
  262. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/sdkconfiguration.py +0 -0
  263. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/accessi/status.py +0 -0
  264. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/__init__.py +0 -0
  265. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/app.py +0 -0
  266. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/__init__.py +0 -0
  267. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/assertion.py +0 -0
  268. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/auth.py +0 -0
  269. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/bulk.py +0 -0
  270. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/config.py +0 -0
  271. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/constants.py +0 -0
  272. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/coordinate.py +0 -0
  273. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/commands/pa.py +0 -0
  274. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/cli/models.py +0 -0
  275. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/__init__.py +0 -0
  276. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/auth.py +0 -0
  277. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/basesdk.py +0 -0
  278. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/config.py +0 -0
  279. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/errors/__init__.py +0 -0
  280. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/errors/apierror.py +0 -0
  281. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/errors/audience_mismatch.py +0 -0
  282. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/errors/base.py +0 -0
  283. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/errors/digest_serialization_mismatch.py +0 -0
  284. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/errors/no_response_error.py +0 -0
  285. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/errors/responsevalidationerror.py +0 -0
  286. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/hooks/__init__.py +0 -0
  287. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/hooks/modi_hook.py +0 -0
  288. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/hooks/registration.py +0 -0
  289. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/hooks/sdkhooks.py +0 -0
  290. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/hooks/token_validation.py +0 -0
  291. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/hooks/types.py +0 -0
  292. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/httpclient.py +0 -0
  293. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/modi.py +0 -0
  294. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/pdnd_assertion.py +0 -0
  295. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/pdnd_token.py +0 -0
  296. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/__init__.py +0 -0
  297. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/basesdk.py +0 -0
  298. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/httpclient.py +0 -0
  299. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/protocols.py +0 -0
  300. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/types/__init__.py +0 -0
  301. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/types/basemodel.py +0 -0
  302. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/__init__.py +0 -0
  303. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/annotations.py +0 -0
  304. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/datetimes.py +0 -0
  305. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/dynamic_imports.py +0 -0
  306. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/enums.py +0 -0
  307. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/eventstreaming.py +0 -0
  308. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/forms.py +0 -0
  309. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/headers.py +0 -0
  310. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/logger.py +0 -0
  311. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/metadata.py +0 -0
  312. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/queryparams.py +0 -0
  313. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/requestbodies.py +0 -0
  314. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/retries.py +0 -0
  315. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/security.py +0 -0
  316. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/serializers.py +0 -0
  317. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/unmarshal_json_response.py +0 -0
  318. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/url.py +0 -0
  319. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdk/utils/values.py +0 -0
  320. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/sdkconfiguration.py +0 -0
  321. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/security.py +0 -0
  322. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/session.py +0 -0
  323. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/types/__init__.py +0 -0
  324. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/utils/__init__.py +0 -0
  325. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/validation/__init__.py +0 -0
  326. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/validation/examples.py +0 -0
  327. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/validation/response_validator.py +0 -0
  328. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/common/validation/validators.py +0 -0
  329. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/__init__.py +0 -0
  330. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/_version.py +0 -0
  331. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/bulk/__init__.py +0 -0
  332. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/bulk/db.py +0 -0
  333. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/bulk/dryrun.py +0 -0
  334. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/bulk/executor.py +0 -0
  335. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/bulk/importer.py +0 -0
  336. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/bulk/reporter.py +0 -0
  337. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/__init__.py +0 -0
  338. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/anncsuerror.py +0 -0
  339. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/apierror.py +0 -0
  340. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/coordinate_validation.py +0 -0
  341. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/no_response_error.py +0 -0
  342. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/responsevalidationerror.py +0 -0
  343. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/risposta_validation.py +0 -0
  344. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/rispostaerrore.py +0 -0
  345. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/errors/show_statusop.py +0 -0
  346. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/jsonpost.py +0 -0
  347. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/models/__init__.py +0 -0
  348. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/models/richiestaoperazione.py +0 -0
  349. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/models/rispostaoperazione.py +0 -0
  350. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/models/security.py +0 -0
  351. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/models/show_statusop.py +0 -0
  352. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/models/validated.py +0 -0
  353. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/py.typed +0 -0
  354. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/sdk.py +0 -0
  355. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/sdkconfiguration.py +0 -0
  356. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/coordinate/status.py +0 -0
  357. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/_version.py +0 -0
  358. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/__init__.py +0 -0
  359. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/anncsuerror.py +0 -0
  360. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/apierror.py +0 -0
  361. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/no_response_error.py +0 -0
  362. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/responsevalidationerror.py +0 -0
  363. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/rispostaerrore.py +0 -0
  364. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/errors/show_statusop.py +0 -0
  365. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/__init__.py +0 -0
  366. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/autprefettura.py +0 -0
  367. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/provvedimento.py +0 -0
  368. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/richiestaoperazione.py +0 -0
  369. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/rispostaoperazione.py +0 -0
  370. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/security.py +0 -0
  371. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/models/show_statusop.py +0 -0
  372. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/odonimi.py +0 -0
  373. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/py.typed +0 -0
  374. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/sdk.py +0 -0
  375. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/sdkconfiguration.py +0 -0
  376. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/odonimi/status.py +0 -0
  377. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/__init__.py +0 -0
  378. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/_hooks/__init__.py +0 -0
  379. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/_hooks/registration.py +0 -0
  380. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/_hooks/sdkhooks.py +0 -0
  381. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/_hooks/types.py +0 -0
  382. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/_version.py +0 -0
  383. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/__init__.py +0 -0
  384. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/anncsuerror.py +0 -0
  385. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/apierror.py +0 -0
  386. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoaccessigetpathparamop.py +0 -0
  387. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoaccessigetqueryparamop.py +0 -0
  388. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoaccessipostop.py +0 -0
  389. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoaccessiproggetpathparamop.py +0 -0
  390. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoaccessiproggetqueryparamop.py +0 -0
  391. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoaccessiprogpostop.py +0 -0
  392. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoodonimigetpathparamop.py +0 -0
  393. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoodonimigetqueryparamop.py +0 -0
  394. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoodonimipostop.py +0 -0
  395. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoodonimiproggetpathparamop.py +0 -0
  396. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoodonimiproggetqueryparamop.py +0 -0
  397. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/elencoodonimiprogpostop.py +0 -0
  398. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/esisteaccessogetpathparamop.py +0 -0
  399. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/esisteaccessogetqueryparamop.py +0 -0
  400. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/esisteaccessopostop.py +0 -0
  401. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/esisteodonimogetpathparamop.py +0 -0
  402. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/esisteodonimogetqueryparamop.py +0 -0
  403. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/esisteodonimopostop.py +0 -0
  404. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/no_response_error.py +0 -0
  405. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/prognazaccgetpathparamop.py +0 -0
  406. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/prognazaccgetqueryparamop.py +0 -0
  407. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/prognazaccpostop.py +0 -0
  408. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/prognazareagetpathparamop.py +0 -0
  409. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/prognazareagetqueryparamop.py +0 -0
  410. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/prognazareapostop.py +0 -0
  411. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/responsevalidationerror.py +0 -0
  412. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/errors/show_statusop.py +0 -0
  413. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/jsonpost.py +0 -0
  414. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/__init__.py +0 -0
  415. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoaccessigetpathparamop.py +0 -0
  416. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoaccessigetqueryparamop.py +0 -0
  417. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoaccessipostop.py +0 -0
  418. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoaccessiproggetpathparamop.py +0 -0
  419. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoaccessiproggetqueryparamop.py +0 -0
  420. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoaccessiprogpostop.py +0 -0
  421. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoodonimigetpathparamop.py +0 -0
  422. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoodonimigetqueryparamop.py +0 -0
  423. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoodonimipostop.py +0 -0
  424. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoodonimiproggetpathparamop.py +0 -0
  425. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoodonimiproggetqueryparamop.py +0 -0
  426. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/elencoodonimiprogpostop.py +0 -0
  427. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/esisteaccessogetpathparamop.py +0 -0
  428. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/esisteaccessogetqueryparamop.py +0 -0
  429. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/esisteaccessopostop.py +0 -0
  430. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/esisteodonimogetpathparamop.py +0 -0
  431. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/esisteodonimogetqueryparamop.py +0 -0
  432. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/esisteodonimopostop.py +0 -0
  433. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/prognazaccgetpathparamop.py +0 -0
  434. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/prognazaccgetqueryparamop.py +0 -0
  435. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/prognazaccpostop.py +0 -0
  436. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/prognazareagetpathparamop.py +0 -0
  437. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/prognazareagetqueryparamop.py +0 -0
  438. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/prognazareapostop.py +0 -0
  439. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/models/show_statusop.py +0 -0
  440. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/pathparam.py +0 -0
  441. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/py.typed +0 -0
  442. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/queryparam.py +0 -0
  443. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/sdk.py +0 -0
  444. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/sdkconfiguration.py +0 -0
  445. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/src/anncsu/pa/status.py +0 -0
  446. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/README.md +0 -0
  447. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/accessi/__init__.py +0 -0
  448. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/accessi/test_do_request_signature.py +0 -0
  449. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/accessi/test_imports.py +0 -0
  450. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/__init__.py +0 -0
  451. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/conftest.py +0 -0
  452. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_assertion.py +0 -0
  453. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_auth.py +0 -0
  454. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_config.py +0 -0
  455. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_coordinate.py +0 -0
  456. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_coordinate_bulk.py +0 -0
  457. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_duckdb_batch.py +0 -0
  458. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_main.py +0 -0
  459. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_pa.py +0 -0
  460. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_raw_output.py +0 -0
  461. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/cli/test_token_endpoint_resolution.py +0 -0
  462. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/__init__.py +0 -0
  463. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_auth_modi_integration.py +0 -0
  464. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_cli_env_override.py +0 -0
  465. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_config.py +0 -0
  466. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_imports.py +0 -0
  467. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_modi.py +0 -0
  468. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_modi_hook.py +0 -0
  469. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_pdnd_assertion.py +0 -0
  470. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_pdnd_auth_manager.py +0 -0
  471. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_pdnd_token.py +0 -0
  472. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_security.py +0 -0
  473. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_security_basemodel.py +0 -0
  474. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_session.py +0 -0
  475. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/common/test_token_validation_hook.py +0 -0
  476. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/conftest.py +0 -0
  477. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/__init__.py +0 -0
  478. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/bulk/__init__.py +0 -0
  479. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/bulk/test_db.py +0 -0
  480. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/bulk/test_dryrun.py +0 -0
  481. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/bulk/test_executor.py +0 -0
  482. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/bulk/test_importer.py +0 -0
  483. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/bulk/test_integration.py +0 -0
  484. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/bulk/test_reporter.py +0 -0
  485. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/test_coordinate_validation.py +0 -0
  486. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/test_imports.py +0 -0
  487. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/test_risposta_validation.py +0 -0
  488. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/coordinate/test_sdk_hooks_integration.py +0 -0
  489. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/__init__.py +0 -0
  490. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/coordinate/__init__.py +0 -0
  491. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/coordinate/test_jsonpost_async_httpx.py +0 -0
  492. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/coordinate/test_jsonpost_httpx.py +0 -0
  493. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/coordinate/test_status_async_httpx.py +0 -0
  494. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/coordinate/test_status_httpx.py +0 -0
  495. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/__init__.py +0 -0
  496. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/test_jsonpost_async_httpx.py +0 -0
  497. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/test_jsonpost_httpx.py +0 -0
  498. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/test_pathparam_async_httpx.py +0 -0
  499. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/test_pathparam_httpx.py +0 -0
  500. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/test_queryparam_async_httpx.py +0 -0
  501. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/test_queryparam_httpx.py +0 -0
  502. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/pa/test_status_httpx.py +0 -0
  503. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/test_sdk_instantiation.py +0 -0
  504. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/integration/test_security_in_requests.py +0 -0
  505. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/odonimi/__init__.py +0 -0
  506. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/odonimi/test_imports.py +0 -0
  507. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/pa/__init__.py +0 -0
  508. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/pa/test_imports.py +0 -0
  509. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/pa/test_response_field_mapping.py +0 -0
  510. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/test_post_speakeasy_generation.py +0 -0
  511. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/__init__.py +0 -0
  512. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/coordinate/__init__.py +0 -0
  513. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/coordinate/test_coordinate_operations_validation.py +0 -0
  514. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/coordinate/test_model_factories.py +0 -0
  515. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/coordinate/test_validators.py +0 -0
  516. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/coordinate/test_validators_property.py +0 -0
  517. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/ADVANCED_TESTING.md +0 -0
  518. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/README.md +0 -0
  519. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/README_COMPREHENSIVE_TESTS.md +0 -0
  520. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/__init__.py +0 -0
  521. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/test_all_operations_validation.py +0 -0
  522. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/test_model_factories.py +0 -0
  523. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/test_model_factories_comprehensive.py +0 -0
  524. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/test_validators.py +0 -0
  525. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/pa/test_validators_property.py +0 -0
  526. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/tests/validation/test_response_validator.py +0 -0
  527. {anncsu_sdk-0.0.10.dev3 → anncsu_sdk-0.0.10.dev5}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anncsu-sdk
3
- Version: 0.0.10.dev3
3
+ Version: 0.0.10.dev5
4
4
  Summary: ANNCSU Software Development Kit for API consumption
5
5
  Author-email: Francesco Bartoli <francesco.bartoli@geobeyond.it>
6
6
  License-File: LICENSE
@@ -1905,7 +1905,7 @@ Options:
1905
1905
  - `--codice-civico-comunale` - Codifica comunale dell'accesso
1906
1906
  - `--coord-x` / `--coord-y` / `--coord-z` - Coordinate (longitudine, latitudine, quota)
1907
1907
  - `--metodo, -m` - Metodo di rilevazione (1-4)
1908
- - `--data-valid-amm` - Data inizio validità amministrativa (formato `dd/MM/yyyy`)
1908
+ - `--data-valid-amm` - Data inizio validità amministrativa (valid calendar date, formato `dd/MM/yyyy`). No future-date bound: the accessi OAS declares none (absent = today; for delete it is the *end* of validity)
1909
1909
  - `--token-endpoint, -e` - PDND token endpoint URL
1910
1910
  - `--server-url, -s` - API server URL (auto-discovered from voucher if omitted)
1911
1911
  - `--validation/--production` - Use validation (UAT) or production environment
@@ -1913,6 +1913,10 @@ Options:
1913
1913
  - `--json` - Output as JSON
1914
1914
  - `--raw` - Print raw API response to stderr
1915
1915
 
1916
+ All constraints — including the wrapper fields (`--codcom` in Belfiore format X999, `--prognaz` ≤ 10 chars) and the `dd/MM/yyyy` date format — are validated **client-side before any API call** via `ValidatedRichiesta`/`ValidatedAccesso`: invalid input exits with code 1 and a `Validation error:` message without consuming PDND tokens. Server-side rejections (HTTP 400/404/500) are rendered with the structured ANNCSU fields: `Errore ANNCSU (codice N): messaggio` (non-ANNCSU bodies, e.g. RFC 7807 from the GovWay gateway, are shown raw).
1917
+
1918
+ > **Known limitation — explicit `null`**: the accessi schema has **11 nullable fields** (`codice_civico_comunale`, `numero`, `esponente`, `specificita`, `metrico`, `data_valid_amm`, `isolato`, and `coordinate.x/y/z/metodo`). The CLI can omit them or set a value, but cannot send an explicit `null` to clear an existing value — same limitation as `codice_comunale` in `odonimo update`. The SDK supports it (fields are `OptionalNullable` with the `UNSET` sentinel).
1919
+
1916
1920
  JSON output:
1917
1921
  ```json
1918
1922
  {
@@ -2192,17 +2196,17 @@ anncsu odonimo insert --codcom A062 --dug VIA \
2192
2196
  Options:
2193
2197
 
2194
2198
  - `--codcom, -c` - Codice comune (Belfiore code, e.g. `A062`) **[required]**
2195
- - `--dug` - DUG (e.g. `VIA`, `PIAZZA`, `STRADA`) **[required for I/R]**
2196
- - `--denom-delibera` - Denominazione delibera (uppercase applied server-side)
2197
- - `--denom-in-lingua-1` / `--denom-in-lingua-2` - Odonimo in lingua (per comuni bi/tri-lingua)
2198
- - `--denom-localita` - Denominazione località (uppercase applied)
2199
- - `--codice-comunale` - Codifica comunale dell'odonimo (no uppercase)
2200
- - `--provv-data` - Data del provvedimento (formato `dd/MM/yyyy`)
2199
+ - `--dug` - DUG (e.g. `VIA`, `PIAZZA`, `STRADA`; max 30 char) **[required for I/R]**
2200
+ - `--denom-delibera` - Denominazione ufficiale da delibera, **senza DUG** (e.g. `DELLE ORCHIDEE` for "VIA DELLE ORCHIDEE"; max 120 char, uppercase applied server-side)
2201
+ - `--denom-in-lingua-1` / `--denom-in-lingua-2` - Odonimo in lingua, **DUG inclusa** (per comuni bi/tri-lingua; max 150 char, uppercase applied)
2202
+ - `--denom-localita` - Denominazione località (max 151 char — OAS quirk; uppercase applied)
2203
+ - `--codice-comunale` - Codifica comunale dell'odonimo (max 30 char, no uppercase)
2204
+ - `--provv-data` - Data del provvedimento (valid calendar date, formato `dd/MM/yyyy`)
2201
2205
  - `--provv-protocollo` - Protocollo del provvedimento (max 70 char, no uppercase)
2202
- - `--provv-flag-delibera` - Flag delibera (`0`-`4`); `0` and `1` make `--provv-data` + `--provv-protocollo` required
2203
- - `--prefettura-data` - Data prefettura (required if `--prefettura-protocollo`)
2204
- - `--prefettura-protocollo` - Protocollo prefettura (required if `--prefettura-data`)
2205
- - `--data-valid-amm` - Data validità amministrativa (formato `dd/MM/yyyy`)
2206
+ - `--provv-flag-delibera` - Flag delibera, **only `0`-`4` accepted**; `0` and `1` make `--provv-data` + `--provv-protocollo` required
2207
+ - `--prefettura-data` - Data prefettura (`dd/MM/yyyy`; required if `--prefettura-protocollo`)
2208
+ - `--prefettura-protocollo` - Protocollo prefettura (max 70 char; required if `--prefettura-data`)
2209
+ - `--data-valid-amm` - Data validità amministrativa (`dd/MM/yyyy`). Must be **≤ today** for every operation (checked client-side); for R it must additionally be ≥ the previous validity date (checked server-side)
2206
2210
  - `--token-endpoint, -e` - PDND token endpoint URL
2207
2211
  - `--server-url, -s` - API server URL (auto-discovered from voucher if omitted)
2208
2212
  - `--validation/--production` - Use validation (UAT) or production environment
@@ -2211,6 +2215,8 @@ Options:
2211
2215
  - `--raw` - Print raw API response to stderr
2212
2216
  - `--dry-run` - I + S rollback (see `--dry-run` section below)
2213
2217
 
2218
+ All constraints above (maxLength, flag range, date format, future dates) are validated **client-side before any API call** via `ValidatedOdonimo` — invalid input exits with code 1 and a `Validation error:` message, without consuming PDND tokens. See [sdk-odonimi.md](sdk-odonimi.md#business-rules) for the full rule list.
2219
+
2214
2220
  JSON output:
2215
2221
 
2216
2222
  ```json
@@ -2241,10 +2247,22 @@ anncsu odonimo update --codcom A062 \
2241
2247
 
2242
2248
  Options:
2243
2249
 
2244
- - All `insert` options (except `--prognaz` is required, not assigned)
2245
- - `--prognaz, -p` - Progressivo nazionale dell'odonimo (required unless `--auto-resolve`)
2250
+ - All `insert` options (same fields, constraints and client-side validation — see the `insert` option list above)
2251
+ - `--prognaz, -p` - Progressivo nazionale dell'odonimo (max 10 char; required unless `--auto-resolve`)
2246
2252
  - `--auto-resolve` - Resolve `--prognaz` via PA from `--codcom` + `--denom` (see `--auto-resolve` section)
2247
- - `--denom` - Base64-encoded denomination used with `--auto-resolve`
2253
+ - `--denom` - Base64-encoded denomination used with `--auto-resolve` (lookup only — the **new** denomination goes in `--denom-delibera`)
2254
+
2255
+ Note: `R` is a **replace**, not a partial patch — read the current state first (`anncsu pa odonimo`) and re-pass the values you want to keep.
2256
+
2257
+ Server-side errors (HTTP 400/404/500) are rendered with the structured ANNCSU fields:
2258
+
2259
+ ```
2260
+ Errore ANNCSU (codice 23): Errore di validazione: ...
2261
+ ```
2262
+
2263
+ When an `R` with `--data-valid-amm` fails server-side, the CLI also prints a hint about the rule it cannot check client-side: *per l'aggiornamento (R), `data_valid_amm` deve essere ≥ della precedente data di validità dell'odonimo*. Non-ANNCSU error bodies (e.g. RFC 7807 from the GovWay gateway) are shown raw.
2264
+
2265
+ > **Known limitation — clearing `codice_comunale`**: `codice_comunale` is the only *nullable* field of the request schema (three states: omitted / value / explicit `null`). The CLI can omit it or set a value, but cannot send an explicit `"codice_comunale": null` — i.e. there is no way to **clear** an existing codifica comunale via `update`. If this becomes a real use case, a dedicated flag (e.g. `--clear-codice-comunale`) is the planned solution. The SDK supports it already: `Richiesta(codice_comunale=None, ...)` with the field explicitly set serializes to `null`.
2248
2266
 
2249
2267
  #### `anncsu odonimo delete`
2250
2268
 
@@ -2309,6 +2327,12 @@ Unlike `accesso --dry-run` (which operates on an existing accesso via test+resto
2309
2327
 
2310
2328
  **For `update --dry-run`**: `--prognaz` and `--auto-resolve` are ignored (a warning is printed) because the R is always applied to the fake odonimo generated by the preceding I.
2311
2329
 
2330
+ **Client-side validation in dry-run**: user data is validated via `ValidatedOdonimo` (same rules as the real commands — maxLength, flag range, date format, future dates) before being sent. For `update --dry-run` the user R payload is validated **after** the fake I has been created: on validation error the CLI prints `Validation error (user R):`, attempts an emergency S cleanup of the fake odonimo, and exits 1.
2331
+
2332
+ **Server error rendering in dry-run**: unlike the real commands (which render `Errore ANNCSU (codice N): messaggio` plus the `data_valid_amm` hint), a server rejection inside a dry-run step is captured into that step's result — e.g. `update_op.messaggio = "Update exception: <raw body>"` — so the cycle can continue with the S cleanup. Check `test_op` / `update_op` / `rollback` in the JSON output for the per-step outcome.
2333
+
2334
+ > **Tip — reproducing the `data_valid_amm` server rule safely**: the fake odonimo is created *today*, so its current validity date is the creation date. Running `update --dry-run --data-valid-amm <past date>` makes the R violate the server rule *data_valid_amm ≥ precedente* on the fictitious odonimo — a safe way to capture the real ANNCSU error code and message without touching real data.
2335
+
2312
2336
  Examples:
2313
2337
 
2314
2338
  ```bash
@@ -2,6 +2,8 @@
2
2
 
3
3
  The ANNCSU SDK implements a hybrid validation approach to ensure data quality for both API requests and responses.
4
4
 
5
+ > **Write operations (odonimi/accessi)**: the business-rule validation for the *aggiornamento* APIs lives in dedicated models — `ValidatedOdonimo` (rules I/R/S, maxLength, flag delibera 0-4, date `dd/MM/yyyy`, `data_valid_amm` non-future) and `ValidatedAccesso`. See [sdk-odonimi.md § Validazione Odonimo](sdk-odonimi.md#validazione-odonimo) for the full rule list and error classes. This document covers the *consultazione* (PA) input/response validation.
6
+
5
7
  ## Overview
6
8
 
7
9
  ### Phase 1: Input Validation (Always Enabled)
@@ -221,6 +221,22 @@ Le regole sono applicate in ordine in un singolo `@model_validator(mode="after")
221
221
  4. **Per `R` / `S`**: `progr_civico` obbligatorio — altrimenti `ProgrCivicoRequiredError`
222
222
  5. **Per `I` / `R`**: esattamente uno tra `numero` e `metrico` (XOR strict) — altrimenti `NumeroMetricoMutexError`
223
223
  6. **Coordinate**, se presenti, vengono ri-validate via `ValidatedCoordinate` (range Italia, X/Y dependency, `metodo` 1-4, `maxLength` X/Y/Z)
224
+ 7. **Per `I` / `R`**: `sezione_censimento` obbligatoria (issue #30; l'OAS la dichiara senza `nullable: true`) — altrimenti `SezioneCensimentoRequiredError`
225
+ 8. `data_valid_amm`, se valorizzata, deve essere una data di calendario valida in formato **`dd/MM/yyyy`** — altrimenti `InvalidDateFormatError`. **Nota**: a differenza di odonimi, l'OAS accessi *non* dichiara vincoli sul futuro (assente = data corrente; per `S` è la data di *fine* validità, per `I`/`R` quella di *inizio*) — quindi lato client si valida solo il formato
226
+
227
+ ### `ValidatedRichiesta` — validazione del wrapper
228
+
229
+ Il wrapper `Richiesta` (che contiene `codcom`, `progr_nazionale` e l'oggetto `accesso`) ha un suo modello validato, usato dalla CLI prima di ogni chiamata:
230
+
231
+ - `codcom` obbligatorio e in **formato Belfiore X999** (una lettera maiuscola + tre cifre, es. `A062`) — altrimenti `CodcomRequiredError` / `CodcomFormatError`
232
+ - `progr_nazionale` obbligatorio e ≤ 10 caratteri — altrimenti `ProgrNazionaleRequiredError` / `AccessoMaxLengthError`
233
+ - l'`accesso` incorporato viene ri-validato via `ValidatedAccesso` (gli errori risalgono)
234
+
235
+ ```python
236
+ from anncsu.accessi.models.validated import ValidatedRichiesta
237
+
238
+ ValidatedRichiesta.model_validate(richiesta.model_dump(exclude_unset=True))
239
+ ```
224
240
 
225
241
  ### Uso del Modello Validato
226
242
 
@@ -271,6 +287,11 @@ from anncsu.accessi.errors.accesso_validation import (
271
287
  NumeroMetricoMutexError, # both/neither numero+metrico per I/R
272
288
  FieldNotAllowedForDeleteError, # campo non valorizzabile per S
273
289
  AccessoMaxLengthError, # campo eccede maxLength
290
+ SezioneCensimentoRequiredError, # sezione_censimento mancante per I/R
291
+ InvalidDateFormatError, # data non valida o non dd/MM/yyyy
292
+ CodcomRequiredError, # codcom mancante (wrapper Richiesta)
293
+ CodcomFormatError, # codcom non in formato Belfiore X999
294
+ ProgrNazionaleRequiredError, # progr_nazionale mancante (wrapper)
274
295
  )
275
296
 
276
297
  # Catch specifico
@@ -359,8 +380,10 @@ except ModIHookError as e:
359
380
  # Errore nella generazione degli header ModI
360
381
  print(f"ModI Error: {e.message}")
361
382
  except RispostaErrore as e:
362
- # Errore dall'API (RFC 7807)
363
- print(f"API Error code: {e.codice}, msg: {e.messaggio}")
383
+ # Errore dall'API. NB: il problem+json ANNCSU NON e' RFC 7807
384
+ # schema custom id/codice/messaggio, parsato in e.data.*
385
+ # (str(e) e' il body JSON grezzo: non usarlo per estrarre i campi).
386
+ print(f"API Error code: {e.data.codice}, msg: {e.data.messaggio}")
364
387
  except APIError as e:
365
388
  # Errore HTTP generico
366
389
  print(f"HTTP Error: {e.status_code}")
@@ -257,6 +257,28 @@ def is_success(response, tipo_operazione: str) -> bool:
257
257
 
258
258
  Una check ingenua `esito == "0"` produce un **false-negative** sulle S che vanno a buon fine — è una causa nota di errori in codice cliente.
259
259
 
260
+ ## Errori HTTP (`RispostaErrore`)
261
+
262
+ I rifiuti del server (HTTP **400** richiesta non valida, **404** odonimo non trovato, **500** errore interno) arrivano come `application/problem+json`, ma **non è RFC 7807**: il contratto ANNCSU definisce uno schema custom con tre campi (`id`, `codice`, `messaggio`). L'SDK li trasforma nell'eccezione `RispostaErrore`:
263
+
264
+ ```python
265
+ from anncsu.odonimi.errors import RispostaErrore
266
+
267
+ try:
268
+ response = sdk.anncsu.gestione_anncsu_odonimi_pdnd(richiesta=richiesta)
269
+ except RispostaErrore as e:
270
+ print(e.data.codice) # es. "23" — codice dal catalogo errori ANNCSU
271
+ print(e.data.messaggio) # es. "Errore di validazione: ..."
272
+ # str(e) è il body JSON grezzo della risposta
273
+ ```
274
+
275
+ Attenzione a due cose:
276
+
277
+ - `str(e)` (e quindi un log naive `f"errore: {e}"`) mostra il **body grezzo**, non i campi strutturati — usare sempre `e.data.codice` / `e.data.messaggio`.
278
+ - Se il body non è conforme allo schema ANNCSU (es. un RFC 7807 vero emesso dal gateway GovWay, con `type`/`title`/`detail`), `e.data.codice` e `e.data.messaggio` sono `None`: in quel caso l'unica informazione utile è `str(e)`.
279
+
280
+ Caso tipico di 400 su `R`: `data_valid_amm` inferiore alla precedente data di validità dell'odonimo — regola che il client **non può** verificare (richiede il valore storico). La CLI in questo caso mostra `Errore ANNCSU (codice N): messaggio` più una nota che spiega la regola.
281
+
260
282
  ## Validazione Odonimo
261
283
 
262
284
  L'SDK fornisce un modello `ValidatedOdonimo` con validazione delle business rules ANNCSU. Va sempre usato prima della chiamata API per intercettare errori a livello locale.
@@ -273,8 +295,11 @@ Le regole sono applicate in ordine in un singolo `@model_validator(mode="after")
273
295
  6. **Per `S`**: `dug` **vietato** — altrimenti `DugNotAllowedForDeleteError`
274
296
  7. Se `provvedimento.flag_delibera ∈ {"0","1"}`: `data` + `protocollo` obbligatori — altrimenti `FlagDeliberaMissingFieldsError`
275
297
  8. `aut_prefettura.data_pref` ↔ `protocollo_pref` mutex (entrambi o nessuno) — altrimenti `PrefetturaMutexError`
298
+ 9. `provvedimento.flag_delibera`, se valorizzato, deve essere `"0"`..`"4"` (OAS: "valori numerici da 0 a 4") — altrimenti `FlagDeliberaInvalidValueError`
299
+ 10. I campi data (`provvedimento.data`, `aut_prefettura.data_pref`, `data_valid_amm`), se valorizzati, devono essere date di calendario valide in formato **`dd/MM/yyyy`** (es. `"10/10/2023"`; rifiutati `"2023-10-10"`, `"31/02/2024"`) — altrimenti `InvalidDateFormatError`
300
+ 11. `data_valid_amm` non può essere nel futuro, per **tutte** le operazioni — altrimenti `DataValidAmmInFutureError`. L'OAS dice "minore o uguale della data corrente per inserimento e soppressione. Per aggiornamento **anche** >= della precedente": l'"anche" è additivo, quindi il vincolo ≤ data corrente vale pure per `R`
276
301
 
277
- Le regole su `data_valid_amm` (`≤` data corrente per `I/S`, `≥` precedente per `R`) sono **delegate al server** (richiedono date arithmetic e lookup storici non disponibili lato client).
302
+ La metà R-only della regola su `data_valid_amm` (`≥` della precedente) resta **delegata al server**: richiede il valore storico precedente, non disponibile lato client.
278
303
 
279
304
  ### Uso del Modello Validato
280
305
 
@@ -338,6 +363,9 @@ from anncsu.odonimi.errors.odonimo_validation import (
338
363
  OdonimoMaxLengthError, # campo eccede maxLength OAS
339
364
  FlagDeliberaMissingFieldsError, # flag_delibera 0/1 senza data+protocollo
340
365
  PrefetturaMutexError, # data_pref ↔ protocollo_pref mutex
366
+ FlagDeliberaInvalidValueError, # flag_delibera fuori range 0-4
367
+ InvalidDateFormatError, # data non valida o non dd/MM/yyyy
368
+ DataValidAmmInFutureError, # data_valid_amm nel futuro per I/S
341
369
  )
342
370
 
343
371
  # Catch specifico
@@ -10,13 +10,17 @@ from ._version import (
10
10
  from .errors.accesso_validation import (
11
11
  AccessoMaxLengthError,
12
12
  AccessoValidationError,
13
+ CodcomFormatError,
14
+ CodcomRequiredError,
13
15
  FieldNotAllowedForDeleteError,
14
16
  FieldNotAllowedForOperationError,
17
+ InvalidDateFormatError,
15
18
  NumeroMetricoMutexError,
16
19
  OperazioneCivicoError,
17
20
  ProgrCivicoRequiredError,
21
+ ProgrNazionaleRequiredError,
18
22
  )
19
- from .models.validated import ValidatedAccesso
23
+ from .models.validated import ValidatedAccesso, ValidatedRichiesta
20
24
  from .sdk import AnncsuAccessi
21
25
  from .sdkconfiguration import SDKConfiguration
22
26
 
@@ -34,13 +38,18 @@ __all__ = [
34
38
  "AccessoMaxLengthError",
35
39
  "AccessoValidationError",
36
40
  "AnncsuAccessi",
41
+ "CodcomFormatError",
42
+ "CodcomRequiredError",
37
43
  "FieldNotAllowedForDeleteError",
38
44
  "FieldNotAllowedForOperationError",
45
+ "InvalidDateFormatError",
39
46
  "NumeroMetricoMutexError",
40
47
  "OperazioneCivicoError",
41
48
  "ProgrCivicoRequiredError",
49
+ "ProgrNazionaleRequiredError",
42
50
  "SDKConfiguration",
43
51
  "ValidatedAccesso",
52
+ "ValidatedRichiesta",
44
53
  "VERSION",
45
54
  "OPENAPI_DOC_VERSION",
46
55
  "SPEAKEASY_GENERATOR_VERSION",
@@ -177,6 +177,70 @@ class AccessoMaxLengthError(AccessoValidationError):
177
177
  )
178
178
 
179
179
 
180
+ @dataclass
181
+ class InvalidDateFormatError(AccessoValidationError):
182
+ """Raised when a date field is not a valid dd/MM/yyyy calendar date.
183
+
184
+ Applies to data_valid_amm (OAS example: "08/10/2024"). NOTE: the
185
+ accessi OAS declares no not-in-future bound (unlike odonimi), so
186
+ only the format is validated client-side.
187
+ """
188
+
189
+ field_name: str
190
+ value: str
191
+
192
+ def __str__(self) -> str:
193
+ return (
194
+ f"Il campo '{self.field_name}' deve essere una data valida nel "
195
+ f"formato dd/MM/yyyy (es. '08/10/2024'). "
196
+ f"Valore fornito: {self.value!r}"
197
+ )
198
+
199
+
200
+ @dataclass
201
+ class CodcomRequiredError(AccessoValidationError):
202
+ """Raised when the Richiesta wrapper is missing codcom.
203
+
204
+ Per OAS spec: "Codice del comune (obbligatorio)".
205
+ """
206
+
207
+ def __str__(self) -> str:
208
+ return "Il campo 'codcom' e' obbligatorio per tutte le operazioni."
209
+
210
+
211
+ @dataclass
212
+ class CodcomFormatError(AccessoValidationError):
213
+ """Raised when codcom does not match the Belfiore format X999.
214
+
215
+ Per OAS spec: ``format: X999`` — one uppercase letter followed by
216
+ three digits (e.g. "A062", "H501").
217
+ """
218
+
219
+ value: str
220
+
221
+ def __str__(self) -> str:
222
+ return (
223
+ f"Il campo 'codcom' deve essere un codice Belfiore nel formato "
224
+ f"X999 (una lettera maiuscola + tre cifre, es. 'A062'). "
225
+ f"Valore fornito: {self.value!r}"
226
+ )
227
+
228
+
229
+ @dataclass
230
+ class ProgrNazionaleRequiredError(AccessoValidationError):
231
+ """Raised when the Richiesta wrapper is missing progr_nazionale.
232
+
233
+ Per OAS spec: "Progressivo nazionale (obbligatorio)" — it identifies
234
+ the odonimo the accesso belongs to.
235
+ """
236
+
237
+ def __str__(self) -> str:
238
+ return (
239
+ "Il campo 'progr_nazionale' e' obbligatorio: identifica "
240
+ "l'odonimo a cui appartiene l'accesso."
241
+ )
242
+
243
+
180
244
  __all__ = [
181
245
  "AccessoValidationError",
182
246
  "OperazioneCivicoError",
@@ -186,4 +250,8 @@ __all__ = [
186
250
  "FieldNotAllowedForOperationError",
187
251
  "SezioneCensimentoRequiredError",
188
252
  "AccessoMaxLengthError",
253
+ "InvalidDateFormatError",
254
+ "CodcomRequiredError",
255
+ "CodcomFormatError",
256
+ "ProgrNazionaleRequiredError",
189
257
  ]
@@ -24,23 +24,37 @@ Rules (derived from the OAS spec):
24
24
  1-4, maxLength X/Y/Z).
25
25
  7. ``sezione_censimento`` is mandatory for ``I`` and ``R`` (OAS field has
26
26
  no ``nullable: true``); rule 4 already forbids it for ``S``.
27
+ 8. ``data_valid_amm``, when set, must be a valid ``dd/MM/yyyy`` calendar
28
+ date. NOTE: the accessi OAS declares no not-in-future bound (unlike
29
+ odonimi) — absent means "data corrente", for S it is the *end* of
30
+ validity, for I/R the *start* — so only the format is checked.
31
+
32
+ ``ValidatedRichiesta`` additionally validates the wrapper fields:
33
+ ``codcom`` (mandatory, Belfiore format X999) and ``progr_nazionale``
34
+ (mandatory, maxLength 10), re-validating the embedded ``accesso``.
27
35
  """
28
36
 
29
37
  from __future__ import annotations
30
38
 
39
+ import datetime
40
+ import re
31
41
  from typing import Optional
32
42
 
33
43
  from pydantic import model_validator
34
44
 
35
45
  from anncsu.accessi.errors.accesso_validation import (
36
46
  AccessoMaxLengthError,
47
+ CodcomFormatError,
48
+ CodcomRequiredError,
37
49
  FieldNotAllowedForDeleteError,
50
+ InvalidDateFormatError,
38
51
  NumeroMetricoMutexError,
39
52
  OperazioneCivicoError,
40
53
  ProgrCivicoRequiredError,
54
+ ProgrNazionaleRequiredError,
41
55
  SezioneCensimentoRequiredError,
42
56
  )
43
- from anncsu.accessi.models.richiestaoperazione import Accesso
57
+ from anncsu.accessi.models.richiestaoperazione import Accesso, Richiesta
44
58
  from anncsu.coordinate.models.validated import ValidatedCoordinate
45
59
 
46
60
  VALID_OPERAZIONI = {"I", "R", "S"}
@@ -69,6 +83,15 @@ FIELDS_NOT_ALLOWED_FOR_DELETE: tuple[str, ...] = (
69
83
  "isolato",
70
84
  )
71
85
 
86
+ # Strict dd/MM/yyyy: strptime alone accepts non-zero-padded dates.
87
+ _DATE_PATTERN = re.compile(r"^\d{2}/\d{2}/\d{4}$")
88
+
89
+ # Belfiore code: one uppercase letter + three digits (OAS format X999).
90
+ _CODCOM_PATTERN = re.compile(r"^[A-Z]\d{3}$")
91
+
92
+ # Wrapper-level maxLength (Richiesta).
93
+ PROGR_NAZIONALE_MAX_LENGTH = 10
94
+
72
95
 
73
96
  class ValidatedAccesso(Accesso):
74
97
  """Accesso model with ANNCSU business rule validation.
@@ -136,6 +159,18 @@ class ValidatedAccesso(Accesso):
136
159
  # if the embedded coordinates violate any rule.
137
160
  ValidatedCoordinate.model_validate(payload)
138
161
 
162
+ # Rule 8: data_valid_amm format (no future bound in the accessi OAS)
163
+ value = self._get_value(self.data_valid_amm)
164
+ if value is not None:
165
+ if not _DATE_PATTERN.match(value):
166
+ raise InvalidDateFormatError(field_name="data_valid_amm", value=value)
167
+ try:
168
+ datetime.datetime.strptime(value, "%d/%m/%Y")
169
+ except ValueError:
170
+ raise InvalidDateFormatError(
171
+ field_name="data_valid_amm", value=value
172
+ ) from None
173
+
139
174
  return self
140
175
 
141
176
  # ------------------------------------------------------------------
@@ -177,4 +212,44 @@ class ValidatedAccesso(Accesso):
177
212
  )
178
213
 
179
214
 
180
- __all__ = ["ValidatedAccesso"]
215
+ class ValidatedRichiesta(Richiesta):
216
+ """Accessi Richiesta wrapper with ANNCSU business rule validation.
217
+
218
+ Validates the wrapper fields (``codcom``, ``progr_nazionale``) and
219
+ re-validates the embedded ``accesso`` via ``ValidatedAccesso``.
220
+
221
+ Raises:
222
+ CodcomRequiredError: ``codcom`` missing
223
+ CodcomFormatError: ``codcom`` not in Belfiore format X999
224
+ ProgrNazionaleRequiredError: ``progr_nazionale`` missing
225
+ AccessoMaxLengthError: ``progr_nazionale`` exceeds 10 chars
226
+ AccessoValidationError (subclasses): bubbled up from the
227
+ embedded ``ValidatedAccesso``
228
+ """
229
+
230
+ @model_validator(mode="after")
231
+ def validate_richiesta_rules(self) -> "ValidatedRichiesta":
232
+ """Apply wrapper-level ANNCSU rules, then re-validate the accesso."""
233
+ codcom = self.codcom if self.codcom else None
234
+ if codcom is None:
235
+ raise CodcomRequiredError()
236
+ if not _CODCOM_PATTERN.match(codcom):
237
+ raise CodcomFormatError(value=codcom)
238
+
239
+ prognaz = self.progr_nazionale if self.progr_nazionale else None
240
+ if prognaz is None:
241
+ raise ProgrNazionaleRequiredError()
242
+ if len(prognaz) > PROGR_NAZIONALE_MAX_LENGTH:
243
+ raise AccessoMaxLengthError(
244
+ field_name="progr_nazionale",
245
+ value=prognaz,
246
+ max_length=PROGR_NAZIONALE_MAX_LENGTH,
247
+ )
248
+
249
+ if self.accesso is not None:
250
+ ValidatedAccesso.model_validate(self.accesso.model_dump(exclude_unset=True))
251
+
252
+ return self
253
+
254
+
255
+ __all__ = ["ValidatedAccesso", "ValidatedRichiesta"]
@@ -27,13 +27,14 @@ from rich.console import Console
27
27
  from rich.table import Table
28
28
 
29
29
  from anncsu.accessi import AnncsuAccessi
30
+ from anncsu.accessi.errors import RispostaErrore as AccessiRispostaErrore
30
31
  from anncsu.accessi.models import Security
31
32
  from anncsu.accessi.models.richiestaoperazione import (
32
33
  Accesso,
33
34
  Coordinate,
34
35
  Richiesta,
35
36
  )
36
- from anncsu.accessi.models.validated import ValidatedAccesso
37
+ from anncsu.accessi.models.validated import ValidatedAccesso, ValidatedRichiesta
37
38
  from anncsu.cli.commands.constants import _resolve_token_endpoint
38
39
  from anncsu.cli.models import (
39
40
  AccessoDryRunResult,
@@ -943,6 +944,23 @@ def _run_delete_dry_run(
943
944
  raise typer.Exit(1)
944
945
 
945
946
 
947
+ def _render_server_error(e: AccessiRispostaErrore) -> None:
948
+ """Render an ANNCSU RispostaErrore (HTTP 400/404/500) readably.
949
+
950
+ The contract's problem+json carries structured ``codice`` +
951
+ ``messaggio``; bodies without them (e.g. RFC 7807 from the gateway)
952
+ fall back to the raw body.
953
+ """
954
+ codice = getattr(e.data, "codice", None)
955
+ messaggio = getattr(e.data, "messaggio", None)
956
+ if codice or messaggio:
957
+ error_console.print(
958
+ f"[red]Errore ANNCSU[/red] (codice {codice or '—'}): {messaggio or '—'}"
959
+ )
960
+ else:
961
+ error_console.print(f"[red]Error:[/red] {e}")
962
+
963
+
946
964
  def _execute_operation(
947
965
  *,
948
966
  operazione_civico: str,
@@ -961,10 +979,16 @@ def _execute_operation(
961
979
  then issues the POST and renders the response either as JSON
962
980
  (``--json``) or as a rich table.
963
981
  """
964
- # Pre-validate with business rules (raises ValidationError / typer.Exit on
965
- # invalid input).
982
+ richiesta = Richiesta(
983
+ codcom=codcom,
984
+ progr_nazionale=progr_nazionale,
985
+ accesso=accesso,
986
+ )
987
+
988
+ # Pre-validate with business rules — wrapper (codcom X999, prognaz <= 10)
989
+ # AND embedded accesso — BEFORE any API call.
966
990
  try:
967
- ValidatedAccesso.model_validate(accesso.model_dump(exclude_unset=True))
991
+ ValidatedRichiesta.model_validate(richiesta.model_dump(exclude_unset=True))
968
992
  except Exception as e:
969
993
  error_console.print(f"[red]Validation error:[/red] {e}")
970
994
  raise typer.Exit(1) from None
@@ -976,14 +1000,11 @@ def _execute_operation(
976
1000
  modi_audience=server_url,
977
1001
  )
978
1002
 
979
- richiesta = Richiesta(
980
- codcom=codcom,
981
- progr_nazionale=progr_nazionale,
982
- accesso=accesso,
983
- )
984
-
985
1003
  try:
986
1004
  response = sdk.anncsu.gestione_anncsu_pdnd(richiesta=richiesta)
1005
+ except AccessiRispostaErrore as e:
1006
+ _render_server_error(e)
1007
+ raise typer.Exit(1) from None
987
1008
  except Exception as e:
988
1009
  error_console.print(f"[red]Error:[/red] API call failed: {e}")
989
1010
  raise typer.Exit(1) from None
@@ -48,6 +48,7 @@ from anncsu.common.modi import AuditContext, ModIConfig
48
48
  from anncsu.common.security import Security as PASecurity
49
49
  from anncsu.common.session import get_config_dir
50
50
  from anncsu.odonimi import AnncsuOdonimi
51
+ from anncsu.odonimi.errors import RispostaErrore as OdonimiRispostaErrore
51
52
  from anncsu.odonimi.models import Security
52
53
  from anncsu.odonimi.models.richiestaoperazione import (
53
54
  AutPrefettura,
@@ -1364,6 +1365,36 @@ def _build_richiesta(
1364
1365
  )
1365
1366
 
1366
1367
 
1368
+ def _render_server_error(
1369
+ e: OdonimiRispostaErrore,
1370
+ *,
1371
+ tipo_operazione: str,
1372
+ richiesta: Richiesta,
1373
+ ) -> None:
1374
+ """Render an ANNCSU ``RispostaErrore`` (HTTP 400/404/500) readably.
1375
+
1376
+ The contract's problem+json carries structured ``codice`` +
1377
+ ``messaggio``; bodies without them (e.g. RFC 7807 from the gateway)
1378
+ fall back to the raw body. For R with ``data_valid_amm`` set, the
1379
+ server-side rule that the client cannot check is surfaced as a hint.
1380
+ """
1381
+ codice = getattr(e.data, "codice", None)
1382
+ messaggio = getattr(e.data, "messaggio", None)
1383
+ if codice or messaggio:
1384
+ error_console.print(
1385
+ f"[red]Errore ANNCSU[/red] (codice {codice or '—'}): {messaggio or '—'}"
1386
+ )
1387
+ else:
1388
+ error_console.print(f"[red]Error:[/red] {e}")
1389
+
1390
+ if tipo_operazione == "R" and richiesta.data_valid_amm:
1391
+ error_console.print(
1392
+ "[yellow]Nota:[/yellow] per l'aggiornamento (R), 'data_valid_amm' "
1393
+ "deve essere maggiore o uguale alla precedente data di validità "
1394
+ "dell'odonimo (regola verificata dal server ANNCSU)."
1395
+ )
1396
+
1397
+
1367
1398
  def _execute_operation(
1368
1399
  *,
1369
1400
  tipo_operazione: str,
@@ -1395,6 +1426,9 @@ def _execute_operation(
1395
1426
 
1396
1427
  try:
1397
1428
  response = sdk.anncsu.gestione_anncsu_odonimi_pdnd(richiesta=richiesta)
1429
+ except OdonimiRispostaErrore as e:
1430
+ _render_server_error(e, tipo_operazione=tipo_operazione, richiesta=richiesta)
1431
+ raise typer.Exit(1) from None
1398
1432
  except Exception as e:
1399
1433
  error_console.print(f"[red]Error:[/red] API call failed: {e}")
1400
1434
  raise typer.Exit(1) from None
@@ -1532,7 +1566,10 @@ def insert(
1532
1566
  str | None,
1533
1567
  typer.Option(
1534
1568
  "--data-valid-amm",
1535
- help="Data di validità amministrativa (dd/MM/yyyy).",
1569
+ help=(
1570
+ "Data di validità amministrativa (dd/MM/yyyy). Non può "
1571
+ "essere nel futuro (regola ANNCSU per I)."
1572
+ ),
1536
1573
  ),
1537
1574
  ] = None,
1538
1575
  token_endpoint: Annotated[
@@ -1743,7 +1780,12 @@ def update(
1743
1780
  str | None,
1744
1781
  typer.Option(
1745
1782
  "--data-valid-amm",
1746
- help="Data di validità amministrativa (dd/MM/yyyy).",
1783
+ help=(
1784
+ "Data di validità amministrativa (dd/MM/yyyy). Non può "
1785
+ "essere nel futuro; inoltre per l'odonimo esistente deve "
1786
+ "essere >= della precedente data di validità (quest'ultima "
1787
+ "regola è verificata dal server ANNCSU)."
1788
+ ),
1747
1789
  ),
1748
1790
  ] = None,
1749
1791
  token_endpoint: Annotated[
@@ -1916,7 +1958,10 @@ def delete(
1916
1958
  str | None,
1917
1959
  typer.Option(
1918
1960
  "--data-valid-amm",
1919
- help="Data di fine validità (dd/MM/yyyy). Default: data corrente.",
1961
+ help=(
1962
+ "Data di fine validità (dd/MM/yyyy). Default: data "
1963
+ "corrente. Non può essere nel futuro (regola ANNCSU per S)."
1964
+ ),
1920
1965
  ),
1921
1966
  ] = None,
1922
1967
  token_endpoint: Annotated[
@@ -9,9 +9,12 @@ from ._version import (
9
9
  )
10
10
  from .errors.odonimo_validation import (
11
11
  CodcomRequiredError,
12
+ DataValidAmmInFutureError,
12
13
  DugNotAllowedForDeleteError,
13
14
  DugRequiredError,
15
+ FlagDeliberaInvalidValueError,
14
16
  FlagDeliberaMissingFieldsError,
17
+ InvalidDateFormatError,
15
18
  OdonimoMaxLengthError,
16
19
  OdonimoValidationError,
17
20
  PrefetturaMutexError,
@@ -35,9 +38,12 @@ __all__ = [
35
38
  "__user_agent__",
36
39
  "AnncsuOdonimi",
37
40
  "CodcomRequiredError",
41
+ "DataValidAmmInFutureError",
38
42
  "DugNotAllowedForDeleteError",
39
43
  "DugRequiredError",
44
+ "FlagDeliberaInvalidValueError",
40
45
  "FlagDeliberaMissingFieldsError",
46
+ "InvalidDateFormatError",
41
47
  "OdonimoMaxLengthError",
42
48
  "OdonimoValidationError",
43
49
  "PrefetturaMutexError",