diff options
Diffstat (limited to 'venv/lib/python3.11/site-packages/faker/providers/automotive/ar_SA')
2 files changed, 89 insertions, 0 deletions
| diff --git a/venv/lib/python3.11/site-packages/faker/providers/automotive/ar_SA/__init__.py b/venv/lib/python3.11/site-packages/faker/providers/automotive/ar_SA/__init__.py new file mode 100644 index 0000000..6b7ee49 --- /dev/null +++ b/venv/lib/python3.11/site-packages/faker/providers/automotive/ar_SA/__init__.py @@ -0,0 +1,89 @@ +import re + +from .. import Provider as AutomotiveProvider + + +class Provider(AutomotiveProvider): +    """Implement automotive provider for ``ar_SA`` locale. + +    Sources: + +    - https://en.wikipedia.org/wiki/Vehicle_registration_plates_of_Saudi_Arabia + +    .. |license_plate_en| replace:: +        :meth:`license_plate_en()` +    """ + +    LICENSE_FORMAT_EN = "#### ???" +    LICENSE_FORMAT_AR = "? ? ? ####" + +    PLATE_CHARS_EN = "ABDEGHJKLNRSTUVXZ" +    PLATE_CHARS_AR = "أبدعقهحكلنرسطوىصم" + +    PLATE_MAP = { +        "A": "ا", +        "B": "ب", +        "D": "د", +        "E": "ع", +        "G": "ق", +        "H": "ه", +        "J": "ح", +        "K": "ك", +        "L": "ل", +        "N": "ن", +        "R": "ر", +        "S": "س", +        "T": "ط", +        "U": "و", +        "V": "ى", +        "X": "ص", +        "Z": "م", +        "0": "٠", +        "1": "١", +        "2": "٢", +        "3": "٣", +        "4": "٤", +        "5": "٥", +        "6": "٦", +        "7": "٧", +        "8": "٨", +        "9": "٩", +    } + +    def license_plate_en(self) -> str: +        """Generate a license plate in Latin/Western characters.""" +        return self.bothify( +            self.LICENSE_FORMAT_EN, +            letters=self.PLATE_CHARS_EN, +        ) + +    def license_plate_ar(self) -> str: +        """Generate a license plate in Arabic characters. + +        This method first generates a license plate in Latin/Western characters +        using |license_plate_en|, and the result is translated internally to +        generate the Arabic counterpart which serves as this method's return +        value. +        """ +        english_plate = self.license_plate_en() +        return self._translate_license_plate(english_plate) + +    def _translate_license_plate(self, license_plate: str) -> str: +        nums = list(reversed(license_plate[0:4])) +        chars = list(license_plate[5:8]) + +        numerated = re.sub( +            r"\#", +            lambda x: self.PLATE_MAP[nums.pop()], +            self.LICENSE_FORMAT_AR, +        ) +        ar_plate = re.sub( +            r"\?", +            lambda x: self.PLATE_MAP[chars.pop()], +            numerated, +        ) + +        return ar_plate + +    def license_plate(self, ar: bool = True) -> str: +        return self.license_plate_ar() if ar else self.license_plate_en() diff --git a/venv/lib/python3.11/site-packages/faker/providers/automotive/ar_SA/__pycache__/__init__.cpython-311.pyc b/venv/lib/python3.11/site-packages/faker/providers/automotive/ar_SA/__pycache__/__init__.cpython-311.pycBinary files differ new file mode 100644 index 0000000..45959dc --- /dev/null +++ b/venv/lib/python3.11/site-packages/faker/providers/automotive/ar_SA/__pycache__/__init__.cpython-311.pyc | 
