value-object-pattern 1.32.0__tar.gz → 1.33.1__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.32.0 → value_object_pattern-1.33.1}/PKG-INFO +1 -1
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/__init__.py +1 -1
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/__init__.py +2 -0
- value_object_pattern-1.33.1/value_object_pattern/usables/internet/domain_or_localhost_value_object.py +22 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/domain_value_object.py +5 -1
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/email_address_value_object.py +1 -2
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/host_value_object.py +3 -3
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +16 -1
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/uri/https_url_value_object.py +16 -1
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/uri/url_value_object.py +143 -19
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/.gitignore +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/LICENSE.md +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/README.md +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/pyproject.toml +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/decorators/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/decorators/classproperty.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/decorators/value_object_process.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/decorators/value_object_validation.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/base_model.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/collections/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/collections/dict_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/collections/list_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/enumeration_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/primitive_conversion.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/type_matching.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/union_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/models/value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/py.typed +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/date/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/timezone/string_timezone_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_v1_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_v3_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_v5_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_v6_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_v7_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_v8_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/string_uuid_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_v1_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_v3_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_v5_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_v6_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_v7_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_v8_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/uuid/uuid_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/country_tld_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/dni_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/nie_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/nif_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/nuss_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/passport_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/phone_number_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/administrative_technician_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/air_force_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/army_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/canarias_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/catalan_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/civil_guard_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/consular_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/diplomatic_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/especial_plate_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/historical_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/international_organization_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_development_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_environment_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/national_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/navy_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_truck_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/provincial_system_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/state_motor_pool_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_company_not_registered_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_company_registered_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_private_individual_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/two_wheels_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/provincial_plate_codes.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/utils/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/utils/provincial_codes.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/europe/spain/vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/iso3166_alpha2_code_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/iso3166_alpha3_code_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/iso3166_numeric_code_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/phone_code_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_codes.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_alpha3_mapping.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_numeric_mapping.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_phone_code_mapping.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_tld_mapping.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha3_codes.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/utils/iso3166_numeric_codes.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/identifiers/world/vin_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/ip_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/keys/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/keys/kebab_case_key_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/keys/snake_case_key_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mac_addresses/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mac_addresses/cisco_mac_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mac_addresses/raw_mac_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mac_addresses/space_mac_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mac_addresses/universal_mac_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mac_addresses/windows_mac_address_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mobile/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/mobile/imei_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/port_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/slug_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/user_agent_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/utils/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/utils/aws_regions.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/internet/utils/tld_domains.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/credit_card_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/credit_cards/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/credit_cards/amex_credit_card_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/credit_cards/discover_credit_card_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/credit_cards/mastercard_credit_card_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/credit_cards/visa_credit_card_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/iban_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/utils/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/money/utils/iban_lengths.txt +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/float/negative_or_zero_float_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/float/positive_or_zero_float_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/negative_or_zero_integer_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/integer/positive_or_zero_integer_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/none/not_none_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/base64_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/camel_case_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/kebab_case_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/pascal_case_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/screaming_snake_case_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/secret_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/snake_case_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/primitives/string/uppercase_string_value_object.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/utils/__init__.py +0 -0
- {value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/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.1
|
|
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
|
|
@@ -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():
|
|
@@ -214,8 +214,7 @@ class EmailAddressValueObject(NotEmptyStringValueObject, TrimmedStringValueObjec
|
|
|
214
214
|
try:
|
|
215
215
|
self._internal_domain_part = DomainValueObject(value=self._internal_domain_part).value
|
|
216
216
|
|
|
217
|
-
except
|
|
218
|
-
print(f'{exception}')
|
|
217
|
+
except (TypeError, ValueError):
|
|
219
218
|
self._raise_value_invalid_domain_error(value=value, domain_part=self._internal_domain_part)
|
|
220
219
|
|
|
221
220
|
def _raise_email_address_domain_contains_invalid_characters_error(self, value: str, domain_part: str) -> NoReturn:
|
|
@@ -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):
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
HttpHttpsUrlValueObject value object.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
from typing import NoReturn
|
|
6
|
+
|
|
5
7
|
from value_object_pattern import validation
|
|
6
8
|
|
|
7
9
|
from .url_value_object import UrlValueObject, split_url
|
|
@@ -36,4 +38,17 @@ class HttpHttpsUrlValueObject(UrlValueObject):
|
|
|
36
38
|
scheme, *_ = split_url(value=value)
|
|
37
39
|
|
|
38
40
|
if scheme not in ('http', 'https'):
|
|
39
|
-
|
|
41
|
+
self._raise_value_is_not_http_https_url(value=value, scheme=scheme)
|
|
42
|
+
|
|
43
|
+
def _raise_value_is_not_http_https_url(self, value: str, scheme: str) -> NoReturn:
|
|
44
|
+
"""
|
|
45
|
+
Raise an error if the URL scheme is not HTTP or HTTPS.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
value (str): The URL value.
|
|
49
|
+
scheme (str): The invalid scheme.
|
|
50
|
+
|
|
51
|
+
Raises:
|
|
52
|
+
ValueError: If the URL scheme is not HTTP or HTTPS.
|
|
53
|
+
"""
|
|
54
|
+
raise ValueError(f'HttpHttpsUrlValueObject value <<<{value}>>> scheme is not HTTP or HTTPS')
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
HttpsUrlValueObject value object.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
from typing import NoReturn
|
|
6
|
+
|
|
5
7
|
from value_object_pattern import validation
|
|
6
8
|
|
|
7
9
|
from .url_value_object import UrlValueObject, split_url
|
|
@@ -36,4 +38,17 @@ class HttpsUrlValueObject(UrlValueObject):
|
|
|
36
38
|
scheme, *_ = split_url(value=value)
|
|
37
39
|
|
|
38
40
|
if scheme != 'https':
|
|
39
|
-
|
|
41
|
+
self._raise_value_is_not_https_url(value=value, scheme=scheme)
|
|
42
|
+
|
|
43
|
+
def _raise_value_is_not_https_url(self, value: str, scheme: str) -> NoReturn:
|
|
44
|
+
"""
|
|
45
|
+
Raise an error if the URL scheme is not HTTPS.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
value (str): The URL value.
|
|
49
|
+
scheme (str): The invalid scheme.
|
|
50
|
+
|
|
51
|
+
Raises:
|
|
52
|
+
ValueError: If the URL scheme is not HTTPS.
|
|
53
|
+
"""
|
|
54
|
+
raise ValueError(f'HttpsUrlValueObject value <<<{value}>>> scheme is not HTTPS')
|
|
@@ -4,6 +4,7 @@ UrlValueObject value object.
|
|
|
4
4
|
|
|
5
5
|
from functools import lru_cache
|
|
6
6
|
from re import Pattern, compile as re_compile
|
|
7
|
+
from typing import NoReturn
|
|
7
8
|
from urllib.parse import parse_qs, urlsplit
|
|
8
9
|
|
|
9
10
|
from value_object_pattern import process, validation
|
|
@@ -37,6 +38,9 @@ def join_url(
|
|
|
37
38
|
Returns:
|
|
38
39
|
str: The URL joined.
|
|
39
40
|
"""
|
|
41
|
+
if ':' in host and not host.startswith('['):
|
|
42
|
+
host = f'[{host}]'
|
|
43
|
+
|
|
40
44
|
netloc = host
|
|
41
45
|
if user_information:
|
|
42
46
|
netloc = f'{user_information}@{netloc}'
|
|
@@ -88,9 +92,18 @@ def split_netloc(value: str) -> tuple[str | None, str, int | None]:
|
|
|
88
92
|
# prevent splitting passwords with @
|
|
89
93
|
user_information, host_port = value.rsplit(sep='@', maxsplit=1)
|
|
90
94
|
|
|
95
|
+
if host_port.startswith('['):
|
|
96
|
+
host, _, port_string = host_port[1:].partition(']')
|
|
97
|
+
if port_string:
|
|
98
|
+
port = int(port_string.removeprefix(':'))
|
|
99
|
+
|
|
100
|
+
return user_information, host, port
|
|
101
|
+
|
|
102
|
+
if host_port.count(':') > 1:
|
|
103
|
+
raise ValueError('IPv6 URL hosts must be enclosed in brackets.')
|
|
104
|
+
|
|
91
105
|
host = host_port
|
|
92
|
-
if ':' in host_port
|
|
93
|
-
# prevent splitting IPv6 addresses
|
|
106
|
+
if ':' in host_port:
|
|
94
107
|
host, port_string = host_port.rsplit(sep=':', maxsplit=1)
|
|
95
108
|
port = int(port_string)
|
|
96
109
|
|
|
@@ -166,11 +179,23 @@ class UrlValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
166
179
|
try:
|
|
167
180
|
scheme, netloc, path, query, fragment = split_url(value=value)
|
|
168
181
|
|
|
169
|
-
except ValueError
|
|
170
|
-
|
|
182
|
+
except ValueError:
|
|
183
|
+
self._raise_value_is_not_valid_url(value=value)
|
|
171
184
|
|
|
172
185
|
if not scheme and not netloc and not path and not query and not fragment:
|
|
173
|
-
|
|
186
|
+
self._raise_value_is_not_valid_url(value=value)
|
|
187
|
+
|
|
188
|
+
def _raise_value_is_not_valid_url(self, value: str) -> NoReturn:
|
|
189
|
+
"""
|
|
190
|
+
Raise an error if the value is not a valid URL.
|
|
191
|
+
|
|
192
|
+
Args:
|
|
193
|
+
value (str): The invalid URL value.
|
|
194
|
+
|
|
195
|
+
Raises:
|
|
196
|
+
ValueError: If the value is not a valid URL.
|
|
197
|
+
"""
|
|
198
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> is not a valid url.')
|
|
174
199
|
|
|
175
200
|
@validation(order=1)
|
|
176
201
|
def _validate_url_scheme(self, value: str) -> None:
|
|
@@ -188,7 +213,20 @@ class UrlValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
188
213
|
"""
|
|
189
214
|
scheme, *_ = split_url(value=value)
|
|
190
215
|
if not self._URL_SCHEME_REGEX.match(string=scheme):
|
|
191
|
-
|
|
216
|
+
self._raise_value_has_not_valid_scheme(value=value, scheme=scheme)
|
|
217
|
+
|
|
218
|
+
def _raise_value_has_not_valid_scheme(self, value: str, scheme: str) -> NoReturn:
|
|
219
|
+
"""
|
|
220
|
+
Raise an error if the URL scheme is invalid.
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
value (str): The URL value.
|
|
224
|
+
scheme (str): The invalid scheme.
|
|
225
|
+
|
|
226
|
+
Raises:
|
|
227
|
+
ValueError: If the URL scheme is invalid.
|
|
228
|
+
"""
|
|
229
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> contains an invalid scheme <<<{scheme}>>>.')
|
|
192
230
|
|
|
193
231
|
@validation(order=2)
|
|
194
232
|
def _validate_url_netloc(self, value: str) -> None:
|
|
@@ -207,23 +245,70 @@ class UrlValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
207
245
|
https://www.rfc-editor.org/rfc/rfc3986#section-3.2.3
|
|
208
246
|
"""
|
|
209
247
|
_, netloc, *_ = split_url(value=value)
|
|
210
|
-
|
|
248
|
+
try:
|
|
249
|
+
user_information, host, port = split_netloc(value=netloc)
|
|
250
|
+
|
|
251
|
+
except ValueError:
|
|
252
|
+
if netloc.count(':') > 1 and not netloc.startswith('['):
|
|
253
|
+
self._raise_value_is_not_valid_url(value=value)
|
|
254
|
+
|
|
255
|
+
invalid_port = netloc.rsplit(sep=':', maxsplit=1)[-1]
|
|
256
|
+
self._raise_value_has_not_valid_port(value=value, port=invalid_port)
|
|
211
257
|
|
|
212
258
|
if user_information is not None and not self._URL_USER_INFORMATION_REGEX.match(string=user_information): # noqa: E501 # fmt: skip
|
|
213
|
-
|
|
259
|
+
self._raise_value_has_not_valid_user_information(value=value, user_information=user_information)
|
|
214
260
|
|
|
215
261
|
try:
|
|
216
262
|
HostValueObject(value=host)
|
|
217
263
|
|
|
218
|
-
except ValueError
|
|
219
|
-
|
|
264
|
+
except (TypeError, ValueError):
|
|
265
|
+
self._raise_value_has_not_valid_host(value=value, host=host)
|
|
220
266
|
|
|
221
|
-
|
|
222
|
-
|
|
267
|
+
if port is not None:
|
|
268
|
+
try:
|
|
223
269
|
PortValueObject(value=port)
|
|
224
270
|
|
|
225
|
-
|
|
226
|
-
|
|
271
|
+
except (TypeError, ValueError):
|
|
272
|
+
self._raise_value_has_not_valid_port(value=value, port=port)
|
|
273
|
+
|
|
274
|
+
def _raise_value_has_not_valid_user_information(self, value: str, user_information: str) -> NoReturn:
|
|
275
|
+
"""
|
|
276
|
+
Raise an error if the URL user information is invalid.
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
value (str): The URL value.
|
|
280
|
+
user_information (str): The invalid user information.
|
|
281
|
+
|
|
282
|
+
Raises:
|
|
283
|
+
ValueError: If the URL user information is invalid.
|
|
284
|
+
"""
|
|
285
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> has not a valid user information <<<{user_information}>>>.') # noqa: E501 # fmt: skip
|
|
286
|
+
|
|
287
|
+
def _raise_value_has_not_valid_host(self, value: str, host: str) -> NoReturn:
|
|
288
|
+
"""
|
|
289
|
+
Raise an error if the URL host is invalid.
|
|
290
|
+
|
|
291
|
+
Args:
|
|
292
|
+
value (str): The URL value.
|
|
293
|
+
host (str): The invalid host.
|
|
294
|
+
|
|
295
|
+
Raises:
|
|
296
|
+
ValueError: If the URL host is invalid.
|
|
297
|
+
"""
|
|
298
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> has not a valid host <<<{host}>>>.')
|
|
299
|
+
|
|
300
|
+
def _raise_value_has_not_valid_port(self, value: str, port: int | str) -> NoReturn:
|
|
301
|
+
"""
|
|
302
|
+
Raise an error if the URL port is invalid.
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
value (str): The URL value.
|
|
306
|
+
port (int | str): The invalid port.
|
|
307
|
+
|
|
308
|
+
Raises:
|
|
309
|
+
ValueError: If the URL port is invalid.
|
|
310
|
+
"""
|
|
311
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> has not a valid port <<<{port}>>>.')
|
|
227
312
|
|
|
228
313
|
@validation(order=3)
|
|
229
314
|
def _validate_url_path(self, value: str) -> None:
|
|
@@ -244,7 +329,20 @@ class UrlValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
244
329
|
return
|
|
245
330
|
|
|
246
331
|
if not self._URL_PATH_REGEX.match(string=path):
|
|
247
|
-
|
|
332
|
+
self._raise_value_has_not_valid_path(value=value, path=path)
|
|
333
|
+
|
|
334
|
+
def _raise_value_has_not_valid_path(self, value: str, path: str) -> NoReturn:
|
|
335
|
+
"""
|
|
336
|
+
Raise an error if the URL path is invalid.
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
value (str): The URL value.
|
|
340
|
+
path (str): The invalid path.
|
|
341
|
+
|
|
342
|
+
Raises:
|
|
343
|
+
ValueError: If the URL path is invalid.
|
|
344
|
+
"""
|
|
345
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> has not a valid path <<<{path}>>>.')
|
|
248
346
|
|
|
249
347
|
@validation(order=4)
|
|
250
348
|
def _validate_url_query(self, value: str) -> None:
|
|
@@ -267,11 +365,24 @@ class UrlValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
267
365
|
try:
|
|
268
366
|
parse_qs(qs=query)
|
|
269
367
|
|
|
270
|
-
except ValueError
|
|
271
|
-
|
|
368
|
+
except ValueError:
|
|
369
|
+
self._raise_value_has_not_valid_query(value=value, query=query)
|
|
272
370
|
|
|
273
371
|
if not self._URL_QUERY_REGEX.match(string=query):
|
|
274
|
-
|
|
372
|
+
self._raise_value_has_not_valid_query(value=value, query=query)
|
|
373
|
+
|
|
374
|
+
def _raise_value_has_not_valid_query(self, value: str, query: str) -> NoReturn:
|
|
375
|
+
"""
|
|
376
|
+
Raise an error if the URL query is invalid.
|
|
377
|
+
|
|
378
|
+
Args:
|
|
379
|
+
value (str): The URL value.
|
|
380
|
+
query (str): The invalid query.
|
|
381
|
+
|
|
382
|
+
Raises:
|
|
383
|
+
ValueError: If the URL query is invalid.
|
|
384
|
+
"""
|
|
385
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> has not a valid query <<<{query}>>>.')
|
|
275
386
|
|
|
276
387
|
@validation(order=5)
|
|
277
388
|
def _validate_url_fragment(self, value: str) -> None:
|
|
@@ -292,7 +403,20 @@ class UrlValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
|
292
403
|
return
|
|
293
404
|
|
|
294
405
|
if not self._URL_FRAGMENT_REGEX.match(string=fragment):
|
|
295
|
-
|
|
406
|
+
self._raise_value_has_not_valid_fragment(value=value, fragment=fragment)
|
|
407
|
+
|
|
408
|
+
def _raise_value_has_not_valid_fragment(self, value: str, fragment: str) -> NoReturn:
|
|
409
|
+
"""
|
|
410
|
+
Raise an error if the URL fragment is invalid.
|
|
411
|
+
|
|
412
|
+
Args:
|
|
413
|
+
value (str): The URL value.
|
|
414
|
+
fragment (str): The invalid fragment.
|
|
415
|
+
|
|
416
|
+
Raises:
|
|
417
|
+
ValueError: If the URL fragment is invalid.
|
|
418
|
+
"""
|
|
419
|
+
raise ValueError(f'UrlValueObject value <<<{value}>>> has not a valid fragment <<<{fragment}>>>.')
|
|
296
420
|
|
|
297
421
|
@property
|
|
298
422
|
def scheme(self) -> str:
|
|
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.32.0 → value_object_pattern-1.33.1}/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
|
{value_object_pattern-1.32.0 → value_object_pattern-1.33.1}/value_object_pattern/usables/__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
|