|
3 | 3 | import re |
4 | 4 | from schema import SchemaError |
5 | 5 |
|
| 6 | +CURRENCIES = {"LKR", "ETB", "RWF", "NZD", "SBD", "MKD", "NPR", "LAK", "KWD", "INR", "HUF", "AFN", "BTN", "ISK", "MVR", |
| 7 | + "WST", "MNT", "AZN", "SAR", "JMD", "BIF", "BMD", "CAD", "GEL", "MXN", "BHD", "HKD", "RSD", "PKR", "SLL", |
| 8 | + "NGN", "TOP", "SCR", "SVC", "CHW", "UYW", "IDR", "IQD", "THB", "GBP", "MYR", "SDG", "CNY", "GNF", "LRD", |
| 9 | + "KHR", "TJS", "BYN", "SHP", "AED", "BOB", "CUC", "PHP", "SSP", "USN", "MZN", "COP", "SEK", "EUR", "CDF", |
| 10 | + "CRC", "KMF", "JPY", "ZWL", "ALL", "GHS", "GIP", "QAR", "GYD", "HTG", "VUV", "CZK", "ANG", "AWG", "AMD", |
| 11 | + "DOP", "TRY", "ZMW", "MGA", "KZT", "XUA", "ARS", "XPF", "BRL", "MXV", "LSL", "CLP", "KES", "PYG", "TND", |
| 12 | + "MAD", "DZD", "MWK", "BSD", "BBD", "FKP", "KGS", "BWP", "CVE", "HRK", "DKK", "COU", "SYP", "LYD", "PLN", |
| 13 | + "TZS", "KPW", "UGX", "BOV", "UAH", "NAD", "AOA", "VES", "SOS", "CUP", "SGD", "PAB", "UZS", "STN", "SRD", |
| 14 | + "CHE", "XOF", "DJF", "PGK", "UYI", "XCD", "BZD", "EGP", "ERN", "RON", "TWD", "USD", "FJD", "VND", "SZL", |
| 15 | + "BND", "HNL", "KRW", "XAF", "MDL", "BDT", "MUR", "PEN", "OMR", "NIO", "TMT", "YER", "TTD", "GMD", "XDR", |
| 16 | + "CHF", "NOK", "GTQ", "JOD", "KYD", "UYU", "RUB", "ZAR", "AUD", "BGN", "MOP", "LBP", "MRU", "CLF", "XSU", |
| 17 | + "BAM", "MMK", "IRR", "ILS"} |
| 18 | + |
6 | 19 |
|
7 | 20 | class Validator: # noqa: pylint - too-few-public-methods |
8 | 21 | """Validation rule to check if the given mandatory value exists.""" |
@@ -337,3 +350,31 @@ def validate(self, value=None): |
337 | 350 | return False |
338 | 351 | else: |
339 | 352 | return True |
| 353 | + |
| 354 | + |
| 355 | +class CurrencyValidator(Validator): |
| 356 | + """Validation rule to check if a string is a valid currency according to ISO 4217 Currency Code.""" |
| 357 | + ERROR_MESSAGE = "'{value}' is not a valid currency code." |
| 358 | + |
| 359 | + def __init__(self, error_message=None): |
| 360 | + """ |
| 361 | + Checks if a string is a valid currency based on ISO 4217 |
| 362 | +
|
| 363 | + Args: |
| 364 | + error_message (str): A custom error message to output if validation fails |
| 365 | + """ |
| 366 | + super().__init__(error_message) |
| 367 | + |
| 368 | + @staticmethod |
| 369 | + def validate(value=None): |
| 370 | + """ |
| 371 | + Check if a string is a valid currency based on ISO 4217 |
| 372 | +
|
| 373 | + Args: |
| 374 | + value (str): value to validate against a ISO 4217 |
| 375 | + """ |
| 376 | + |
| 377 | + if value is None: |
| 378 | + return True |
| 379 | + |
| 380 | + return value.upper() in CURRENCIES |
0 commit comments