anaplan-sdk 0.4.5__py3-none-any.whl → 0.5.0__py3-none-any.whl
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.
- anaplan_sdk/__init__.py +2 -0
- anaplan_sdk/_async_clients/__init__.py +4 -0
- anaplan_sdk/_async_clients/_alm.py +257 -44
- anaplan_sdk/_async_clients/_audit.py +31 -21
- anaplan_sdk/_async_clients/_bulk.py +270 -173
- anaplan_sdk/_async_clients/_cloud_works.py +61 -41
- anaplan_sdk/_async_clients/_cw_flow.py +26 -18
- anaplan_sdk/_async_clients/_scim.py +148 -0
- anaplan_sdk/_async_clients/_transactional.py +265 -56
- anaplan_sdk/_clients/__init__.py +12 -1
- anaplan_sdk/_clients/_alm.py +255 -45
- anaplan_sdk/_clients/_audit.py +32 -22
- anaplan_sdk/_clients/_bulk.py +265 -157
- anaplan_sdk/_clients/_cloud_works.py +59 -40
- anaplan_sdk/_clients/_cw_flow.py +24 -16
- anaplan_sdk/_clients/_scim.py +145 -0
- anaplan_sdk/_clients/_transactional.py +260 -50
- anaplan_sdk/_services.py +277 -0
- anaplan_sdk/_utils.py +188 -0
- anaplan_sdk/models/__init__.py +49 -2
- anaplan_sdk/models/_alm.py +64 -6
- anaplan_sdk/models/_bulk.py +22 -13
- anaplan_sdk/models/_transactional.py +221 -4
- anaplan_sdk/models/cloud_works.py +6 -2
- anaplan_sdk/models/scim.py +282 -0
- {anaplan_sdk-0.4.5.dist-info → anaplan_sdk-0.5.0.dist-info}/METADATA +2 -2
- anaplan_sdk-0.5.0.dist-info/RECORD +34 -0
- anaplan_sdk/_base.py +0 -297
- anaplan_sdk-0.4.5.dist-info/RECORD +0 -30
- {anaplan_sdk-0.4.5.dist-info → anaplan_sdk-0.5.0.dist-info}/WHEEL +0 -0
- {anaplan_sdk-0.4.5.dist-info → anaplan_sdk-0.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,3 +1,5 @@
|
|
1
|
+
from typing import Literal, TypeAlias, Union
|
2
|
+
|
1
3
|
from pydantic import Field
|
2
4
|
|
3
5
|
from ._base import AnaplanModel
|
@@ -34,6 +36,120 @@ class Module(AnaplanModel):
|
|
34
36
|
name: str = Field(description="The name of this module.")
|
35
37
|
|
36
38
|
|
39
|
+
class Dimension(AnaplanModel):
|
40
|
+
id: int = Field(description="The unique identifier of this dimension.")
|
41
|
+
name: str = Field(description="The name of this dimension.")
|
42
|
+
|
43
|
+
|
44
|
+
class DimensionWithCode(Dimension):
|
45
|
+
code: str = Field(description="The code of this dimension.")
|
46
|
+
|
47
|
+
|
48
|
+
class View(AnaplanModel):
|
49
|
+
code: str = Field(description="The code of this view.")
|
50
|
+
id: int = Field(description="The unique identifier of this view.")
|
51
|
+
name: str = Field(description="The name of this views.")
|
52
|
+
moduleId: int = Field(description="The unique identifier of the module this view belongs to.")
|
53
|
+
|
54
|
+
|
55
|
+
class ViewInfo(AnaplanModel):
|
56
|
+
view_id: int = Field(description="The unique identifier of this view.")
|
57
|
+
view_name: str = Field(description="The name of this view.")
|
58
|
+
rows: list[Dimension] = Field(
|
59
|
+
[], description="The list of dimensions in the rows of this view."
|
60
|
+
)
|
61
|
+
pages: list[Dimension] = Field(
|
62
|
+
[], description="The list of dimensions in the pages of this view."
|
63
|
+
)
|
64
|
+
|
65
|
+
|
66
|
+
class PeriodType(AnaplanModel):
|
67
|
+
entity_id: Literal["YEAR", "HALF_YEAR", "MONTH", "QUARTER", "WEEK", "DAY"] = Field(
|
68
|
+
description="The type of period entity."
|
69
|
+
)
|
70
|
+
entity_label: Literal["Year", "Half-Year", "Month", "Quarter", "Week", "Day"] = Field(
|
71
|
+
description="The type of period entity."
|
72
|
+
)
|
73
|
+
entity_index: int = Field(description="The index of the period entity")
|
74
|
+
|
75
|
+
|
76
|
+
class EntityFormatFilter(AnaplanModel):
|
77
|
+
source_line_item_or_property: str = Field(
|
78
|
+
description="The unique identifier of the source line item or property."
|
79
|
+
)
|
80
|
+
mapping_hierarchy: str = Field(description="The unique identifier of the mapping hierarchy.")
|
81
|
+
key_property: str = Field(description="The unique identifier of the key property.")
|
82
|
+
value_property: str = Field(description="The unique identifier of the value property.")
|
83
|
+
|
84
|
+
|
85
|
+
class TextMetadata(AnaplanModel):
|
86
|
+
data_type: Literal["TEXT"] = Field(
|
87
|
+
description="The data type. Literal for the tagged union discriminator."
|
88
|
+
)
|
89
|
+
text_type: Literal["DRILLTHRU_URI", "EMAIL_ADDRESS", "GENERAL"] = Field(
|
90
|
+
description="The text type."
|
91
|
+
)
|
92
|
+
|
93
|
+
|
94
|
+
class ListMetadata(AnaplanModel):
|
95
|
+
data_type: Literal["ENTITY"] = Field(
|
96
|
+
description="The data type. Literal for the tagged union discriminator."
|
97
|
+
)
|
98
|
+
hierarchy_entity_id: int = Field(
|
99
|
+
validation_alias="hierarchyEntityLongId",
|
100
|
+
description="The unique identifier of the hierarchy entity, like Lists or List Subsets.",
|
101
|
+
)
|
102
|
+
selective_access_applied: bool = Field(
|
103
|
+
description="Whether selective access is applied or not."
|
104
|
+
)
|
105
|
+
show_all: bool = Field(description="Whether to show all values or not.")
|
106
|
+
entity_format_filter: EntityFormatFilter | None = Field(
|
107
|
+
None, description="Entity format filter configuration."
|
108
|
+
)
|
109
|
+
|
110
|
+
|
111
|
+
class TimePeriodMetadata(AnaplanModel):
|
112
|
+
data_type: Literal["TIME_ENTITY"] = Field(
|
113
|
+
description="The data type. Literal for the tagged union discriminator."
|
114
|
+
)
|
115
|
+
period_type: PeriodType = Field(description="The period type.")
|
116
|
+
|
117
|
+
|
118
|
+
class NumberMetadata(AnaplanModel):
|
119
|
+
data_type: Literal["NUMBER"] = Field(
|
120
|
+
description="The data type. Literal for the tagged union discriminator."
|
121
|
+
)
|
122
|
+
comparison_increase: Literal["GOOD", "BAD", "NEUTRAL"] | None = Field(
|
123
|
+
description="The comparison increase setting."
|
124
|
+
)
|
125
|
+
custom_units: str | None = Field(None, description="Custom units for display.")
|
126
|
+
decimal_places: int = Field(description="Number of decimal places.")
|
127
|
+
decimal_separator: Literal["COMMA", "FULL_STOP"] = Field(description="The decimal separator.")
|
128
|
+
units_display_type: Literal[
|
129
|
+
"CUSTOM_SUFFIX",
|
130
|
+
"CUSTOM_PREFIX",
|
131
|
+
"CURRENCY_CODE",
|
132
|
+
"CURRENCY_SYMBOL",
|
133
|
+
"PERCENTAGE_SUFFIX",
|
134
|
+
"NONE",
|
135
|
+
] = Field(description="Units display type.")
|
136
|
+
units_type: Literal["CUSTOM", "CURRENCY", "PERCENTAGE", "NONE"] = Field(
|
137
|
+
description="Units type."
|
138
|
+
)
|
139
|
+
zero_format: Literal["HYPHEN", "ZERO", "BLANK"] = Field(description="Zero format display.")
|
140
|
+
grouping_separator: Literal["COMMA", "FULL_STOP", "SPACE", "NONE"] = Field(
|
141
|
+
description="The grouping separator."
|
142
|
+
)
|
143
|
+
minimum_significant_digits: int = Field(description="Minimum significant digits.")
|
144
|
+
negative_number_notation: Literal["MINUS_SIGN", "PARENTHESES"] = Field(
|
145
|
+
description="Negative number notation."
|
146
|
+
)
|
147
|
+
|
148
|
+
|
149
|
+
class GenericTypeMetadata(AnaplanModel):
|
150
|
+
data_type: Literal["BOOLEAN", "NONE", "DATE"] = Field(description="The data type.")
|
151
|
+
|
152
|
+
|
37
153
|
class LineItem(AnaplanModel):
|
38
154
|
id: int = Field(description="The unique identifier of this line item.")
|
39
155
|
name: str = Field(description="The name of this line item.")
|
@@ -41,16 +157,33 @@ class LineItem(AnaplanModel):
|
|
41
157
|
description="The unique identifier of the module this line item belongs to."
|
42
158
|
)
|
43
159
|
module_name: str = Field(description="The name of the module this line item belongs to.")
|
44
|
-
format:
|
45
|
-
|
160
|
+
format: Literal["NUMBER", "BOOLEAN", "TEXT", "NONE", "DATE", "LIST", "TIME PERIOD"] = Field(
|
161
|
+
description="The format of this line item."
|
162
|
+
)
|
163
|
+
format_metadata: (
|
164
|
+
NumberMetadata | ListMetadata | TimePeriodMetadata | TextMetadata | GenericTypeMetadata
|
165
|
+
) = Field(
|
166
|
+
description="The format metadata of this line item. Each Type provides different metadata.",
|
167
|
+
discriminator="data_type",
|
168
|
+
)
|
46
169
|
summary: str = Field(description="The summary of this line item.")
|
47
|
-
applies_to: list[
|
170
|
+
applies_to: list[Dimension] = Field([], description="The applies to value of this line item.")
|
171
|
+
data_tags: list[Dimension] = Field([], description="The data tags of this line item.")
|
172
|
+
referenced_by: list[Dimension] = Field([], description="List of references to this line item.")
|
48
173
|
time_scale: str = Field(description="The time scale of this line item.")
|
49
174
|
time_range: str = Field(description="The time range of this line item.")
|
50
|
-
version:
|
175
|
+
version: Dimension = Field(description="The version of this line item.")
|
176
|
+
parent: Dimension | None = Field(None, description="The Parent of this line item.")
|
177
|
+
read_access_driver: Dimension | None = Field(
|
178
|
+
None, description="The read access driver of this line item."
|
179
|
+
)
|
180
|
+
write_access_driver: Dimension | None = Field(
|
181
|
+
None, description="The write access driver of this line item."
|
182
|
+
)
|
51
183
|
style: str = Field(description="The style of this line item.")
|
52
184
|
cell_count: int | None = Field(None, description="The cell count of this line item.")
|
53
185
|
notes: str = Field(description="The notes of this line item.")
|
186
|
+
code: str | None = Field(None, description="The code of this line item.")
|
54
187
|
is_summary: bool = Field(description="Whether this line item is a summary or not.")
|
55
188
|
formula: str | None = Field(None, description="The formula of this line item.")
|
56
189
|
formula_scope: str = Field(description="The formula scope of this line item.")
|
@@ -92,3 +225,87 @@ class InsertionResult(AnaplanModel):
|
|
92
225
|
ignored: int = Field(description="The number of items ignored, or items that failed.")
|
93
226
|
total: int = Field(description="The total number of items.")
|
94
227
|
failures: list[Failure] = Field([], description="The list of failures.")
|
228
|
+
|
229
|
+
|
230
|
+
class ListDeletionResult(AnaplanModel):
|
231
|
+
deleted: int = Field(description="The number of items successfully deleted.")
|
232
|
+
failures: list[Failure] = Field([], description="The list of failures.")
|
233
|
+
|
234
|
+
|
235
|
+
class PartialCurrentPeriod(AnaplanModel):
|
236
|
+
period_text: str = Field(description="The text representation of the current period.")
|
237
|
+
last_day: str = Field(description="The last day of the current period in YYYY-MM-DD format.")
|
238
|
+
|
239
|
+
|
240
|
+
class CurrentPeriod(PartialCurrentPeriod):
|
241
|
+
calendar_type: str = Field(description="The type of calendar used for the current period.")
|
242
|
+
|
243
|
+
|
244
|
+
class FiscalYear(AnaplanModel):
|
245
|
+
year: str = Field(description="The fiscal year in the format set in the model, e.g. FY24.")
|
246
|
+
start_date: str = Field(description="The start date of the fiscal year in YYYY-MM-DD format.")
|
247
|
+
end_date: str = Field(description="The end date of the fiscal year in YYYY-MM-DD format.")
|
248
|
+
|
249
|
+
|
250
|
+
class TotalsSelection(AnaplanModel):
|
251
|
+
quarter_totals: bool = Field(description="Whether quarter totals are enabled.")
|
252
|
+
half_year_totals: bool = Field(description="Whether half year totals are enabled.")
|
253
|
+
year_to_date_summary: bool = Field(description="Whether year to date summary is enabled.")
|
254
|
+
year_to_go_summary: bool = Field(description="Whether year to go summary is enabled.")
|
255
|
+
total_of_all_periods: bool = Field(description="Whether total of all periods is enabled.")
|
256
|
+
|
257
|
+
|
258
|
+
class TotalsSelectionWithQuarter(TotalsSelection):
|
259
|
+
extra_month_quarter: Literal[1, 2, 3, 4] = Field(
|
260
|
+
description="The quarter in which the extra month is included."
|
261
|
+
)
|
262
|
+
|
263
|
+
|
264
|
+
class BaseCalendar(AnaplanModel):
|
265
|
+
calendar_type: Literal[
|
266
|
+
"Calendar Months/Quarters/Years",
|
267
|
+
"Weeks: 4-4-5, 4-5-4 or 5-4-4",
|
268
|
+
"Weeks: General",
|
269
|
+
"Weeks: 13 4-week Periods",
|
270
|
+
] = Field(description="The type of calendar used.")
|
271
|
+
current_period: PartialCurrentPeriod = Field(description="The current period configuration.")
|
272
|
+
|
273
|
+
|
274
|
+
class MonthsQuartersYearsCalendar(BaseCalendar):
|
275
|
+
past_years_count: int = Field(description="The number of past years included.")
|
276
|
+
fiscal_year: FiscalYear = Field(description="The fiscal year configuration.")
|
277
|
+
totals_selection: TotalsSelection = Field(
|
278
|
+
description="The totals selection configuration for the calendar."
|
279
|
+
)
|
280
|
+
|
281
|
+
|
282
|
+
class WeeksGeneralCalendar(BaseCalendar):
|
283
|
+
start_date: str = Field(description="The start date of the calendar in YYYY-MM-DD format.")
|
284
|
+
weeks_count: int = Field(description="The number of weeks in the calendar.")
|
285
|
+
|
286
|
+
|
287
|
+
class WeeksPeriodsCalendar(BaseCalendar):
|
288
|
+
fiscal_year: FiscalYear = Field(description="The fiscal year configuration.")
|
289
|
+
past_years_count: int = Field(description="The number of past years included.")
|
290
|
+
future_years_count: int = Field(description="The number of future years included.")
|
291
|
+
extra_week_month: int = Field(description="The month in which the extra week is included.")
|
292
|
+
week_format: Literal["Numbered", "Week Commencing", "Week Ending"] = Field(
|
293
|
+
description="The format of the week."
|
294
|
+
)
|
295
|
+
totals_selection: TotalsSelectionWithQuarter = Field(
|
296
|
+
description="The totals selection configuration for the calendar."
|
297
|
+
)
|
298
|
+
|
299
|
+
|
300
|
+
class WeeksGroupingCalendar(WeeksPeriodsCalendar):
|
301
|
+
week_grouping: str = Field(
|
302
|
+
description="The week grouping configuration, e.g. '4-4-5', '4-5-4', or '5-4-4'."
|
303
|
+
)
|
304
|
+
totals_selection: TotalsSelection = Field(
|
305
|
+
description="The totals selection configuration for the calendar."
|
306
|
+
)
|
307
|
+
|
308
|
+
|
309
|
+
ModelCalendar: TypeAlias = Union[
|
310
|
+
MonthsQuartersYearsCalendar, WeeksGeneralCalendar, WeeksGroupingCalendar, WeeksPeriodsCalendar
|
311
|
+
]
|
@@ -141,7 +141,9 @@ class ConnectionInput(AnaplanModel):
|
|
141
141
|
|
142
142
|
|
143
143
|
class Connection(_VersionedBaseModel):
|
144
|
-
|
144
|
+
id: str = Field(
|
145
|
+
validation_alias="connectionId", description="The unique identifier of this connection."
|
146
|
+
)
|
145
147
|
connection_type: ConnectionType = Field(description="The type of this connection.")
|
146
148
|
body: AzureBlobConnectionInfo | AmazonS3ConnectionInfo | GoogleBigQueryConnectionInfo = Field(
|
147
149
|
description="Connection information."
|
@@ -237,7 +239,9 @@ class _BaseIntegration(_VersionedBaseModel):
|
|
237
239
|
|
238
240
|
|
239
241
|
class Integration(_BaseIntegration):
|
240
|
-
|
242
|
+
id: str = Field(
|
243
|
+
validation_alias="integrationId", description="The unique identifier of this integration."
|
244
|
+
)
|
241
245
|
integration_type: Literal["Import", "Export", "Process"] = Field(
|
242
246
|
description="The type of this integration."
|
243
247
|
)
|
@@ -0,0 +1,282 @@
|
|
1
|
+
from typing import Any, Literal
|
2
|
+
|
3
|
+
from pydantic import Field
|
4
|
+
from typing_extensions import Self
|
5
|
+
|
6
|
+
from anaplan_sdk.models import AnaplanModel
|
7
|
+
|
8
|
+
AnaplanFilterFields = Literal[
|
9
|
+
"id", "externalId", "userName", "name.familyName", "name.givenName", "active"
|
10
|
+
]
|
11
|
+
|
12
|
+
|
13
|
+
class _FilterExpression:
|
14
|
+
def __init__(self, _field: AnaplanFilterFields) -> None:
|
15
|
+
self._field: AnaplanFilterFields = _field
|
16
|
+
self._exprs: list[str] = []
|
17
|
+
self._operators = []
|
18
|
+
|
19
|
+
def __str__(self) -> str:
|
20
|
+
if not self._exprs:
|
21
|
+
return "active eq true" if self._field == "active" else f"{self._field} pr"
|
22
|
+
parts = []
|
23
|
+
for i, expr in enumerate(self._exprs):
|
24
|
+
if i > 0:
|
25
|
+
parts.append(self._operators[i - 1])
|
26
|
+
parts.append(expr)
|
27
|
+
return " ".join(parts)
|
28
|
+
|
29
|
+
def __invert__(self) -> Self:
|
30
|
+
self._exprs.append(
|
31
|
+
"active eq false" if self._field == "active" else f"{self._field} eq null"
|
32
|
+
)
|
33
|
+
return self
|
34
|
+
|
35
|
+
def __and__(self, other: Self) -> Self:
|
36
|
+
return self._combine(other, "and")
|
37
|
+
|
38
|
+
def __or__(self, other: Self) -> Self:
|
39
|
+
return self._combine(other, "or")
|
40
|
+
|
41
|
+
def _combine(self, other: Self, operator: Literal["and", "or"]) -> Self:
|
42
|
+
if self._requires_grouping(operator):
|
43
|
+
self._exprs = [f"({str(self)})"]
|
44
|
+
self._operators = []
|
45
|
+
self._operators.append(operator)
|
46
|
+
if not self._exprs:
|
47
|
+
self._exprs.append(str(self))
|
48
|
+
self._exprs.append(f"({str(other)})" if other._requires_grouping(operator) else str(other))
|
49
|
+
return self
|
50
|
+
|
51
|
+
def _requires_grouping(self, operator: Literal["and", "or"]) -> bool:
|
52
|
+
return len(self._operators) > 0 and ("or" in self._operators or operator == "or")
|
53
|
+
|
54
|
+
def __eq__(self, other: Any) -> Self:
|
55
|
+
self._exprs.append(f'{self._field} eq "{other}"')
|
56
|
+
return self
|
57
|
+
|
58
|
+
def __ne__(self, other: Any) -> Self:
|
59
|
+
self._exprs.append(f'{self._field} ne "{other}"')
|
60
|
+
return self
|
61
|
+
|
62
|
+
def __gt__(self, other: Any) -> Self:
|
63
|
+
self._exprs.append(f'{self._field} gt "{other}"')
|
64
|
+
return self
|
65
|
+
|
66
|
+
def __ge__(self, other: Any) -> Self:
|
67
|
+
self._exprs.append(f'{self._field} ge "{other}"')
|
68
|
+
return self
|
69
|
+
|
70
|
+
def __lt__(self, other: Any) -> Self:
|
71
|
+
self._exprs.append(f'{self._field} lt "{other}"')
|
72
|
+
return self
|
73
|
+
|
74
|
+
def __le__(self, other: Any) -> Self:
|
75
|
+
self._exprs.append(f'{self._field} le "{other}"')
|
76
|
+
return self
|
77
|
+
|
78
|
+
|
79
|
+
field = _FilterExpression
|
80
|
+
|
81
|
+
|
82
|
+
class NameInput(AnaplanModel):
|
83
|
+
family_name: str = Field(
|
84
|
+
description="The family name of the User, or last name in most Western languages"
|
85
|
+
)
|
86
|
+
given_name: str = Field(
|
87
|
+
description="The given name of the User, or first name in most Western languages"
|
88
|
+
)
|
89
|
+
|
90
|
+
|
91
|
+
class Name(NameInput):
|
92
|
+
formatted: str = Field(
|
93
|
+
description=(
|
94
|
+
"The formatted full name, including given name and family name. Anaplan does as of now "
|
95
|
+
"not have other standard SCIM fields such as middle name or honorific pre- or suffixes."
|
96
|
+
)
|
97
|
+
)
|
98
|
+
|
99
|
+
|
100
|
+
class Email(AnaplanModel):
|
101
|
+
value: str = Field(description="Email address of the User")
|
102
|
+
type: Literal["work", "home", "other"] = Field(
|
103
|
+
default=None, description="A label indicating the emails's function, e.g., 'work' or 'home'"
|
104
|
+
)
|
105
|
+
primary: bool | None = Field(
|
106
|
+
default=None, description="Indicates if this is the primary or 'preferred' email"
|
107
|
+
)
|
108
|
+
|
109
|
+
|
110
|
+
class EntitlementInput(AnaplanModel):
|
111
|
+
value: str = Field(description="The value of an entitlement.")
|
112
|
+
type: Literal["WORKSPACE", "WORKSPACE_IDS", "WORKSPACE_NAMES"] = Field(
|
113
|
+
description="A label indicating the attribute's function."
|
114
|
+
)
|
115
|
+
|
116
|
+
|
117
|
+
class Entitlement(EntitlementInput):
|
118
|
+
display: str | None = Field(
|
119
|
+
default=None, description="A human-readable name, primarily used for display purposes."
|
120
|
+
)
|
121
|
+
primary: bool | None = Field(
|
122
|
+
default=None,
|
123
|
+
description="Indicating the 'primary' or preferred attribute value for this attribute.",
|
124
|
+
)
|
125
|
+
|
126
|
+
|
127
|
+
class _BaseUser(AnaplanModel):
|
128
|
+
schemas: list[str] = Field(default=["urn:ietf:params:scim:schemas:core:2.0:User"])
|
129
|
+
user_name: str = Field(description="Unique name for the User.")
|
130
|
+
|
131
|
+
|
132
|
+
class User(_BaseUser):
|
133
|
+
id: str = Field(description="The unique identifier for the User.")
|
134
|
+
name: Name = Field(description="The user's real name.")
|
135
|
+
active: bool = Field(description="Indicating the User's active status.")
|
136
|
+
emails: list[Email] = Field(default=[], description="Email addresses for the user.")
|
137
|
+
display_name: str = Field(description="Display Name for the User.")
|
138
|
+
entitlements: list[Entitlement] = Field(
|
139
|
+
default=[], description="A list of entitlements (Workspaces) the User has."
|
140
|
+
)
|
141
|
+
|
142
|
+
|
143
|
+
class ReplaceUserInput(_BaseUser):
|
144
|
+
id: str = Field(description="The unique identifier for the User.")
|
145
|
+
name: NameInput = Field(description="The user's real name.")
|
146
|
+
active: bool | None = Field(default=None, description="Indicating the User's active status.")
|
147
|
+
display_name: str | None = Field(default=None, description="Display Name for the User.")
|
148
|
+
entitlements: list[EntitlementInput] | None = Field(
|
149
|
+
default=None, description="A list of entitlements (Workspaces) the User has."
|
150
|
+
)
|
151
|
+
|
152
|
+
|
153
|
+
class UserInput(_BaseUser):
|
154
|
+
external_id: str = Field(
|
155
|
+
description="Your unique id for this user (as stored in your company systems)."
|
156
|
+
)
|
157
|
+
name: NameInput = Field(description="The user's real name.")
|
158
|
+
|
159
|
+
|
160
|
+
class Meta(AnaplanModel):
|
161
|
+
resource_type: str = Field(description="The type of the resource.")
|
162
|
+
location: str = Field(description="The URI of the resource.")
|
163
|
+
|
164
|
+
|
165
|
+
class MetaWithDates(Meta):
|
166
|
+
created: str = Field(description="The timestamp when the resource was created.")
|
167
|
+
last_modified: str = Field(description="The timestamp when the resource was last modified.")
|
168
|
+
|
169
|
+
|
170
|
+
class Supported(AnaplanModel):
|
171
|
+
supported: bool = Field(description="Indicates whether the Feature is supported.")
|
172
|
+
|
173
|
+
|
174
|
+
class BulkConfig(Supported):
|
175
|
+
max_operations: int = Field(
|
176
|
+
description="The maximum number of operations permitted in a single request."
|
177
|
+
)
|
178
|
+
max_payload_size: int = Field(description="The maximum payload size in bytes.")
|
179
|
+
|
180
|
+
|
181
|
+
class FilterConfig(Supported):
|
182
|
+
max_results: int = Field(
|
183
|
+
description="The maximum number of results returned from a filtered query."
|
184
|
+
)
|
185
|
+
|
186
|
+
|
187
|
+
class AuthenticationScheme(AnaplanModel):
|
188
|
+
name: str = Field(description="The name of the authentication scheme.")
|
189
|
+
type: str = Field(description="The type of the authentication scheme.")
|
190
|
+
description: str = Field(description="A description of the authentication scheme.")
|
191
|
+
spec_uri: str = Field(
|
192
|
+
description="The URI that points to the specification of the authentication scheme."
|
193
|
+
)
|
194
|
+
documentation_uri: str = Field(
|
195
|
+
description="The URI that points to the documentation of the authentication scheme."
|
196
|
+
)
|
197
|
+
|
198
|
+
|
199
|
+
class ServiceProviderConfig(AnaplanModel):
|
200
|
+
schemas: list[str] = Field(
|
201
|
+
default=["urn:ietf:params:scim:schemas:core:2.0:ServiceProviderConfig"],
|
202
|
+
description="Schemas for this resource.",
|
203
|
+
)
|
204
|
+
meta: MetaWithDates = Field(description="Metadata about the resource.")
|
205
|
+
documentation_uri: str = Field(description="URI of the service provider's documentation.")
|
206
|
+
patch: Supported = Field(description="Configuration for PATCH operations.")
|
207
|
+
bulk: BulkConfig = Field(description="Configuration for bulk operations.")
|
208
|
+
filter: FilterConfig = Field(description="Configuration for filtering.")
|
209
|
+
change_password: Supported = Field(description="Configuration for password changes.")
|
210
|
+
sort: Supported = Field(description="Configuration for sorting.")
|
211
|
+
etag: Supported = Field(description="Configuration for ETags.")
|
212
|
+
authentication_schemes: list[AuthenticationScheme] = Field(
|
213
|
+
description="List of supported authentication schemes."
|
214
|
+
)
|
215
|
+
|
216
|
+
|
217
|
+
class Resource(AnaplanModel):
|
218
|
+
schemas: list[str] = Field(
|
219
|
+
default=["urn:ietf:params:scim:schemas:core:2.0:ResourceType"],
|
220
|
+
description="Schemas for this resource.",
|
221
|
+
)
|
222
|
+
meta: Meta = Field(description="Metadata about the resource.")
|
223
|
+
id: str = Field(description="The identifier of the resource type.")
|
224
|
+
name: str = Field(description="The name of the resource type.")
|
225
|
+
endpoint: str = Field(description="The endpoint where resources of this type may be accessed.")
|
226
|
+
description: str = Field(description="A description of the resource type.")
|
227
|
+
|
228
|
+
|
229
|
+
class Attribute(AnaplanModel):
|
230
|
+
name: str = Field(description="The name of the attribute.")
|
231
|
+
type: str = Field(description="The data type of the attribute.")
|
232
|
+
multi_valued: bool = Field(description="Indicates if the attribute can have multiple values.")
|
233
|
+
description: str = Field(description="A human-readable description of the attribute.")
|
234
|
+
required: bool = Field(description="Indicates if the attribute is required.")
|
235
|
+
case_exact: bool = Field(
|
236
|
+
description="Indicates if case sensitivity should be considered when comparing values."
|
237
|
+
)
|
238
|
+
mutability: str = Field(description="Indicates if and how the attribute can be modified.")
|
239
|
+
returned: str = Field(
|
240
|
+
description="Indicates when the attribute's values are returned in a response."
|
241
|
+
)
|
242
|
+
uniqueness: str = Field(
|
243
|
+
description="Indicates how uniqueness is enforced on the attribute value."
|
244
|
+
)
|
245
|
+
sub_attributes: list["Attribute"] | None = Field(
|
246
|
+
default=None, description="A list of sub-attributes if the attribute is complex."
|
247
|
+
)
|
248
|
+
|
249
|
+
|
250
|
+
class Schema(AnaplanModel):
|
251
|
+
meta: Meta = Field(description="Metadata about the schema resource.")
|
252
|
+
id: str = Field(description="The unique identifier for the schema.")
|
253
|
+
name: str = Field(description="The name of the schema.")
|
254
|
+
description: str = Field(description="A description of the schema.")
|
255
|
+
attributes: list[Attribute] = Field(description="A list of attributes that define the schema.")
|
256
|
+
|
257
|
+
|
258
|
+
class Operation(AnaplanModel):
|
259
|
+
op: Literal["add", "remove", "replace"] = Field(description="The operation to be performed.")
|
260
|
+
path: str = Field(
|
261
|
+
description=(
|
262
|
+
"A string containing a JSON-Pointer value that references a location within the target "
|
263
|
+
"resource."
|
264
|
+
)
|
265
|
+
)
|
266
|
+
value: Any | None = Field(default=None, description="The value to be used in the operation.")
|
267
|
+
|
268
|
+
|
269
|
+
class Replace(Operation):
|
270
|
+
op: Literal["replace"] = Field(
|
271
|
+
default="replace", description="Replace the value at path with the new given value."
|
272
|
+
)
|
273
|
+
|
274
|
+
|
275
|
+
class Add(Operation):
|
276
|
+
op: Literal["add"] = Field(
|
277
|
+
default="add", description="Add the given value to the attribute at path."
|
278
|
+
)
|
279
|
+
|
280
|
+
|
281
|
+
class Remove(Operation):
|
282
|
+
op: Literal["remove"] = Field(default="remove", description="Remove the value at path.")
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: anaplan-sdk
|
3
|
-
Version: 0.
|
4
|
-
Summary: Streamlined Python Interface for Anaplan
|
3
|
+
Version: 0.5.0
|
4
|
+
Summary: Streamlined Python Interface for the Anaplan API.
|
5
5
|
Project-URL: Homepage, https://vinzenzklass.github.io/anaplan-sdk/
|
6
6
|
Project-URL: Repository, https://github.com/VinzenzKlass/anaplan-sdk
|
7
7
|
Project-URL: Documentation, https://vinzenzklass.github.io/anaplan-sdk/
|
@@ -0,0 +1,34 @@
|
|
1
|
+
anaplan_sdk/__init__.py,sha256=wkK6fPTp2-YiR9XVC-O1Iyf1FhVAcAxvJbX_YrF0p_c,397
|
2
|
+
anaplan_sdk/_auth.py,sha256=l5z2WCcfQ05OkuQ1dcmikp6dB87Rw1qy2zu8bbaAQTs,16620
|
3
|
+
anaplan_sdk/_oauth.py,sha256=AynlJDrGIinQT0jwxI2RSvtU4D7Wasyw3H1uicdlLVI,12672
|
4
|
+
anaplan_sdk/_services.py,sha256=n14DvTC2I5ub7yzjWBaAAX9YMF7LwI_BU7zuofAj0l4,13026
|
5
|
+
anaplan_sdk/_utils.py,sha256=jsrhdfLpriMoANukVvXpjpEJ5hWDNx7ZJKAguLvKgJA,7517
|
6
|
+
anaplan_sdk/exceptions.py,sha256=ALkA9fBF0NQ7dufFxV6AivjmHyuJk9DOQ9jtJV2n7f0,1809
|
7
|
+
anaplan_sdk/_async_clients/__init__.py,sha256=oDYqtZIHWMA0iAfAv49htKaiS3sBBouqD_hEqaTWQL8,491
|
8
|
+
anaplan_sdk/_async_clients/_alm.py,sha256=_PTD9Eght879HAadjcsfdvS0KCN93jgwpPOF8r3_E14,13178
|
9
|
+
anaplan_sdk/_async_clients/_audit.py,sha256=6s6IceSyz1GXxigH1JAYarL9WMCxUdaCCAj4AjCgY_E,2897
|
10
|
+
anaplan_sdk/_async_clients/_bulk.py,sha256=v-nyyf68NTs0PbQ-_5tGKbyUJZhRwZ8k0Pop5Yfg2K8,30517
|
11
|
+
anaplan_sdk/_async_clients/_cloud_works.py,sha256=aSgmJQvE7dSJawwK0A7GEBWs7wokWk7eCwRiQuiVg6I,17701
|
12
|
+
anaplan_sdk/_async_clients/_cw_flow.py,sha256=qJJFfnwLR7zIdZ_ay4fVI9zr3eP5B-qMcs4GlC9vqQY,3966
|
13
|
+
anaplan_sdk/_async_clients/_scim.py,sha256=pBIrxP31n5YhFnDEu0eu8VpQas8SBy6JIdCBn_Z9oNM,7036
|
14
|
+
anaplan_sdk/_async_clients/_transactional.py,sha256=f-NlIjvRJ0NIKRcI6ZaO2YatLERwIaC0TY0fKvgUJ5Q,18050
|
15
|
+
anaplan_sdk/_clients/__init__.py,sha256=RB2ZYSW5vDrw8oAeDAkf7jmxu-Fr4yFLt3ebTtigE4Y,421
|
16
|
+
anaplan_sdk/_clients/_alm.py,sha256=oRHTjnCuwQYZDE2CBWA1u410jSImIroCsDOSeP9U9w8,12905
|
17
|
+
anaplan_sdk/_clients/_audit.py,sha256=Am6VviRw88_VC5i0N7TQTXEm6pJAHZb7xNaJTljD0fc,2850
|
18
|
+
anaplan_sdk/_clients/_bulk.py,sha256=e1yRHcskAALhG1JClLYknRo_kXZUQkmG_Zc6TXY6IUk,30659
|
19
|
+
anaplan_sdk/_clients/_cloud_works.py,sha256=1bbMYM_g8MSorxTI9Au_dFzbJZgKGJVBE6DYlbWBR0U,17492
|
20
|
+
anaplan_sdk/_clients/_cw_flow.py,sha256=x64Ua2FwCpt8vab6gaLV8tDwW_ugJrDfU5dv-TnmM2M,3855
|
21
|
+
anaplan_sdk/_clients/_scim.py,sha256=a5i7CNVNzF45YMbLY70ta_UumFumthZRmlfNm8rj2O0,6960
|
22
|
+
anaplan_sdk/_clients/_transactional.py,sha256=IgkvBaq1Ep5mB-uxu6QoE17cUCfsodvV8dppASQrIT4,17875
|
23
|
+
anaplan_sdk/models/__init__.py,sha256=zfwDQJQrXuLEXSpbJcm08a_YK1P7a7u-kMhwtJiJFmA,1783
|
24
|
+
anaplan_sdk/models/_alm.py,sha256=oeENd0YM7-LoIRBq2uATIQTxVgIP9rXx3UZE2UnQAp0,4670
|
25
|
+
anaplan_sdk/models/_base.py,sha256=6AZc9CfireUKgpZfMxYKu4MbwiyHQOsGLjKrxGXBLic,508
|
26
|
+
anaplan_sdk/models/_bulk.py,sha256=C0s6XdvHxuJHrPXU-pnZ1JXK1PJOl9FScHArpaox_mQ,8489
|
27
|
+
anaplan_sdk/models/_transactional.py,sha256=2bH10zvtMb5Lfh6DC7iQk72aEwq6tyLQ-XnH_0wYSqI,14172
|
28
|
+
anaplan_sdk/models/cloud_works.py,sha256=APUGDt_e-JshtXkba5cQh5rZkXOZBz0Aix0qVNdEWgw,19501
|
29
|
+
anaplan_sdk/models/flows.py,sha256=SuLgNj5-2SeE3U1i8iY8cq2IkjuUgd_3M1n2ENructk,3625
|
30
|
+
anaplan_sdk/models/scim.py,sha256=jxPrn-LgoZFYm5rtfCwmceD6i8rkJwAZUlgLx036gjg,11099
|
31
|
+
anaplan_sdk-0.5.0.dist-info/METADATA,sha256=z7bNEC8waH3ceiUQ9NcERf6D-KPrhpG_h1VQPwtZ8Gg,3676
|
32
|
+
anaplan_sdk-0.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
33
|
+
anaplan_sdk-0.5.0.dist-info/licenses/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
|
34
|
+
anaplan_sdk-0.5.0.dist-info/RECORD,,
|