valentina-python-client 1.23.0__tar.gz → 2.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/PKG-INFO +2 -2
  2. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/pyproject.toml +10 -10
  3. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/__init__.py +1 -1
  4. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/companies.py +2 -2
  5. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/__init__.py +4 -0
  6. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/companies.py +39 -5
  7. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/system.py +4 -1
  8. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/companies.py +2 -2
  9. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/users.py +0 -12
  10. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/LICENSE +0 -0
  11. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/README.md +0 -0
  12. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_codegen.py +0 -0
  13. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/__init__.py +0 -0
  14. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/client.py +0 -0
  15. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/registry.py +0 -0
  16. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/__init__.py +0 -0
  17. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/_audit_params.py +0 -0
  18. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/base.py +0 -0
  19. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/campaign_book_chapters.py +0 -0
  20. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/campaign_books.py +0 -0
  21. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/campaigns.py +0 -0
  22. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/character_autogen.py +0 -0
  23. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/character_blueprint.py +0 -0
  24. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/character_traits.py +0 -0
  25. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/characters.py +0 -0
  26. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/developers.py +0 -0
  27. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/dicerolls.py +0 -0
  28. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/dictionary.py +0 -0
  29. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/global_admin.py +0 -0
  30. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/options.py +0 -0
  31. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/system.py +0 -0
  32. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/user_lookup.py +0 -0
  33. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/user_self_registration.py +0 -0
  34. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/services/users.py +0 -0
  35. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/testing/__init__.py +0 -0
  36. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/_sync/testing/_client.py +0 -0
  37. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/client.py +0 -0
  38. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/config.py +0 -0
  39. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/constants.py +0 -0
  40. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/endpoints.py +0 -0
  41. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/exceptions.py +0 -0
  42. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/audit_logs.py +0 -0
  43. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/books.py +0 -0
  44. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/campaigns.py +0 -0
  45. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/chapters.py +0 -0
  46. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/character_autogen.py +0 -0
  47. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/character_blueprint.py +0 -0
  48. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/character_trait.py +0 -0
  49. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/characters.py +0 -0
  50. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/developers.py +0 -0
  51. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/diceroll.py +0 -0
  52. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/dictionary.py +0 -0
  53. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/full_sheet.py +0 -0
  54. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/global_admin.py +0 -0
  55. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/pagination.py +0 -0
  56. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/shared.py +0 -0
  57. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/user_lookup.py +0 -0
  58. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/models/users.py +0 -0
  59. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/py.typed +0 -0
  60. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/registry.py +0 -0
  61. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/__init__.py +0 -0
  62. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/_audit_params.py +0 -0
  63. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/base.py +0 -0
  64. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/campaign_book_chapters.py +0 -0
  65. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/campaign_books.py +0 -0
  66. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/campaigns.py +0 -0
  67. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/character_autogen.py +0 -0
  68. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/character_blueprint.py +0 -0
  69. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/character_traits.py +0 -0
  70. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/characters.py +0 -0
  71. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/developers.py +0 -0
  72. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/dicerolls.py +0 -0
  73. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/dictionary.py +0 -0
  74. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/global_admin.py +0 -0
  75. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/options.py +0 -0
  76. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/system.py +0 -0
  77. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/user_lookup.py +0 -0
  78. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/services/user_self_registration.py +0 -0
  79. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/testing/__init__.py +0 -0
  80. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/testing/_client.py +0 -0
  81. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/testing/_factories.py +0 -0
  82. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/testing/_router.py +0 -0
  83. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/src/vclient/testing/_routes.py +0 -0
  84. {valentina_python_client-1.23.0 → valentina_python_client-2.0.0}/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: 1.23.0
3
+ Version: 2.0.0
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>
@@ -19,7 +19,7 @@ Requires-Dist: anyio>=4.13.0
19
19
  Requires-Dist: httpx>=0.28.1
20
20
  Requires-Dist: loguru>=0.7.3
21
21
  Requires-Dist: polyfactory>=3.3.0
22
- Requires-Dist: pydantic[email]>=2.12.5
22
+ Requires-Dist: pydantic[email]>=2.13.1
23
23
  Requires-Dist: polyfactory>=3.3.0 ; extra == 'testing'
24
24
  Requires-Python: >=3.13
25
25
  Project-URL: Homepage, https://docs.valentina-noir.com/python-api-client/
@@ -9,14 +9,14 @@
9
9
  "httpx>=0.28.1",
10
10
  "loguru>=0.7.3",
11
11
  "polyfactory>=3.3.0",
12
- "pydantic[email]>=2.12.5",
12
+ "pydantic[email]>=2.13.1",
13
13
  ]
14
14
  description = "Async Python client library for the Valentina Noir API"
15
15
  license = { file = "LICENSE" }
16
16
  name = "valentina-python-client"
17
17
  readme = "README.md"
18
18
  requires-python = ">=3.13"
19
- version = "1.23.0"
19
+ version = "2.0.0"
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.13.9",
37
+ "commitizen>=4.13.10",
38
38
  "coverage>=7.13.5",
39
39
  "duty>=1.9.0",
40
- "prek>=0.3.8",
40
+ "prek>=0.3.9",
41
41
  "pytest-anyio>=0.0.0",
42
42
  "pytest-clarity>=1.0.1",
43
43
  "pytest-cov>=7.1.0",
@@ -46,16 +46,16 @@
46
46
  "pytest-repeat>=0.9.4",
47
47
  "pytest-sugar>=1.1.1",
48
48
  "pytest-xdist>=3.8.0",
49
- "pytest>=9.0.2",
50
- "respx>=0.22.0",
51
- "ruff>=0.15.9",
49
+ "pytest>=9.0.3",
50
+ "respx>=0.23.1",
51
+ "ruff>=0.15.10",
52
52
  "shellcheck-py>=0.11.0.1",
53
- "ty>=0.0.29",
54
- "typos>=1.45.0",
53
+ "ty>=0.0.31",
54
+ "typos>=1.45.1",
55
55
  "vulture>=2.16",
56
56
  "yamllint>=1.38.0",
57
57
  ]
58
- docs = ["zensical>=0.0.31"]
58
+ docs = ["zensical>=0.0.33"]
59
59
 
60
60
  [tool.commitizen]
61
61
  bump_message = "bump(release): v$current_version → v$new_version"
@@ -113,4 +113,4 @@ __all__ = (
113
113
  "users_service",
114
114
  )
115
115
 
116
- __version__ = "1.23.0"
116
+ __version__ = "2.0.0"
@@ -115,7 +115,7 @@ class SyncCompaniesService(SyncBaseService):
115
115
  request: A CompanyCreate model, OR pass fields as keyword arguments.
116
116
  **kwargs: Fields for CompanyCreate if request is not provided.
117
117
  Accepts: name (str, required), email (str, required),
118
- description (str | None), settings (CompanySettings | None).
118
+ description (str | None), settings (CompanySettingsCreate | None).
119
119
 
120
120
  Returns:
121
121
  The newly created NewCompanyResponse object containing the company and admin user.
@@ -141,7 +141,7 @@ class SyncCompaniesService(SyncBaseService):
141
141
  request: A CompanyUpdate model, OR pass fields as keyword arguments.
142
142
  **kwargs: Fields for CompanyUpdate if request is not provided.
143
143
  Accepts: name (str | None), email (str | None),
144
- description (str | None), settings (CompanySettings | None).
144
+ description (str | None), settings (CompanySettingsUpdate | None).
145
145
 
146
146
  Returns:
147
147
  The updated Company object.
@@ -73,6 +73,8 @@ from .companies import (
73
73
  CompanyCreate,
74
74
  CompanyPermissions,
75
75
  CompanySettings,
76
+ CompanySettingsCreate,
77
+ CompanySettingsUpdate,
76
78
  CompanyUpdate,
77
79
  NewCompanyResponse,
78
80
  _GrantAccess as _GrantAccess,
@@ -177,6 +179,8 @@ __all__ = [
177
179
  "CompanyCreate",
178
180
  "CompanyPermissions",
179
181
  "CompanySettings",
182
+ "CompanySettingsCreate",
183
+ "CompanySettingsUpdate",
180
184
  "CompanyUpdate",
181
185
  "CreateAutogenerateDTO",
182
186
  "Developer",
@@ -16,14 +16,46 @@ from vclient.models.users import User
16
16
 
17
17
 
18
18
  class CompanySettings(BaseModel):
19
- """Settings configuration for a company.
19
+ """Company configuration settings as returned by the API.
20
20
 
21
- Controls various permissions and configuration options for the company.
22
- Used in both response and request contexts; defaults support partial updates.
21
+ Strict response model every field is always populated by the server.
22
+ For partial create/update payloads, use CompanySettingsCreate or
23
+ CompanySettingsUpdate instead.
24
+ """
25
+
26
+ character_autogen_xp_cost: int
27
+ character_autogen_num_choices: int
28
+ character_autogen_starting_points: int
29
+ permission_manage_campaign: ManageCampaignPermission
30
+ permission_grant_xp: GrantXPPermission
31
+ permission_free_trait_changes: FreeTraitChangesPermission
32
+ permission_recoup_xp: RecoupXPPermission
33
+
34
+
35
+ class CompanySettingsCreate(BaseModel):
36
+ """Partial CompanySettings payload for POST /companies.
37
+
38
+ All fields optional — the server applies defaults for anything omitted.
39
+ """
40
+
41
+ character_autogen_xp_cost: int | None = None
42
+ character_autogen_num_choices: int | None = None
43
+ character_autogen_starting_points: int | None = None
44
+ permission_manage_campaign: ManageCampaignPermission | None = None
45
+ permission_grant_xp: GrantXPPermission | None = None
46
+ permission_free_trait_changes: FreeTraitChangesPermission | None = None
47
+ permission_recoup_xp: RecoupXPPermission | None = None
48
+
49
+
50
+ class CompanySettingsUpdate(BaseModel):
51
+ """Partial CompanySettings payload for PATCH /companies/{id}.
52
+
53
+ All fields optional — omitted fields remain unchanged on the server.
23
54
  """
24
55
 
25
56
  character_autogen_xp_cost: int | None = None
26
57
  character_autogen_num_choices: int | None = None
58
+ character_autogen_starting_points: int | None = None
27
59
  permission_manage_campaign: ManageCampaignPermission | None = None
28
60
  permission_grant_xp: GrantXPPermission | None = None
29
61
  permission_free_trait_changes: FreeTraitChangesPermission | None = None
@@ -86,7 +118,7 @@ class CompanyCreate(BaseModel):
86
118
  name: str = Field(min_length=3, max_length=50)
87
119
  email: str
88
120
  description: Annotated[str, Field(min_length=3)] | None = None
89
- settings: CompanySettings | None = None
121
+ settings: CompanySettingsCreate | None = None
90
122
 
91
123
 
92
124
  class CompanyUpdate(BaseModel):
@@ -98,7 +130,7 @@ class CompanyUpdate(BaseModel):
98
130
  name: Annotated[str, Field(min_length=3, max_length=50)] | None = None
99
131
  email: str | None = None
100
132
  description: Annotated[str, Field(min_length=3)] | None = None
101
- settings: CompanySettings | None = None
133
+ settings: CompanySettingsUpdate | None = None
102
134
 
103
135
 
104
136
  class _GrantAccess(BaseModel):
@@ -113,6 +145,8 @@ __all__ = [
113
145
  "CompanyCreate",
114
146
  "CompanyPermissions",
115
147
  "CompanySettings",
148
+ "CompanySettingsCreate",
149
+ "CompanySettingsUpdate",
116
150
  "CompanyUpdate",
117
151
  "NewCompanyResponse",
118
152
  "_GrantAccess",
@@ -7,9 +7,12 @@ class SystemHealth(BaseModel):
7
7
  """Response model for system health check.
8
8
 
9
9
  Represents the health status of the API and its dependencies including
10
- database and cache connectivity.
10
+ database and cache connectivity, latency metrics, and uptime information.
11
11
  """
12
12
 
13
13
  database_status: str
14
14
  cache_status: str
15
+ database_latency_ms: float | None
16
+ cache_latency_ms: float | None
17
+ uptime: str
15
18
  version: str
@@ -126,7 +126,7 @@ class CompaniesService(BaseService):
126
126
  request: A CompanyCreate model, OR pass fields as keyword arguments.
127
127
  **kwargs: Fields for CompanyCreate if request is not provided.
128
128
  Accepts: name (str, required), email (str, required),
129
- description (str | None), settings (CompanySettings | None).
129
+ description (str | None), settings (CompanySettingsCreate | None).
130
130
 
131
131
  Returns:
132
132
  The newly created NewCompanyResponse object containing the company and admin user.
@@ -157,7 +157,7 @@ class CompaniesService(BaseService):
157
157
  request: A CompanyUpdate model, OR pass fields as keyword arguments.
158
158
  **kwargs: Fields for CompanyUpdate if request is not provided.
159
159
  Accepts: name (str | None), email (str | None),
160
- description (str | None), settings (CompanySettings | None).
160
+ description (str | None), settings (CompanySettingsUpdate | None).
161
161
 
162
162
  Returns:
163
163
  The updated Company object.
@@ -63,9 +63,7 @@ class UsersService(BaseService):
63
63
  """Format an endpoint with the scoped company_id plus any extra params."""
64
64
  return endpoint.format(company_id=self._company_id, **kwargs)
65
65
 
66
- # -------------------------------------------------------------------------
67
66
  # Unapproved User Methods
68
- # -------------------------------------------------------------------------
69
67
 
70
68
  async def get_unapproved_page(
71
69
  self,
@@ -202,9 +200,7 @@ class UsersService(BaseService):
202
200
  )
203
201
  return User.model_validate(response.json())
204
202
 
205
- # -------------------------------------------------------------------------
206
203
  # User CRUD Methods
207
- # -------------------------------------------------------------------------
208
204
 
209
205
  async def get_page(
210
206
  self,
@@ -445,9 +441,7 @@ class UsersService(BaseService):
445
441
  )
446
442
  return RollStatistics.model_validate(response.json())
447
443
 
448
- # -------------------------------------------------------------------------
449
444
  # Asset Methods
450
- # -------------------------------------------------------------------------
451
445
 
452
446
  async def get_assets_page(
453
447
  self,
@@ -604,9 +598,7 @@ class UsersService(BaseService):
604
598
  )
605
599
  return Asset.model_validate(response.json())
606
600
 
607
- # -------------------------------------------------------------------------
608
601
  # Experience Methods
609
- # -------------------------------------------------------------------------
610
602
 
611
603
  async def get_experience(
612
604
  self,
@@ -740,9 +732,7 @@ class UsersService(BaseService):
740
732
  )
741
733
  return CampaignExperience.model_validate(response.json())
742
734
 
743
- # -------------------------------------------------------------------------
744
735
  # Notes Methods
745
- # -------------------------------------------------------------------------
746
736
 
747
737
  async def get_notes_page(
748
738
  self,
@@ -931,9 +921,7 @@ class UsersService(BaseService):
931
921
  self._format_endpoint(Endpoints.USER_NOTE, user_id=user_id, note_id=note_id)
932
922
  )
933
923
 
934
- # -------------------------------------------------------------------------
935
924
  # Quickroll Methods
936
- # -------------------------------------------------------------------------
937
925
 
938
926
  async def get_quickrolls_page(
939
927
  self,