def create(cls, doctor_uuid, visitor, date, time, site=AppointmentSite.IN_PLACE): doctor = DoctorProfileSelector.get_by_uuid(doctor_uuid) status = AppointmentStatus.ACCEPTED if doctor.auto_confirmation else AppointmentStatus.REQUESTED try: return Appointment.objects.create( consultation_duration=doctor.consultation_duration, doctor=doctor, visitor=visitor, site=site, status=status, date=date, time=time, ) except IntegrityError: raise SimpleValidationError(**UNAVAILABLE_DATETIME)
def get_by_token(cls, token: str, category: str) -> Any: try: return PendingAction.objects.get(token=token, category=category) except PendingAction.DoesNotExist: raise SimpleValidationError(**INVALID_TOKEN)
def perform_confirm_subscribe(cls, payload): subscribe_url = payload.get('SubscribeURL') if subscribe_url: subscribe_response = requests.get(subscribe_url) if not subscribe_response.ok: raise SimpleValidationError(**SNS_ENDPOINT_SUBSCRIBE_FAILED)
def validate_signature(cls, payload): if not cls.has_valid_signature(payload): raise SimpleValidationError(**INVALID_SNS_SIGNATURE)
def validate_sns_headers(cls, request_headers): if not any(elem in SNSValidator.SNS_HEADERS for elem in request_headers): raise SimpleValidationError(**NOT_SNS_REQUEST)
def validate_sns_method(cls, method): if method != 'POST': raise SimpleValidationError(**METHOD_NOT_ALLOWED)
def create_link(cls, url, alias=None, owner=None): if Link.objects.filter(alias=alias).exists(): raise SimpleValidationError(**LINK_ALIAS_IS_ALREADY_USED) _alias = alias or cls.generate_alias() return Link.objects.create(url=url, alias=_alias, owner=owner)