File: models.py

package info (click to toggle)
python-xbox-webapi 2.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,916 kB
  • sloc: python: 4,973; makefile: 79
file content (425 lines) | stat: -rw-r--r-- 13,014 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
from datetime import datetime
from enum import Enum
from typing import Any, List, Optional, Union

from pydantic import Field, field_validator

from xbox.webapi.common.models import PascalCaseModel


class AlternateIdType(str, Enum):
    LEGACY_XBOX_PRODUCT_ID = "LegacyXboxProductId"
    XBOX_TITLE_ID = "XboxTitleId"
    PACKAGE_FAMILY_NAME = "PackageFamilyName"


class FieldsTemplate(str, Enum):
    BROWSE = "browse"
    DETAILS = "details"


class PlatformType(str, Enum):
    XBOX = "windows.xbox"
    DESKTOP = "windows.desktop"


class Image(PascalCaseModel):
    file_id: Optional[str] = None
    eis_listing_identifier: Any = Field(None, alias="EISListingIdentifier")
    background_color: Optional[str] = None
    caption: Optional[str] = None
    file_size_in_bytes: int
    foreground_color: Optional[str] = None
    height: int
    image_position_info: Optional[str] = None
    image_purpose: str
    unscaled_image_sha256_hash: Optional[str] = Field(None, alias="UnscaledImageSHA256Hash")
    uri: str
    width: int


class Video(PascalCaseModel):
    uri: str
    video_purpose: str
    height: int
    width: int
    audio_encoding: str
    video_encoding: str
    video_position_info: str
    caption: str
    file_size_in_bytes: int
    preview_image: Image
    sort_order: int


class SearchTitle(PascalCaseModel):
    search_title_string: str
    search_title_type: str


class ContentRating(PascalCaseModel):
    rating_system: str
    rating_id: str
    rating_descriptors: List[str]
    rating_disclaimers: List
    interactive_elements: Optional[List] = None


class UsageData(PascalCaseModel):
    aggregate_time_span: str
    average_rating: float
    play_count: Optional[int] = None
    rating_count: int
    rental_count: Optional[str] = None
    trial_count: Optional[str] = None
    purchase_count: Optional[str] = None


class ProductProperties(PascalCaseModel):
    attributes: Optional[List] = None
    can_install_to_sd_card: Optional[bool] = Field(None, alias="CanInstallToSDCard")
    category: Optional[str] = None
    sub_category: Optional[str] = None
    categories: Optional[List[str]] = None
    extensions: Any = None
    is_accessible: Optional[bool] = None
    is_line_of_business_app: Optional[bool] = None
    is_published_to_legacy_windows_phone_store: Optional[bool] = None
    is_published_to_legacy_windows_store: Optional[bool] = None
    is_settings_app: Optional[bool] = None
    package_family_name: Optional[str] = None
    package_identity_name: Optional[str] = None
    publisher_certificate_name: Optional[str] = None
    publisher_id: str
    xbox_live_tier: Any = None
    xbox_xpa: Any = Field(None, alias="XboxXPA")
    xbox_cross_gen_set_id: Any = None
    xbox_console_gen_optimized: Any = None
    xbox_console_gen_compatible: Any = None
    xbox_live_gold_required: Optional[bool] = None
    ownership_type: Any = None
    pdp_background_color: Optional[str] = None
    has_add_ons: Optional[bool] = None
    revision_id: str
    product_group_id: Optional[str] = None
    product_group_name: Optional[str] = None


class AlternateId(PascalCaseModel):
    id_type: str
    value: str


class ValidationData(PascalCaseModel):
    passed_validation: bool
    revision_id: str
    validation_result_uri: Optional[str] = None


class FulfillmentData(PascalCaseModel):
    product_id: str
    wu_bundle_id: Optional[str] = None
    wu_category_id: str
    package_family_name: str
    sku_id: str
    content: Any = None
    package_features: Any = None


class HardwareProperties(PascalCaseModel):
    minimum_hardware: List
    recommended_hardware: List
    minimum_processor: Any = None
    recommended_processor: Any = None
    minimum_graphics: Any = None
    recommended_graphics: Any = None


class Application(PascalCaseModel):
    application_id: str
    declaration_order: int
    extensions: List[str]


class FrameworkDependency(PascalCaseModel):
    max_tested: int
    min_version: int
    package_identity: str


class PlatformDependency(PascalCaseModel):
    max_tested: Optional[int] = None
    min_version: Optional[int] = None
    platform_name: str


class Package(PascalCaseModel):
    applications: Optional[List[Application]] = None
    architectures: List[str]
    capabilities: Optional[List[str]] = None
    device_capabilities: Optional[List[str]] = None
    experience_ids: Optional[List] = None
    framework_dependencies: Optional[List[FrameworkDependency]] = None
    hardware_dependencies: Optional[List] = None
    hardware_requirements: Optional[List] = None
    hash: Optional[str] = None
    hash_algorithm: Optional[str] = None
    is_streaming_app: Optional[bool] = None
    languages: Optional[List[str]] = None
    max_download_size_in_bytes: int
    max_install_size_in_bytes: Optional[int] = None
    package_format: str
    package_family_name: Optional[str] = None
    main_package_family_name_for_dlc: Any = None
    package_full_name: Optional[str] = None
    package_id: str
    content_id: str
    key_id: Optional[str] = None
    package_rank: Optional[int] = None
    package_uri: Optional[str] = None
    platform_dependencies: Optional[List[PlatformDependency]] = None
    platform_dependency_xml_blob: Optional[str] = None
    resource_id: Optional[str] = None
    version: Optional[str] = None
    package_download_uris: Any = None
    driver_dependencies: Optional[List] = None
    fulfillment_data: Optional[FulfillmentData] = None


class LegalText(PascalCaseModel):
    additional_license_terms: str
    copyright: str
    copyright_uri: str
    privacy_policy: str
    privacy_policy_uri: str
    tou: str
    tou_uri: str


class SkuLocalizedProperty(PascalCaseModel):
    contributors: Optional[List] = None
    features: Optional[List] = None
    minimum_notes: Optional[str] = None
    recommended_notes: Optional[str] = None
    release_notes: Optional[str] = None
    display_platform_properties: Any = None
    sku_description: str
    sku_title: str
    sku_button_title: Optional[str] = None
    delivery_date_overlay: Any = None
    sku_display_rank: Optional[List] = None
    text_resources: Any = None
    images: Optional[List] = None
    legal_text: Optional[LegalText] = None
    language: str
    markets: List[str]


class SkuMarketProperty(PascalCaseModel):
    first_available_date: Optional[Union[datetime, str]] = None
    supported_languages: Optional[List[str]] = None
    package_ids: Any = None
    pi_filter: Any = Field(None, alias="PIFilter")
    markets: List[str]


class SkuProperties(PascalCaseModel):
    early_adopter_enrollment_url: Any = None
    fulfillment_data: Optional[FulfillmentData] = None
    fulfillment_type: Optional[str] = None
    fulfillment_plugin_id: Any = None
    has_third_party_iaps: Optional[bool] = Field(None, alias="HasThirdPartyIAPs")
    last_update_date: Optional[datetime] = None
    hardware_properties: Optional[HardwareProperties] = None
    hardware_requirements: Optional[List] = None
    hardware_warning_list: Optional[List] = None
    installation_terms: str
    packages: Optional[List[Package]] = None
    version_string: Optional[str] = None
    visible_to_b2b_service_ids: List = Field(alias="VisibleToB2BServiceIds")
    xbox_xpa: Optional[bool] = Field(None, alias="XboxXPA")
    bundled_skus: Optional[List] = None
    is_repurchasable: bool
    sku_display_rank: int
    display_physical_store_inventory: Any = None
    additional_identifiers: List
    is_trial: bool
    is_pre_order: bool
    is_bundle: bool

    @field_validator("last_update_date", mode="before", check_fields=True)
    def validator(x):
        return x or None

class Sku(PascalCaseModel):
    last_modified_date: datetime
    localized_properties: List[SkuLocalizedProperty]
    market_properties: List[SkuMarketProperty]
    product_id: str
    properties: SkuProperties
    sku_a_schema: str
    sku_b_schema: str
    sku_id: str
    sku_type: str
    recurrence_policy: Any = None
    subscription_policy_id: Any = None


class AllowedPlatform(PascalCaseModel):
    max_version: Optional[int] = None
    min_version: Optional[int] = None
    platform_name: str


class ClientConditions(PascalCaseModel):
    allowed_platforms: List[AllowedPlatform]


class Conditions(PascalCaseModel):
    client_conditions: ClientConditions
    end_date: datetime
    resource_set_ids: List[str]
    start_date: datetime


class PIFilter(PascalCaseModel):
    exclusion_properties: List
    inclusion_properties: List


class Price(PascalCaseModel):
    currency_code: str
    is_pi_required: bool = Field(alias="IsPIRequired")
    list_price: float
    msrp: float = Field(alias="MSRP")
    tax_type: str
    wholesale_currency_code: str


class OrderManagementData(PascalCaseModel):
    granted_entitlement_keys: Optional[List] = None
    pi_filter: Optional[PIFilter] = Field(None, alias="PIFilter")
    price: Price


class AvailabilityProperties(PascalCaseModel):
    original_release_date: Optional[datetime] = None


class SatisfyingEntitlementKey(PascalCaseModel):
    entitlement_keys: List[str]
    licensing_key_ids: List[str]


class LicensingData(PascalCaseModel):
    satisfying_entitlement_keys: List[SatisfyingEntitlementKey]


class Availability(PascalCaseModel):
    actions: List[str]
    availability_a_schema: Optional[str] = None
    availability_b_schema: Optional[str] = None
    availability_id: Optional[str] = None
    conditions: Optional[Conditions] = None
    last_modified_date: Optional[datetime] = None
    markets: Optional[List[str]] = None
    order_management_data: Optional[OrderManagementData] = None
    properties: Optional[AvailabilityProperties] = None
    sku_id: Optional[str] = None
    display_rank: Optional[int] = None
    remediation_required: Optional[bool] = None
    licensing_data: Optional[LicensingData] = None


class DisplaySkuAvailability(PascalCaseModel):
    sku: Optional[Sku] = None
    availabilities: List[Availability]


class LocalizedProperty(PascalCaseModel):
    developer_name: Optional[str] = None
    display_platform_properties: Optional[Any] = None
    publisher_name: Optional[str] = None
    publisher_website_uri: Optional[str] = None
    support_uri: Optional[str] = None
    eligibility_properties: Optional[Any] = None
    franchises: Optional[List] = None
    images: List[Image]
    videos: Optional[List[Video]] = None
    product_description: Optional[str] = None
    product_title: str
    short_title: Optional[str] = None
    sort_title: Optional[str] = None
    friendly_title: Optional[str] = None
    short_description: Optional[str] = None
    search_titles: Optional[List[SearchTitle]] = None
    voice_title: Optional[str] = None
    render_group_details: Optional[Any] = None
    product_display_ranks: Optional[List] = None
    interactive_model_config: Optional[Any] = None
    interactive_3d_enabled: Optional[bool] = Field(None, alias="Interactive3DEnabled")
    language: Optional[str] = None
    markets: Optional[List[str]] = None


class MarketProperty(PascalCaseModel):
    original_release_date: Optional[datetime] = None
    original_release_friendly_name: Optional[str] = None
    minimum_user_age: Optional[int] = None
    content_ratings: Optional[List[ContentRating]] = None
    related_products: Optional[List] = None
    usage_data: List[UsageData]
    bundle_config: Optional[Any] = None
    markets: Optional[List[str]] = None


class Product(PascalCaseModel):
    last_modified_date: Optional[datetime] = None
    localized_properties: List[LocalizedProperty]
    market_properties: List[MarketProperty]
    product_a_schema: Optional[str] = None
    product_b_schema: Optional[str] = None
    product_id: str
    properties: Optional[ProductProperties] = None
    alternate_ids: Optional[List[AlternateId]] = None
    domain_data_version: Optional[Any] = None
    ingestion_source: Optional[str] = None
    is_microsoft_product: Optional[bool] = None
    preferred_sku_id: Optional[str] = None
    product_type: Optional[str] = None
    validation_data: Optional[ValidationData] = None
    merchandizing_tags: Optional[List] = None
    part_d: Optional[str] = None
    product_family: str
    schema_version: Optional[str] = None
    product_kind: str
    display_sku_availabilities: List[DisplaySkuAvailability]


class CatalogResponse(PascalCaseModel):
    big_ids: Optional[List[str]] = None
    has_more_pages: Optional[bool] = None
    products: List[Product]
    total_result_count: Optional[int] = None


class SearchProduct(PascalCaseModel):
    background_color: Optional[str] = None
    height: Optional[int] = None
    image_type: Optional[str] = None
    width: Optional[int] = None
    platform_properties: List
    icon: Optional[str] = None
    product_id: str
    type: str
    title: str


class CatalogSearchResult(PascalCaseModel):
    product_family_name: str
    products: List[SearchProduct]


class CatalogSearchResponse(PascalCaseModel):
    results: List[CatalogSearchResult]
    total_result_count: int