class StockResponseModel(BaseModel): activationCodesExpirationDatetime: Optional[datetime] hasActivationCodes: bool beginningDatetime: Optional[datetime] bookingLimitDatetime: Optional[datetime] dnBookedQuantity: int = Field(alias="bookingsQuantity") dateCreated: datetime dateModified: datetime id: str isEventDeletable: bool isEventExpired: bool offerId: str price: float quantity: Optional[int] _humanize_id = humanize_field("id") _humanize_offer_id = humanize_field("offerId") @classmethod def from_orm(cls, stock: Stock): # type: ignore activation_code = (ActivationCode.query.filter( ActivationCode.stockId == stock.id).first() if stock.canHaveActivationCodes else None) stock.hasActivationCodes = bool(activation_code) stock.activationCodesExpirationDatetime = activation_code.expirationDate if activation_code else None return super().from_orm(stock) class Config: allow_population_by_field_name = True arbitrary_types_allowed = True json_encoders = {datetime: format_into_utc_date} orm_mode = True
class GetOffererVenueResponseModel(BaseModel): address: Optional[str] bic: Optional[str] bookingEmail: Optional[str] city: Optional[str] comment: Optional[str] dateCreated: datetime dateModifiedAtLastProvider: Optional[datetime] departementCode: Optional[str] iban: Optional[str] id: str idAtProviders: Optional[str] isValidated: bool isVirtual: bool lastProviderId: Optional[str] latitude: Optional[float] longitude: Optional[float] managingOffererId: str name: str nOffers: int postalCode: Optional[str] publicName: Optional[str] siret: Optional[str] venueLabelId: Optional[str] venueTypeId: Optional[str] _humanize_id = humanize_field("id") _humanize_managing_offerer_id = humanize_field("managingOffererId") _humanize_venue_label_id = humanize_field("venueLabelId") _humanize_venue_type_id = humanize_field("venueTypeId") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class GetOfferProductResponseModel(BaseModel): ageMax: Optional[int] ageMin: Optional[int] conditions: Optional[str] dateModifiedAtLastProvider: Optional[datetime] description: Optional[str] durationMinutes: Optional[int] extraData: Any fieldsUpdated: list[str] id: str idAtProviders: Optional[str] isGcuCompatible: bool isNational: bool lastProviderId: Optional[str] mediaUrls: list[str] name: str owningOffererId: Optional[str] thumbCount: int url: Optional[str] _humanize_id = humanize_field("id") _humanize_last_provider_id = humanize_field("lastProviderId") _humanize_owning_offerer_id = humanize_field("owningOffererId") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class VenueProviderResponse(BaseModel): id: str idAtProviders: Optional[str] dateModifiedAtLastProvider: Optional[datetime] isActive: bool isFromAllocineProvider: bool lastProviderId: Optional[str] lastSyncDate: Optional[datetime] nOffers: int providerId: str venueId: str venueIdAtOfferProvider: str provider: ProviderResponse # TODO(asaunier): Check if this field is necessary fieldsUpdated: List[str] quantity: Optional[int] isDuo: Optional[bool] price: Optional[float] _humanize_id = humanize_field("id") _humanize_venue_id = humanize_field("venueId") _humanize_provider_id = humanize_field("providerId") class Config: orm_mode = True
class GetOffererVenueResponseModel(BaseModel): address: Optional[str] bookingEmail: Optional[str] city: Optional[str] comment: Optional[str] departementCode: Optional[str] id: str isValidated: bool isVirtual: bool managingOffererId: str name: str postalCode: Optional[str] publicName: Optional[str] venueLabelId: Optional[str] venueTypeId: Optional[str] withdrawalDetails: Optional[str] audioDisabilityCompliant: Optional[bool] mentalDisabilityCompliant: Optional[bool] motorDisabilityCompliant: Optional[bool] visualDisabilityCompliant: Optional[bool] _humanize_id = humanize_field("id") _humanize_managing_offerer_id = humanize_field("managingOffererId") _humanize_venue_label_id = humanize_field("venueLabelId") _humanize_venue_type_id = humanize_field("venueTypeId") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class GetOffererResponseModel(BaseModel): address: Optional[str] bic: Optional[str] city: str dateCreated: datetime dateModifiedAtLastProvider: Optional[datetime] demarchesSimplifieesApplicationId: Optional[str] fieldsUpdated: List[str] iban: Optional[str] id: str idAtProviders: Optional[str] isValidated: bool lastProviderId: Optional[str] managedVenues: List[GetOffererVenueResponseModel] name: str nOffers: int postalCode: str # FIXME (dbaty, 2020-11-09): optional until we populate the database (PC-5693) siren: Optional[str] _humanize_id = humanize_field("id") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class VenueListItemResponseModel(BaseModel): id: str managingOffererId: str name: str offererName: str publicName: Optional[str] isVirtual: bool bookingEmail: Optional[str] withdrawalDetails: Optional[str] audioDisabilityCompliant: Optional[bool] mentalDisabilityCompliant: Optional[bool] motorDisabilityCompliant: Optional[bool] visualDisabilityCompliant: Optional[bool] _humanize_id = humanize_field("id") _humanize_managing_offerer_id = humanize_field("managingOffererId")
class PatchUserResponseModel(BaseModel): id: str email: EmailStr publicName: str postalCode: str phoneNumber: Optional[str] departementCode: str activity: Optional[str] address: Optional[str] isBeneficiary: bool city: Optional[str] civility: Optional[str] dateCreated: datetime dateOfBirth: Optional[datetime] firstName: Optional[str] hasOffers: bool hasPhysicalVenues: bool isAdmin: bool lastConnectionDate: Optional[datetime] lastName: Optional[str] needsToFillCulturalSurvey: bool _normalize_id = humanize_field("id") class Config: json_encoders = {datetime: format_into_utc_date} orm_mode = True alias_generator = to_camel allow_population_by_field_name = True arbitrary_types_allowed = True
class SharedLoginUserResponseModel(BaseModel): activity: Optional[str] address: Optional[str] city: Optional[str] civility: Optional[str] dateCreated: datetime dateOfBirth: Optional[datetime] departementCode: str email: str firstName: Optional[str] hasAllowedRecommendations: bool hasOffers: Optional[bool] hasPhysicalVenues: Optional[bool] hasSeenProTutorials: Optional[bool] id: str isAdmin: bool isBeneficiary: bool isEmailValidated: bool lastConnectionDate: Optional[str] lastName: Optional[str] needsToFillCulturalSurvey: Optional[bool] phoneNumber: Optional[str] postalCode: Optional[str] publicName: Optional[str] _normalize_id = humanize_field("id") class Config: json_encoders = {datetime: format_into_utc_date} orm_mode = True alias_generator = to_camel allow_population_by_field_name = True arbitrary_types_allowed = True
class MediationResponseIdModel(BaseModel): id: str _humanize_id = humanize_field("id") class Config: orm_mode = True
class GetOffererNameResponseModel(BaseModel): id: str name: str _humanize_id = humanize_field("id") class Config: orm_mode = True
class VenueLabelResponseModel(BaseModel): id: str label: str _humanize_id = humanize_field("id") class Config: orm_mode = True
class OfferResponseIdModel(BaseModel): id: str _humanize_id = humanize_field("id") class Config: orm_mode = True allow_population_by_field_name = True arbitrary_types_allowed = True
class GetOfferStockResponseModel(BaseModel): beginningDatetime: Optional[datetime] bookingLimitDatetime: Optional[datetime] dnBookedQuantity: int = Field(alias="bookingsQuantity") cancellationLimitDate: Optional[datetime] dateCreated: datetime dateModified: datetime dateModifiedAtLastProvider: Optional[datetime] fieldsUpdated: list[str] hasActivationCode: bool id: str idAtProviders: Optional[str] isBookable: bool isEventDeletable: bool isEventExpired: bool isSoftDeleted: bool lastProviderId: Optional[str] offerId: str price: float quantity: Optional[int] remainingQuantity: Optional[Union[int, str]] _humanize_id = humanize_field("id") _humanize_last_provider_id = humanize_field("lastProviderId") _humanize_offer_id = humanize_field("offerId") @classmethod def from_orm(cls, stock: Stock): # type: ignore # here we have N+1 requests (for each stock we query an activation code) # but it should be more efficient than loading all activationCodes of all stocks stock.hasActivationCode = ( stock.canHaveActivationCodes and offers_repository.get_available_activation_code(stock) is not None ) return super().from_orm(stock) @validator("cancellationLimitDate", pre=True, always=True) def validate_cancellation_limit_date(cls, cancellation_limit_date, values): # pylint: disable=no-self-argument return compute_cancellation_limit_date(values.get("beginningDatetime"), datetime.now()) class Config: allow_population_by_field_name = True orm_mode = True json_encoders = {datetime: format_into_utc_date}
class GetVenueResponseModel(BaseModel): address: Optional[str] bic: Optional[str] bookingEmail: Optional[str] city: Optional[str] comment: Optional[str] dateCreated: datetime dateModifiedAtLastProvider: Optional[datetime] demarchesSimplifieesApplicationId: Optional[str] departementCode: Optional[str] fieldsUpdated: list[str] iban: Optional[str] id: str idAtProviders: Optional[str] isValidated: bool isVirtual: bool lastProviderId: Optional[str] latitude: Optional[float] longitude: Optional[float] managingOfferer: GetVenueManagingOffererResponseModel managingOffererId: str name: str postalCode: Optional[str] publicName: Optional[str] siret: Optional[str] venueLabelId: Optional[str] venueTypeId: Optional[str] withdrawalDetails: Optional[str] description: Optional[VenueDescription] # type: ignore audioDisabilityCompliant: Optional[bool] mentalDisabilityCompliant: Optional[bool] motorDisabilityCompliant: Optional[bool] visualDisabilityCompliant: Optional[bool] contact: Optional[VenueContactModel] _humanize_id = humanize_field("id") _humanize_managing_offerer_id = humanize_field("managingOffererId") _humanize_venue_label_id = humanize_field("venueLabelId") _humanize_venue_type_id = humanize_field("venueTypeId") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class StockResponseModel(BaseModel): beginningDatetime: Optional[datetime] bookingLimitDatetime: Optional[datetime] bookingsQuantity: int dateCreated: datetime dateModified: datetime id: str isEventDeletable: bool isEventExpired: bool offerId: str price: float quantity: Optional[int] _humanize_id = humanize_field("id") _humanize_offer_id = humanize_field("offerId") class Config: json_encoders = {datetime: format_into_utc_date} orm_mode = True
class ProviderResponse(BaseModel): name: str enabledForPro: bool id: str isActive: bool localClass: Optional[str] _humanize_id = humanize_field("id") class Config: orm_mode = True
class GetOfferMediationResponseModel(BaseModel): authorId: Optional[str] credit: Optional[str] dateCreated: datetime dateModifiedAtLastProvider: Optional[datetime] fieldsUpdated: list[str] id: str idAtProviders: Optional[str] isActive: bool lastProviderId: Optional[str] offerId: str thumbCount: int thumbUrl: Optional[str] _humanize_id = humanize_field("id") _humanize_offer_id = humanize_field("offerId") _humanize_last_provider_id = humanize_field("lastProviderId") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class GetOfferVenueResponseModel(BaseModel): address: Optional[str] bookingEmail: Optional[str] city: Optional[str] comment: Optional[str] dateCreated: Optional[datetime] dateModifiedAtLastProvider: Optional[datetime] departementCode: Optional[str] fieldsUpdated: list[str] id: str idAtProviders: Optional[str] isValidated: bool isVirtual: bool lastProviderId: Optional[str] latitude: Optional[float] longitude: Optional[float] managingOfferer: GetOfferManagingOffererResponseModel managingOffererId: str name: str postalCode: Optional[str] publicName: Optional[str] siret: Optional[str] thumbCount: int venueLabelId: Optional[str] venueTypeId: Optional[str] audioDisabilityCompliant: Optional[bool] mentalDisabilityCompliant: Optional[bool] motorDisabilityCompliant: Optional[bool] visualDisabilityCompliant: Optional[bool] _humanize_id = humanize_field("id") _humanize_managing_offerer_id = humanize_field("managingOffererId") _humanize_last_provider_id = humanize_field("lastProviderId") _humanize_venue_label_id = humanize_field("venueLabelId") _humanize_venue_type_id = humanize_field("venueTypeId") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class GetOfferManagingOffererResponseModel(BaseModel): address: Optional[str] city: str dateCreated: datetime dateModifiedAtLastProvider: Optional[datetime] fieldsUpdated: list[str] id: str idAtProviders: Optional[str] isActive: bool isValidated: bool lastProviderId: Optional[str] name: str postalCode: str # FIXME (dbaty, 2020-11-09): optional until we populate the database (PC-5693) siren: Optional[str] thumbCount: int _humanize_id = humanize_field("id") _humanize_last_provider_id = humanize_field("lastProviderId") class Config: orm_mode = True
class GetOffererResponseModel(BaseModel): address: Optional[str] apiKey: OffererApiKey bic: Optional[str] city: str dateCreated: datetime dateModifiedAtLastProvider: Optional[datetime] demarchesSimplifieesApplicationId: Optional[str] fieldsUpdated: list[str] hasDigitalVenueAtLeastOneOffer: bool hasMissingBankInformation: bool iban: Optional[str] id: str idAtProviders: Optional[str] isValidated: bool lastProviderId: Optional[str] managedVenues: list[GetOffererVenueResponseModel] name: str postalCode: str # FIXME (dbaty, 2020-11-09): optional until we populate the database (PC-5693) siren: Optional[str] _humanize_id = humanize_field("id") @classmethod def from_orm(cls, offerer: Offerer, venue_stats_by_ids: Optional[Dict[ int, VenueStatsResponseModel]] = None): # type: ignore offerer.apiKey = { "maxAllowed": settings.MAX_API_KEY_PER_OFFERER, "prefixes": get_api_key_prefixes(offerer.id), } if venue_stats_by_ids: for managedVenue in offerer.managedVenues: managedVenue.stats = venue_stats_by_ids[managedVenue.id] offerer.hasDigitalVenueAtLeastOneOffer = has_digital_venue_with_at_least_one_offer( offerer.id) offerer.hasMissingBankInformation = not offerer.demarchesSimplifieesApplicationId and ( has_physical_venue_without_draft_or_accepted_bank_information( offerer.id) or offerer.hasDigitalVenueAtLeastOneOffer) return super().from_orm(offerer) class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class BeneficiaryAccountResponse(BaseModel): pk: int # id not humanized activity: Optional[str] address: Optional[str] city: Optional[str] civility: Optional[str] dateCreated: datetime dateOfBirth: Optional[datetime] departementCode: Optional[str] deposit_version: Optional[int] domainsCredit: Optional[DomainsCredit] email: str firstName: Optional[str] hasPhysicalVenues: bool id: str isActive: bool isAdmin: bool isBeneficiary: bool isEmailValidated: bool lastName: Optional[str] needsToFillCulturalSurvey: bool needsToSeeTutorials: bool phoneNumber: Optional[str] postalCode: Optional[str] publicName: str suspensionReason: Optional[str] wallet_balance: float deposit_expiration_date: Optional[datetime] wallet_is_activated: bool roles: list[UserRole] _humanize_id = humanize_field("id") @classmethod def from_orm(cls, user: User): # type: ignore user.pk = user.id user.domainsCredit = get_domains_credit(user) result = super().from_orm(user) result.isBeneficiary = user.is_beneficiary return result class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date} use_enum_values = True
class SharedCurrentUserResponseModel(BaseModel): activity: Optional[str] address: Optional[str] city: Optional[str] civility: Optional[str] dateCreated: datetime dateOfBirth: Optional[datetime] departementCode: Optional[str] email: str externalIds: Optional[typing.Dict] firstName: Optional[str] hasCompletedIdCheck: Optional[bool] hasPhysicalVenues: Optional[bool] hasSeenProTutorials: Optional[bool] id: str idPieceNumber: Optional[str] isAdmin: bool isBeneficiary: bool isEmailValidated: bool lastConnectionDate: Optional[datetime] lastName: Optional[str] needsToFillCulturalSurvey: Optional[bool] notificationSubscriptions: Optional[typing.Dict] phoneNumber: Optional[str] phoneValidationStatus: Optional[user_models.PhoneValidationStatusType] postalCode: Optional[str] publicName: Optional[str] roles: list[user_models.UserRole] _normalize_id = humanize_field("id") class Config: json_encoders = {datetime: format_into_utc_date} alias_generator = to_camel orm_mode = True @classmethod def from_orm(cls, user): result = super().from_orm(user) result.isBeneficiary = user.is_beneficiary return result
class SharedLoginUserResponseModel(BaseModel): activity: Optional[str] address: Optional[str] city: Optional[str] civility: Optional[str] dateCreated: datetime dateOfBirth: Optional[datetime] departementCode: Optional[str] email: str firstName: Optional[str] hasPhysicalVenues: Optional[bool] hasSeenProTutorials: Optional[bool] id: str isAdmin: bool isBeneficiary: bool isEmailValidated: bool lastConnectionDate: Optional[datetime] lastName: Optional[str] needsToFillCulturalSurvey: Optional[bool] phoneNumber: Optional[str] postalCode: Optional[str] publicName: Optional[str] roles: list[user_models.UserRole] _normalize_id = humanize_field("id") class Config: json_encoders = {datetime: format_into_utc_date} orm_mode = True alias_generator = to_camel allow_population_by_field_name = True arbitrary_types_allowed = True use_enum_values = True @classmethod def from_orm(cls, user): result = super().from_orm(user) result.isBeneficiary = user.is_beneficiary return result
class BeneficiaryAccountResponse(BaseModel): activity: Optional[str] address: Optional[str] city: Optional[str] civility: Optional[str] dateCreated: datetime dateOfBirth: Optional[datetime] departementCode: str deposit_version: Optional[int] email: str expenses: List[Expense] # @debt api-data "asaunier: Seuls quelques comptes n'ont pas cette information. Elle devrait être rendue obligatoire" firstName: Optional[str] hasAllowedRecommendations: bool hasPhysicalVenues: bool id: str isActive: bool isAdmin: bool isBeneficiary: bool isEmailValidated: bool # @debt api-data "asaunier: Seuls quelques comptes n'ont pas cette information. Elle devrait être rendue obligatoire" lastName: Optional[str] needsToFillCulturalSurvey: bool needsToSeeTutorials: bool phoneNumber: Optional[str] postalCode: Optional[str] publicName: str suspensionReason: Optional[str] wallet_balance: float deposit_expiration_date: Optional[datetime] wallet_is_activated: bool _humanize_id = humanize_field("id") class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date}
class GetOfferResponseModel(BaseModel): activeMediation: Optional[GetOfferMediationResponseModel] ageMax: Optional[int] ageMin: Optional[int] bookingEmail: Optional[str] conditions: Optional[str] dateCreated: datetime dateModifiedAtLastProvider: Optional[datetime] dateRange: list[datetime] description: Optional[str] durationMinutes: Optional[int] extraData: Any fieldsUpdated: list[str] hasBookingLimitDatetimesPassed: bool id: str idAtProviders: Optional[str] isActive: bool isBookable: bool isDigital: bool isDuo: bool isEditable: bool isEducational: bool isEvent: bool isNational: bool isThing: bool audioDisabilityCompliant: Optional[bool] mentalDisabilityCompliant: Optional[bool] motorDisabilityCompliant: Optional[bool] nonHumanizedId: int visualDisabilityCompliant: Optional[bool] lastProvider: Optional[GetOfferLastProviderResponseModel] lastProviderId: Optional[str] mediaUrls: list[str] mediations: list[GetOfferMediationResponseModel] name: str product: GetOfferProductResponseModel productId: str stocks: list[GetOfferStockResponseModel] subcategoryId: SubcategoryIdEnum thumbUrl: Optional[str] externalTicketOfficeUrl: Optional[str] url: Optional[str] venue: GetOfferVenueResponseModel venueId: str withdrawalDetails: Optional[str] status: OfferStatus _humanize_id = humanize_field("id") _humanize_product_id = humanize_field("productId") _humanize_venue_id = humanize_field("venueId") _humanize_last_provider_id = humanize_field("lastProviderId") @validator("dateRange", pre=True) def extract_datetime_list_from_DateTimes_type( # pylint: disable=no-self-argument cls, date_range: DateTimes ) -> list[datetime]: if isinstance(date_range, DateTimes): return date_range.datetimes return date_range @classmethod def from_orm(cls, offer): # type: ignore offer.nonHumanizedId = offer.id return super().from_orm(offer) class Config: orm_mode = True json_encoders = {datetime: format_into_utc_date} use_enum_values = True
class CreateThumbnailResponseModel(BaseModel): id: str _humanize_id = humanize_field("id")