valentina-python-client 2.3.0__tar.gz → 2.4.1__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 (84) hide show
  1. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/PKG-INFO +1 -1
  2. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/pyproject.toml +7 -7
  3. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/__init__.py +4 -1
  4. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/base.py +2 -2
  5. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/books.py +3 -0
  6. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/campaigns.py +6 -0
  7. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/chapters.py +2 -0
  8. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/characters.py +7 -0
  9. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/users.py +4 -0
  10. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/base.py +4 -2
  11. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/LICENSE +0 -0
  12. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/README.md +0 -0
  13. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_codegen.py +0 -0
  14. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/__init__.py +0 -0
  15. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/client.py +0 -0
  16. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/registry.py +0 -0
  17. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/__init__.py +0 -0
  18. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/_audit_params.py +0 -0
  19. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/campaign_book_chapters.py +0 -0
  20. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/campaign_books.py +0 -0
  21. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/campaigns.py +0 -0
  22. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/character_autogen.py +0 -0
  23. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/character_blueprint.py +0 -0
  24. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/character_traits.py +0 -0
  25. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/characters.py +0 -0
  26. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/companies.py +0 -0
  27. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/developers.py +0 -0
  28. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/dicerolls.py +0 -0
  29. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/dictionary.py +0 -0
  30. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/global_admin.py +0 -0
  31. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/options.py +0 -0
  32. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/system.py +0 -0
  33. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/user_lookup.py +0 -0
  34. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/user_self_registration.py +0 -0
  35. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/services/users.py +0 -0
  36. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/testing/__init__.py +0 -0
  37. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/_sync/testing/_client.py +0 -0
  38. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/client.py +0 -0
  39. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/config.py +0 -0
  40. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/constants.py +0 -0
  41. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/endpoints.py +0 -0
  42. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/exceptions.py +0 -0
  43. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/__init__.py +0 -0
  44. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/audit_logs.py +0 -0
  45. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/character_autogen.py +0 -0
  46. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/character_blueprint.py +0 -0
  47. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/character_trait.py +0 -0
  48. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/companies.py +0 -0
  49. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/developers.py +0 -0
  50. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/diceroll.py +0 -0
  51. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/dictionary.py +0 -0
  52. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/full_sheet.py +0 -0
  53. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/global_admin.py +0 -0
  54. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/pagination.py +0 -0
  55. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/shared.py +0 -0
  56. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/system.py +0 -0
  57. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/models/user_lookup.py +0 -0
  58. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/py.typed +0 -0
  59. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/registry.py +0 -0
  60. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/__init__.py +0 -0
  61. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/_audit_params.py +0 -0
  62. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/campaign_book_chapters.py +0 -0
  63. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/campaign_books.py +0 -0
  64. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/campaigns.py +0 -0
  65. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/character_autogen.py +0 -0
  66. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/character_blueprint.py +0 -0
  67. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/character_traits.py +0 -0
  68. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/characters.py +0 -0
  69. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/companies.py +0 -0
  70. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/developers.py +0 -0
  71. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/dicerolls.py +0 -0
  72. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/dictionary.py +0 -0
  73. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/global_admin.py +0 -0
  74. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/options.py +0 -0
  75. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/system.py +0 -0
  76. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/user_lookup.py +0 -0
  77. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/user_self_registration.py +0 -0
  78. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/services/users.py +0 -0
  79. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/testing/__init__.py +0 -0
  80. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/testing/_client.py +0 -0
  81. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/testing/_factories.py +0 -0
  82. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/testing/_router.py +0 -0
  83. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/testing/_routes.py +0 -0
  84. {valentina_python_client-2.3.0 → valentina_python_client-2.4.1}/src/vclient/validate_constants.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: valentina-python-client
3
- Version: 2.3.0
3
+ Version: 2.4.1
4
4
  Summary: Async Python client library for the Valentina Noir API
5
5
  Author: Nate Landau
6
6
  Author-email: Nate Landau <github@natenate.org>
@@ -16,7 +16,7 @@
16
16
  name = "valentina-python-client"
17
17
  readme = "README.md"
18
18
  requires-python = ">=3.13"
19
- version = "2.3.0"
19
+ version = "2.4.1"
20
20
 
21
21
  [project.optional-dependencies]
22
22
  testing = ["polyfactory>=3.3.0"]
@@ -34,10 +34,10 @@
34
34
 
35
35
  [dependency-groups]
36
36
  dev = [
37
- "commitizen>=4.16.2",
38
- "coverage>=7.14.0",
37
+ "commitizen>=4.16.3",
38
+ "coverage>=7.14.1",
39
39
  "duty>=1.9.0",
40
- "prek>=0.4.1",
40
+ "prek>=0.4.3",
41
41
  "pytest-anyio>=0.0.0",
42
42
  "pytest-clarity>=1.0.1",
43
43
  "pytest-cov>=7.1.0",
@@ -48,10 +48,10 @@
48
48
  "pytest-xdist>=3.8.0",
49
49
  "pytest>=9.0.3",
50
50
  "respx>=0.23.1",
51
- "ruff>=0.15.14",
51
+ "ruff>=0.15.15",
52
52
  "shellcheck-py>=0.11.0.1",
53
- "ty>=0.0.39",
54
- "typos>=1.46.2",
53
+ "ty>=0.0.42",
54
+ "typos>=1.47.0",
55
55
  "vulture>=2.16",
56
56
  "yamllint>=1.38.0",
57
57
  ]
@@ -28,6 +28,9 @@ class _PropagateHandler(_logging.Handler):
28
28
  _logger.add(
29
29
  _PropagateHandler(),
30
30
  format="{message}",
31
+ # Forward TRACE too (e.g. the "Send request" line) and let the consumer's
32
+ # stdlib logging level decide what to show; the sink must not pre-filter it.
33
+ level="TRACE",
31
34
  filter=lambda record: record["name"].startswith("vclient"),
32
35
  )
33
36
 
@@ -113,4 +116,4 @@ __all__ = (
113
116
  "users_service",
114
117
  )
115
118
 
116
- __version__ = "2.3.0"
119
+ __version__ = "2.4.1"
@@ -169,7 +169,7 @@ class SyncBaseService:
169
169
  max_attempts = config.max_retries + 1 if config.auto_retry_rate_limit else 1
170
170
  retry_statuses = config.retry_statuses
171
171
  request_logger = logger.bind(method=method, url=path)
172
- request_logger.debug("Send request")
172
+ request_logger.trace("Send request")
173
173
  last_error: RateLimitError | ServerError | None = None
174
174
  for attempt in range(max_attempts):
175
175
  try:
@@ -243,7 +243,7 @@ class SyncBaseService:
243
243
  header_request_id = response.headers.get(REQUEST_ID_HEADER)
244
244
  if header_request_id:
245
245
  success_bind["request_id"] = header_request_id
246
- request_logger.bind(**success_bind).debug("Receive response")
246
+ request_logger.bind(**success_bind).debug("Request complete")
247
247
 
248
248
  @staticmethod
249
249
  def _inject_request_id_fallback(
@@ -22,6 +22,9 @@ class CampaignBook(BaseModel):
22
22
  asset_ids: list[str] = Field(default_factory=list, description="List of associated asset IDs.")
23
23
  number: int = Field(..., description="Book number within the campaign.")
24
24
  campaign_id: str = Field(..., description="ID of the parent campaign.")
25
+ num_chapters: int = Field(default=0, description="Number of active chapters in the book.")
26
+ num_notes: int = Field(default=0, description="Number of active notes on the book.")
27
+ num_assets: int = Field(default=0, description="Number of active assets on the book.")
25
28
 
26
29
 
27
30
  class CampaignBookDetail(CampaignBook):
@@ -26,6 +26,12 @@ class Campaign(BaseModel):
26
26
  desperation: int = 0
27
27
  danger: int = 0
28
28
  company_id: str
29
+ num_books: int = 0
30
+ num_chapters: int = 0
31
+ num_notes: int = 0
32
+ num_player_characters: int = 0
33
+ num_storyteller_characters: int = 0
34
+ num_npc_characters: int = 0
29
35
 
30
36
 
31
37
  # -----------------------------------------------------------------------------
@@ -23,6 +23,8 @@ class CampaignChapter(BaseModel):
23
23
  asset_ids: list[str] = Field(default_factory=list, description="List of associated asset IDs.")
24
24
  number: int = Field(..., description="Chapter number within the book.")
25
25
  book_id: str = Field(..., description="ID of the parent book.")
26
+ num_notes: int = Field(default=0, description="Number of active notes on the chapter.")
27
+ num_assets: int = Field(default=0, description="Number of active assets on the chapter.")
26
28
 
27
29
 
28
30
  class CampaignChapterDetail(CampaignChapter):
@@ -222,6 +222,13 @@ class Character(BaseModel):
222
222
  default=None, description="Hunter-specific attributes."
223
223
  )
224
224
 
225
+ # Child-resource counts
226
+ num_inventory_items: int = Field(
227
+ default=0, description="Number of active inventory items on the character."
228
+ )
229
+ num_notes: int = Field(default=0, description="Number of active notes on the character.")
230
+ num_assets: int = Field(default=0, description="Number of active assets on the character.")
231
+
225
232
 
226
233
  class CharacterDetail(Character):
227
234
  """Character response with optional embedded child resources.
@@ -96,6 +96,10 @@ class User(BaseModel):
96
96
  asset_ids: list[str] = Field(default_factory=list)
97
97
  lifetime_xp: int = 0
98
98
  lifetime_cool_points: int = 0
99
+ num_quickrolls: int = 0
100
+ num_notes: int = 0
101
+ num_assets: int = 0
102
+ num_characters: int = 0
99
103
 
100
104
 
101
105
  class UserDetail(User):
@@ -178,7 +178,9 @@ class BaseService:
178
178
  retry_statuses = config.retry_statuses
179
179
  request_logger = logger.bind(method=method, url=path)
180
180
 
181
- request_logger.debug("Send request")
181
+ # TRACE so the in-flight request is visible only when diagnosing hangs; the
182
+ # "Request complete" DEBUG line below is the superset record for normal use.
183
+ request_logger.trace("Send request")
182
184
 
183
185
  last_error: RateLimitError | ServerError | None = None
184
186
 
@@ -268,7 +270,7 @@ class BaseService:
268
270
  header_request_id = response.headers.get(REQUEST_ID_HEADER)
269
271
  if header_request_id:
270
272
  success_bind["request_id"] = header_request_id
271
- request_logger.bind(**success_bind).debug("Receive response")
273
+ request_logger.bind(**success_bind).debug("Request complete")
272
274
 
273
275
  @staticmethod
274
276
  def _inject_request_id_fallback(