value-object-pattern 1.31.1__tar.gz → 1.33.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/PKG-INFO +1 -1
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/__init__.py +1 -1
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/__init__.py +2 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/__init__.py +2 -0
- value_object_pattern-1.33.0/value_object_pattern/usables/internet/domain_or_localhost_value_object.py +22 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/domain_value_object.py +5 -1
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/host_value_object.py +3 -3
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/uri/url_value_object.py +19 -3
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/__init__.py +2 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/__init__.py +2 -0
- value_object_pattern-1.33.0/value_object_pattern/usables/primitives/string/base64_value_object.py +60 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/.gitignore +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/LICENSE.md +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/README.md +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/pyproject.toml +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/decorators/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/decorators/classproperty.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/decorators/value_object_process.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/decorators/value_object_validation.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/base_model.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/collections/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/collections/dict_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/collections/list_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/enumeration_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/primitive_conversion.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/type_matching.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/union_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/py.typed +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/date/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/timezone/string_timezone_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v1_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v3_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v5_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v6_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v7_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v8_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_v1_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_v3_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_v5_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_v6_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_v7_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_v8_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/uuid/uuid_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/country_tld_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/dni_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/nie_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/nif_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/nuss_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/passport_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/phone_number_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/administrative_technician_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/air_force_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/army_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/canarias_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/catalan_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/civil_guard_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/consular_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/diplomatic_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/especial_plate_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/historical_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/international_organization_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_development_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_environment_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/national_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/navy_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_truck_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/provincial_system_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/state_motor_pool_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_company_not_registered_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_company_registered_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_private_individual_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/two_wheels_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/provincial_plate_codes.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/utils/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/utils/provincial_codes.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/europe/spain/vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/iso3166_alpha2_code_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/iso3166_alpha3_code_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/iso3166_numeric_code_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/phone_code_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_codes.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_alpha3_mapping.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_numeric_mapping.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_phone_code_mapping.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_tld_mapping.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha3_codes.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_numeric_codes.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/identifiers/world/vin_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/email_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/ip_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/keys/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/keys/kebab_case_key_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/keys/snake_case_key_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mac_addresses/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mac_addresses/cisco_mac_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mac_addresses/raw_mac_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mac_addresses/space_mac_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mac_addresses/universal_mac_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mac_addresses/windows_mac_address_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mobile/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/mobile/imei_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/port_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/slug_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/uri/https_url_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/user_agent_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/utils/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/utils/aws_regions.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/internet/utils/tld_domains.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/credit_card_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/credit_cards/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/credit_cards/amex_credit_card_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/credit_cards/discover_credit_card_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/credit_cards/mastercard_credit_card_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/credit_cards/visa_credit_card_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/iban_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/utils/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/money/utils/iban_lengths.txt +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/float/negative_or_zero_float_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/float/positive_or_zero_float_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/negative_or_zero_integer_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/integer/positive_or_zero_integer_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/none/not_none_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/camel_case_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/kebab_case_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/pascal_case_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/screaming_snake_case_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/secret_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/snake_case_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/primitives/string/uppercase_string_value_object.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/utils/__init__.py +0 -0
- {value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/utils/luhn_validation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: value-object-pattern
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.33.0
|
|
4
4
|
Summary: The Value Object Pattern is a Python package that streamlines the creation and management of value objects in your projects.
|
|
5
5
|
Project-URL: Homepage, https://github.com/adriamontoto/value-object-pattern
|
|
6
6
|
Project-URL: Repository, https://github.com/adriamontoto/value-object-pattern
|
{value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/usables/__init__.py
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from .primitives import (
|
|
2
2
|
AlphaStringValueObject,
|
|
3
3
|
AlphanumericStringValueObject,
|
|
4
|
+
Base64StringValueObject,
|
|
4
5
|
BooleanValueObject,
|
|
5
6
|
BytesValueObject,
|
|
6
7
|
CamelCaseStringValueObject,
|
|
@@ -37,6 +38,7 @@ from .primitives import (
|
|
|
37
38
|
__all__ = (
|
|
38
39
|
'AlphaStringValueObject',
|
|
39
40
|
'AlphanumericStringValueObject',
|
|
41
|
+
'Base64StringValueObject',
|
|
40
42
|
'BooleanValueObject',
|
|
41
43
|
'BytesValueObject',
|
|
42
44
|
'CamelCaseStringValueObject',
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from .aws_cloud_region_value_object import AwsCloudRegionValueObject
|
|
2
|
+
from .domain_or_localhost_value_object import DomainOrLocalhostValueObject
|
|
2
3
|
from .domain_value_object import DomainValueObject
|
|
3
4
|
from .email_address_value_object import EmailAddressValueObject
|
|
4
5
|
from .host_value_object import HostValueObject
|
|
@@ -16,6 +17,7 @@ from .user_agent_value_object import UserAgentValueObject
|
|
|
16
17
|
|
|
17
18
|
__all__ = (
|
|
18
19
|
'AwsCloudRegionValueObject',
|
|
20
|
+
'DomainOrLocalhostValueObject',
|
|
19
21
|
'DomainValueObject',
|
|
20
22
|
'EmailAddressValueObject',
|
|
21
23
|
'HostValueObject',
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
DomainOrLocalhostValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from .domain_value_object import DomainValueObject
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class DomainOrLocalhostValueObject(DomainValueObject):
|
|
9
|
+
"""
|
|
10
|
+
DomainOrLocalhostValueObject ensures the provided value is a valid domain or localhost.
|
|
11
|
+
|
|
12
|
+
Example:
|
|
13
|
+
```python
|
|
14
|
+
from value_object_pattern.usables.internet import DomainOrLocalhostValueObject
|
|
15
|
+
|
|
16
|
+
domain = DomainOrLocalhostValueObject(value='localhost')
|
|
17
|
+
print(repr(domain))
|
|
18
|
+
# >>> DomainOrLocalhostValueObject(value=localhost)
|
|
19
|
+
```
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
_DOMAIN_VALID_SINGLE_LABELS: frozenset[str] = frozenset({'localhost'})
|
|
@@ -32,6 +32,7 @@ class DomainValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
32
32
|
_DOMAIN_MAX_LABEL_LENGTH: int = 63
|
|
33
33
|
_DOMAIN_MAX_DOMAIN_LENGTH: int = 253
|
|
34
34
|
_DOMAIN_REGEX: Pattern[str] = re_compile(pattern=r'[0-9a-zA-Z-]+')
|
|
35
|
+
_DOMAIN_VALID_SINGLE_LABELS: frozenset[str] = frozenset()
|
|
35
36
|
|
|
36
37
|
@process(order=0)
|
|
37
38
|
def _ensure_domain_is_in_lowercase(self, value: str) -> str:
|
|
@@ -72,7 +73,10 @@ class DomainValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
72
73
|
ValueError: If domain value has not a valid top level domain.
|
|
73
74
|
"""
|
|
74
75
|
if '.' not in processed_value:
|
|
75
|
-
self.
|
|
76
|
+
if processed_value not in self._DOMAIN_VALID_SINGLE_LABELS:
|
|
77
|
+
self._raise_value_has_not_valid_top_level_domain(value=value)
|
|
78
|
+
|
|
79
|
+
return
|
|
76
80
|
|
|
77
81
|
tdl = processed_value.split(sep='.')[-1]
|
|
78
82
|
if tdl not in get_tld_dict():
|
|
@@ -7,7 +7,7 @@ from typing import NoReturn
|
|
|
7
7
|
from value_object_pattern import process, validation
|
|
8
8
|
from value_object_pattern.usables import NotEmptyStringValueObject, TrimmedStringValueObject
|
|
9
9
|
|
|
10
|
-
from .
|
|
10
|
+
from .domain_or_localhost_value_object import DomainOrLocalhostValueObject
|
|
11
11
|
from .ipv4_address_value_object import Ipv4AddressValueObject
|
|
12
12
|
from .ipv6_address_value_object import Ipv6AddressValueObject
|
|
13
13
|
|
|
@@ -38,7 +38,7 @@ class HostValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
38
38
|
str: The host value stored in respective format.
|
|
39
39
|
"""
|
|
40
40
|
if self._is_domain(value=value):
|
|
41
|
-
return
|
|
41
|
+
return DomainOrLocalhostValueObject(value=value).value
|
|
42
42
|
|
|
43
43
|
if self._is_ipv4_address(value=value):
|
|
44
44
|
return Ipv4AddressValueObject(value=value).value
|
|
@@ -104,7 +104,7 @@ class HostValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
104
104
|
bool: True if the value is a domain, False otherwise.
|
|
105
105
|
"""
|
|
106
106
|
try:
|
|
107
|
-
|
|
107
|
+
DomainOrLocalhostValueObject(value=value)
|
|
108
108
|
return True
|
|
109
109
|
|
|
110
110
|
except (TypeError, ValueError):
|
|
@@ -37,6 +37,9 @@ def join_url(
|
|
|
37
37
|
Returns:
|
|
38
38
|
str: The URL joined.
|
|
39
39
|
"""
|
|
40
|
+
if ':' in host and not host.startswith('['):
|
|
41
|
+
host = f'[{host}]'
|
|
42
|
+
|
|
40
43
|
netloc = host
|
|
41
44
|
if user_information:
|
|
42
45
|
netloc = f'{user_information}@{netloc}'
|
|
@@ -88,9 +91,18 @@ def split_netloc(value: str) -> tuple[str | None, str, int | None]:
|
|
|
88
91
|
# prevent splitting passwords with @
|
|
89
92
|
user_information, host_port = value.rsplit(sep='@', maxsplit=1)
|
|
90
93
|
|
|
94
|
+
if host_port.startswith('['):
|
|
95
|
+
host, _, port_string = host_port[1:].partition(']')
|
|
96
|
+
if port_string:
|
|
97
|
+
port = int(port_string.removeprefix(':'))
|
|
98
|
+
|
|
99
|
+
return user_information, host, port
|
|
100
|
+
|
|
101
|
+
if host_port.count(':') > 1:
|
|
102
|
+
raise ValueError('IPv6 URL hosts must be enclosed in brackets.')
|
|
103
|
+
|
|
91
104
|
host = host_port
|
|
92
|
-
if ':' in host_port
|
|
93
|
-
# prevent splitting IPv6 addresses
|
|
105
|
+
if ':' in host_port:
|
|
94
106
|
host, port_string = host_port.rsplit(sep=':', maxsplit=1)
|
|
95
107
|
port = int(port_string)
|
|
96
108
|
|
|
@@ -207,7 +219,11 @@ class UrlValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
207
219
|
https://www.rfc-editor.org/rfc/rfc3986#section-3.2.3
|
|
208
220
|
"""
|
|
209
221
|
_, netloc, *_ = split_url(value=value)
|
|
210
|
-
|
|
222
|
+
try:
|
|
223
|
+
user_information, host, port = split_netloc(value=netloc)
|
|
224
|
+
|
|
225
|
+
except ValueError as error:
|
|
226
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> is not a valid url.') from error
|
|
211
227
|
|
|
212
228
|
if user_information is not None and not self._URL_USER_INFORMATION_REGEX.match(string=user_information): # noqa: E501 # fmt: skip
|
|
213
229
|
raise ValueError(f'UrlValueObject value <<<{value}>>> has not a valid user information <<<{user_information}>>>.') # noqa: E501 # fmt: skip
|
|
@@ -20,6 +20,7 @@ from .none import NoneValueObject, NotNoneValueObject
|
|
|
20
20
|
from .string import (
|
|
21
21
|
AlphaStringValueObject,
|
|
22
22
|
AlphanumericStringValueObject,
|
|
23
|
+
Base64StringValueObject,
|
|
23
24
|
CamelCaseStringValueObject,
|
|
24
25
|
DigitStringValueObject,
|
|
25
26
|
KebabCaseStringValueObject,
|
|
@@ -38,6 +39,7 @@ from .string import (
|
|
|
38
39
|
__all__ = (
|
|
39
40
|
'AlphaStringValueObject',
|
|
40
41
|
'AlphanumericStringValueObject',
|
|
42
|
+
'Base64StringValueObject',
|
|
41
43
|
'BooleanValueObject',
|
|
42
44
|
'BytesValueObject',
|
|
43
45
|
'CamelCaseStringValueObject',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from .alpha_value_object import AlphaStringValueObject
|
|
2
2
|
from .alphanumeric_value_object import AlphanumericStringValueObject
|
|
3
|
+
from .base64_value_object import Base64StringValueObject
|
|
3
4
|
from .camel_case_string_value_object import CamelCaseStringValueObject
|
|
4
5
|
from .digit_value_object import DigitStringValueObject
|
|
5
6
|
from .kebab_case_string_value_object import KebabCaseStringValueObject
|
|
@@ -17,6 +18,7 @@ from .uppercase_string_value_object import UppercaseStringValueObject
|
|
|
17
18
|
__all__ = (
|
|
18
19
|
'AlphaStringValueObject',
|
|
19
20
|
'AlphanumericStringValueObject',
|
|
21
|
+
'Base64StringValueObject',
|
|
20
22
|
'CamelCaseStringValueObject',
|
|
21
23
|
'DigitStringValueObject',
|
|
22
24
|
'KebabCaseStringValueObject',
|
value_object_pattern-1.33.0/value_object_pattern/usables/primitives/string/base64_value_object.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Base64StringValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from base64 import b64decode, b64encode
|
|
6
|
+
from binascii import Error
|
|
7
|
+
from typing import NoReturn
|
|
8
|
+
|
|
9
|
+
from value_object_pattern.decorators import validation
|
|
10
|
+
|
|
11
|
+
from .trimmed_string_value_object import TrimmedStringValueObject
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Base64StringValueObject(TrimmedStringValueObject):
|
|
15
|
+
"""
|
|
16
|
+
Ensure the provided value is canonical standard Base64. The empty string is accepted as the Base64 encoding of
|
|
17
|
+
empty bytes.
|
|
18
|
+
|
|
19
|
+
Example:
|
|
20
|
+
```python
|
|
21
|
+
from value_object_pattern.usables import Base64StringValueObject
|
|
22
|
+
|
|
23
|
+
string = Base64StringValueObject(value='aGVsbG8gd29ybGQ=')
|
|
24
|
+
|
|
25
|
+
print(repr(string))
|
|
26
|
+
# >>> Base64StringValueObject(value='aGVsbG8gd29ybGQ=')
|
|
27
|
+
```
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
@validation(order=0)
|
|
31
|
+
def _ensure_value_is_base64(self, value: str) -> None:
|
|
32
|
+
"""
|
|
33
|
+
Ensure the value is canonical standard Base64.
|
|
34
|
+
|
|
35
|
+
Args:
|
|
36
|
+
value (str): The provided value.
|
|
37
|
+
|
|
38
|
+
Raises:
|
|
39
|
+
ValueError: If the value is not canonical standard Base64.
|
|
40
|
+
"""
|
|
41
|
+
try:
|
|
42
|
+
decoded_value = b64decode(s=value, validate=True)
|
|
43
|
+
|
|
44
|
+
except (Error, ValueError):
|
|
45
|
+
self._raise_value_is_not_base64(value=value)
|
|
46
|
+
|
|
47
|
+
if b64encode(s=decoded_value).decode() != value:
|
|
48
|
+
self._raise_value_is_not_base64(value=value)
|
|
49
|
+
|
|
50
|
+
def _raise_value_is_not_base64(self, value: str) -> NoReturn:
|
|
51
|
+
"""
|
|
52
|
+
Raise a ValueError when the value is not canonical standard Base64.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
value (str): The provided value.
|
|
56
|
+
|
|
57
|
+
Raises:
|
|
58
|
+
ValueError: Always raised because the value is not canonical standard Base64.
|
|
59
|
+
"""
|
|
60
|
+
raise ValueError(f'Base64StringValueObject value <<<{value}>>> must be canonical standard Base64.')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{value_object_pattern-1.31.1 → value_object_pattern-1.33.0}/value_object_pattern/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|