Beispiel #1
0
    def validate_phone_number(cls,
                              input: str,
                              country_code: str = '98',
                              phone_start_number: str = '09') -> str:
        from avishan.misc.translation import AvishanTranslatable

        input = en_numbers(input)
        input = input.replace(" ", "")
        input = input.replace("-", "")

        if input.startswith("00"):
            if not input.startswith("00" + country_code):
                raise cls.ValidatorException(
                    AvishanTranslatable(EN='phone number', FA='شماره موبایل'))
            if input.startswith("00" + country_code + phone_start_number):
                input = "00" + country_code + input[5:]
        elif input.startswith("+"):
            if not input.startswith("+" + country_code):
                raise cls.ValidatorException(
                    AvishanTranslatable(EN='phone number', FA='شماره موبایل'))
            input = "00" + input[1:]
            if input.startswith("00" + country_code + phone_start_number):
                input = "00" + country_code + input[5:]
        elif input.startswith(phone_start_number):
            input = "00" + country_code + input[1:]

        if len(input) != 14 or not input.isdigit():
            raise cls.ValidatorException(
                AvishanTranslatable(EN='phone number', FA='شماره موبایل'))

        return input
Beispiel #2
0
    def validate_ferdowsi_student_id(cls, input):
        input = cls.validate_text(input, blank=False)

        if not input.isdigit():
            from avishan.misc.translation import AvishanTranslatable
            raise cls.ValidatorException(
                AvishanTranslatable(EN='Student ID', FA='کد دانشجویی'))
        return input
Beispiel #3
0
    def validate_last_name(cls, input):
        input = input.strip()

        if has_numbers(input) or len(input) < 2:
            from avishan.misc.translation import AvishanTranslatable
            raise cls.ValidatorException(
                AvishanTranslatable(EN='last name', FA='نام خانوادگی'))

        return input
Beispiel #4
0
 def __init__(self, field_name: Union[str, 'AvishanTranslatable']):
     from avishan.misc.translation import AvishanTranslatable
     request = get_current_request()
     request.avishan.response['error_in_field'] = field_name
     request.avishan.response['error_message'] = AvishanTranslatable(
         EN=f'"{field_name}" not accepted',
         FA='"' + field_name + '" قابل قبول نیست')
     request.avishan.status_code = status.HTTP_417_EXPECTATION_FAILED
     super().__init__()
    def get_field(cls, field_name: str) -> models.Field:
        from avishan.misc.translation import AvishanTranslatable

        for item in cls.get_full_fields():
            if item.name == field_name:
                return item
        raise ValueError(AvishanTranslatable(
            EN=f'field {field_name} not found in model {cls.class_name()}'
        ))
Beispiel #6
0
    def validate_text(cls, input: str, blank: bool = True) -> str:
        input = input.strip()
        input = fa_numbers(input)

        if not blank and len(input) == 0:
            from avishan.misc.translation import AvishanTranslatable
            raise cls.ValidatorException(
                AvishanTranslatable(EN='text', FA='متن'))

        return input
Beispiel #7
0
    def validate_plate(cls, plate_a, plate_b, plate_c, plate_d):
        from avishan.misc.translation import AvishanTranslatable
        plate_a = cls.validate_text(fa_numbers(plate_a), blank=False)
        plate_b = cls.validate_text(fa_numbers(plate_b), blank=False)
        plate_c = cls.validate_text(fa_numbers(plate_c), blank=False)
        plate_d = cls.validate_text(fa_numbers(plate_d), blank=False)

        if plate_b not in [
                'ب', 'ج', 'د', 'س', 'ص', 'ط', 'ق', 'ل', 'م', 'ن', 'و', 'ه',
                'ی', 'الف', 'پ', 'ت', 'ث', 'ز', 'ژ', 'ش', 'ع', 'ف', 'ک', 'گ',
                'D', 'S', 'd', 's', 'ي'
        ]:
            raise cls.ValidatorException(
                AvishanTranslatable(EN='plate', FA='پلاک'))

        if not plate_a.isdigit() or not plate_c.isdigit(
        ) or not plate_d.isdigit():
            raise cls.ValidatorException(
                AvishanTranslatable(EN='plate', FA='پلاک'))

        return plate_a, plate_b, plate_c, plate_d
Beispiel #8
0
 def __add__(self, other: Union[int, timedelta]) -> 'BchDatetime':
     if isinstance(other, int):
         return BchDatetime.from_jalali_datetime(self.to_jalali_datetime() +
                                                 timedelta(seconds=other))
     if isinstance(other, timedelta):
         return BchDatetime.from_jalali_datetime(self.to_jalali_datetime() +
                                                 other)
     raise TypeError(
         AvishanTranslatable(
             EN='Accepted types are "int" as seconds and "timedelta"',
             FA='مقادیر قابل قبول "int" به عنوان ثانیه ها و "timedelta" هستند'
         ))
    def setup(self, request, *args, **kwargs):
        # noinspection PyTypeHints
        request.avishan: AvishanRequestStorage

        super().setup(request, *args, **kwargs)
        model_plural_name = kwargs.get('model_plural_name', None)
        model_item_id = kwargs.get('model_item_id', None)
        self.model_function_name = kwargs.get('model_function_name', None)
        self.model_descripted: DjangoAvishanModel = request.avishan.project.find_model(
            snake_case_plural_name=model_plural_name)
        if not self.model_descripted:
            raise ErrorMessageException('Entered model name not found')
        self.model = self.model_descripted.target

        if self.model_function_name is None:
            if request.method == 'GET':
                if model_item_id is None:
                    self.model_function_name = 'all'
                else:
                    self.model_function_name = 'get'
            elif request.method == 'POST':
                self.model_function_name = 'create'
            elif request.method == 'PUT':
                self.model_function_name = 'update'
            elif request.method == 'DELETE':
                self.model_function_name = 'remove'

        if model_item_id is not None:
            self.model_item = self.model.get(avishan_raise_400=True,
                                             id=int(model_item_id))
        if self.model_function_name is not None:
            for direct_callable in self.model_descripted.methods:
                if self.model_function_name == direct_callable.name:
                    self.direct_callable = direct_callable
                    break
            if not self.direct_callable:
                raise AuthException(AuthException.METHOD_NOT_DIRECT_CALLABLE)
            self.authenticate = self.direct_callable.authenticate
            try:
                if self.model_item is None:
                    self.model_function = getattr(self.model,
                                                  self.model_function_name)
                else:
                    self.model_function = getattr(self.model_item,
                                                  self.model_function_name)
            except AttributeError:
                raise ErrorMessageException(
                    AvishanTranslatable(
                        EN=
                        f'Requested method not found in model {self.model.class_name()}'
                    ))
Beispiel #10
0
 def to_unix_timestamp(self, resolution='second'):
     timestamp = self.to_datetime().timestamp()
     if resolution == 'second':
         return int(timestamp)
     elif resolution == 'millisecond':
         return int(timestamp * 1000)
     elif resolution == 'microsecond':
         return int(timestamp * 1000000)
     else:
         raise ValueError(
             AvishanTranslatable(
                 EN=
                 'Incorrect resolution. Accepts are "second", "millisecond" and "microsecond". Default is "second".',
                 FA=
                 'مقیاس نامعتبر. مقادیر قابل قبول: "second"، "millisecond" و "microsecond". مقدار پیش‌فرض "second".'
             ))
Beispiel #11
0
def send_raw_sms(
        phone: Union[Phone, List[Phone]],
        text: str,
        api_key: Optional[str] = get_avishan_config().KAVENEGAR_API_TOKEN):
    receptor = ""
    if isinstance(phone, Phone):
        receptor = phone.key
    else:
        for item in phone:
            receptor += item.key + ","
        if len(phone) > 0:
            receptor = receptor[:-1]
    if len(receptor) == 0:
        raise ErrorMessageException(message=AvishanTranslatable(
            EN='Empty receptor numbers', FA='لیست دریافت کننده‌ها خالی است'))

    data = {'receptor': receptor, 'message': text}

    response = requests.post(
        url=f"https://api.kavenegar.com/v1/{api_key}/sms/send.json", data=data)
    if response.status_code != 200:
        print(response.text)
Beispiel #12
0
    def __init__(self,
                 year: Union[int, datetime, date, JalaliDatetime, dict,
                             'BchDatetime'] = None,
                 month: int = None,
                 day: int = None,
                 hour: int = None,
                 minute: int = None,
                 second: int = None,
                 microsecond: int = None) -> None:
        temp = None

        # todo not safe
        if not year and not month and not day and not hour and not minute and not second and not microsecond:
            temp = BchDatetime.from_bch_datetime(BchDatetime.now())
        elif isinstance(year, datetime):
            temp = BchDatetime.from_datetime(year)
        elif isinstance(year, date):
            temp = BchDatetime.from_date(year)
        elif isinstance(year, JalaliDatetime):
            temp = BchDatetime.from_jalali_datetime(year)
        elif isinstance(year, dict):
            temp = BchDatetime.from_dict(year)
        elif isinstance(year, BchDatetime):
            temp = year

        if temp:
            self.year, self.month, self.day, self.hour, self.minute, self.second, self.microsecond = \
                temp.year, temp.month, temp.day, temp.hour, temp.minute, temp.second, temp.microsecond
            return
        self.year = year
        if isinstance(month, str):
            try:
                month = int(month)
            except ValueError:
                try:
                    month = {
                        'فروردین': 1,
                        'اردیبهشت': 2,
                        'خرداد': 3,
                        'تیر': 4,
                        'مرداد': 5,
                        'شهریور': 6,
                        'مهر': 7,
                        'آبان': 8,
                        'آذر': 9,
                        'دی': 10,
                        'بهمن': 11,
                        'اسفند': 12,
                    }[month]
                except KeyError:
                    from avishan.exceptions import ErrorMessageException
                    raise ErrorMessageException(
                        AvishanTranslatable(EN=f'Unknown Month String {month}',
                                            FA=f'عبارت ناشناخته ماه {month}'))
        self.month = month
        self.day = day
        self.hour = hour
        self.minute = minute
        self.second = second
        self.microsecond = microsecond
        """