value-object-pattern 1.26.0__tar.gz → 1.28.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.26.0 → value_object_pattern-1.28.0}/PKG-INFO +1 -1
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/pyproject.toml +0 -2
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/__init__.py +1 -1
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/__init__.py +10 -1
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/__init__.py +5 -2
- value_object_pattern-1.28.0/value_object_pattern/usables/internet/keys/__init__.py +7 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/internet/keys/kebab_case_key_value_object.py +53 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/internet/keys/snake_case_key_value_object.py +53 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/slug_value_object.py +10 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/internet/user_agent_value_object.py +21 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/utils/tld_domains.txt +2 -1
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/__init__.py +10 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/__init__.py +10 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/primitives/string/camel_case_string_value_object.py +55 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/primitives/string/kebab_case_string_value_object.py +55 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/primitives/string/pascal_case_string_value_object.py +55 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/primitives/string/screaming_snake_case_string_value_object.py +55 -0
- value_object_pattern-1.28.0/value_object_pattern/usables/primitives/string/snake_case_string_value_object.py +55 -0
- value_object_pattern-1.26.0/value_object_pattern/usables/internet/key_value_object.py +0 -43
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/.gitignore +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/LICENSE.md +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/README.md +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/decorators/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/decorators/classproperty.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/decorators/value_object_process.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/decorators/value_object_validation.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/base_model.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/collections/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/collections/dict_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/collections/list_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/enumeration_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/primitive_conversion.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/type_matching.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/union_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/models/value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/py.typed +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/date/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/timezone/string_timezone_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v1_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v3_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v5_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v6_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v7_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v8_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_v1_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_v3_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_v5_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_v6_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_v7_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_v8_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/uuid/uuid_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/country_tld_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/dni_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/nie_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/nif_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/nuss_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/passport_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/phone_number_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/administrative_technician_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/air_force_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/army_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/canarias_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/catalan_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/civil_guard_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/consular_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/diplomatic_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/especial_plate_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/historical_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/international_organization_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_development_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_environment_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/national_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/navy_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_truck_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/provincial_system_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/state_motor_pool_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.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.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_company_registered_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_private_individual_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/two_wheels_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/provincial_plate_codes.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/utils/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/utils/provincial_codes.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/europe/spain/vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/iso3166_alpha2_code_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/iso3166_alpha3_code_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/iso3166_numeric_code_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/phone_code_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_codes.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_alpha3_mapping.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_numeric_mapping.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_phone_code_mapping.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_tld_mapping.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha3_codes.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_numeric_codes.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/identifiers/world/vin_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/domain_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/email_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/host_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/ip_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mac_addresses/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mac_addresses/cisco_mac_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mac_addresses/raw_mac_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mac_addresses/space_mac_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mac_addresses/universal_mac_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mac_addresses/windows_mac_address_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mobile/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/mobile/imei_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/port_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/uri/https_url_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/uri/url_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/utils/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/internet/utils/aws_regions.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/credit_card_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/credit_cards/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/credit_cards/amex_credit_card_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/credit_cards/discover_credit_card_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/credit_cards/mastercard_credit_card_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/credit_cards/visa_credit_card_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/iban_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/utils/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/money/utils/iban_lengths.txt +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/float/negative_or_zero_float_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/float/positive_or_zero_float_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/negative_or_zero_integer_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/integer/positive_or_zero_integer_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/none/not_none_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/primitives/string/uppercase_string_value_object.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/utils/__init__.py +0 -0
- {value_object_pattern-1.26.0 → value_object_pattern-1.28.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.28.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
|
|
@@ -50,7 +50,6 @@ Issues = 'https://github.com/adriamontoto/value-object-pattern/issues'
|
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
[dependency-groups]
|
|
53
|
-
audit = ['pip-audit>=2.9.0']
|
|
54
53
|
coverage = ['coverage[toml]>=7.0.0', 'smokeshow>=0.5.0']
|
|
55
54
|
develop = ['pre-commit>=3.0.0']
|
|
56
55
|
format = ['ruff>=0.11.10']
|
|
@@ -69,7 +68,6 @@ test = [
|
|
|
69
68
|
]
|
|
70
69
|
types = ['types-python-dateutil>=2.9.0.20241206']
|
|
71
70
|
all = [
|
|
72
|
-
{ include-group = 'audit' },
|
|
73
71
|
{ include-group = 'coverage' },
|
|
74
72
|
{ include-group = 'develop' },
|
|
75
73
|
{ include-group = 'format' },
|
{value_object_pattern-1.26.0 → value_object_pattern-1.28.0}/value_object_pattern/usables/__init__.py
RENAMED
|
@@ -3,11 +3,13 @@ from .primitives import (
|
|
|
3
3
|
AlphanumericStringValueObject,
|
|
4
4
|
BooleanValueObject,
|
|
5
5
|
BytesValueObject,
|
|
6
|
+
CamelCaseStringValueObject,
|
|
6
7
|
DigitStringValueObject,
|
|
7
8
|
EvenIntegerValueObject,
|
|
8
9
|
FalseValueObject,
|
|
9
10
|
FloatValueObject,
|
|
10
11
|
IntegerValueObject,
|
|
12
|
+
KebabCaseStringValueObject,
|
|
11
13
|
LowercaseStringValueObject,
|
|
12
14
|
NegativeFloatValueObject,
|
|
13
15
|
NegativeIntegerValueObject,
|
|
@@ -17,11 +19,14 @@ from .primitives import (
|
|
|
17
19
|
NotEmptyStringValueObject,
|
|
18
20
|
NotNoneValueObject,
|
|
19
21
|
OddIntegerValueObject,
|
|
22
|
+
PascalCaseStringValueObject,
|
|
20
23
|
PositiveFloatValueObject,
|
|
21
24
|
PositiveIntegerValueObject,
|
|
22
25
|
PositiveOrZeroFloatValueObject,
|
|
23
26
|
PositiveOrZeroIntegerValueObject,
|
|
24
27
|
PrintableStringValueObject,
|
|
28
|
+
ScreamingSnakeCaseStringValueObject,
|
|
29
|
+
SnakeCaseStringValueObject,
|
|
25
30
|
StringValueObject,
|
|
26
31
|
TrimmedStringValueObject,
|
|
27
32
|
TrueValueObject,
|
|
@@ -33,12 +38,13 @@ __all__ = (
|
|
|
33
38
|
'AlphanumericStringValueObject',
|
|
34
39
|
'BooleanValueObject',
|
|
35
40
|
'BytesValueObject',
|
|
41
|
+
'CamelCaseStringValueObject',
|
|
36
42
|
'DigitStringValueObject',
|
|
37
43
|
'EvenIntegerValueObject',
|
|
38
44
|
'FalseValueObject',
|
|
39
45
|
'FloatValueObject',
|
|
40
|
-
'HexadecimalStringValueObject',
|
|
41
46
|
'IntegerValueObject',
|
|
47
|
+
'KebabCaseStringValueObject',
|
|
42
48
|
'LowercaseStringValueObject',
|
|
43
49
|
'LowercaseStringValueObject',
|
|
44
50
|
'NegativeFloatValueObject',
|
|
@@ -50,12 +56,15 @@ __all__ = (
|
|
|
50
56
|
'NotEmptyStringValueObject',
|
|
51
57
|
'NotNoneValueObject',
|
|
52
58
|
'OddIntegerValueObject',
|
|
59
|
+
'PascalCaseStringValueObject',
|
|
53
60
|
'PositiveFloatValueObject',
|
|
54
61
|
'PositiveIntegerValueObject',
|
|
55
62
|
'PositiveOrZeroFloatValueObject',
|
|
56
63
|
'PositiveOrZeroIntegerValueObject',
|
|
57
64
|
'PrintableStringValueObject',
|
|
58
65
|
'PrintableStringValueObject',
|
|
66
|
+
'ScreamingSnakeCaseStringValueObject',
|
|
67
|
+
'SnakeCaseStringValueObject',
|
|
59
68
|
'StringValueObject',
|
|
60
69
|
'StringValueObject',
|
|
61
70
|
'TrimmedStringValueObject',
|
|
@@ -7,11 +7,12 @@ from .ipv4_address_value_object import Ipv4AddressValueObject
|
|
|
7
7
|
from .ipv4_network_value_object import Ipv4NetworkValueObject
|
|
8
8
|
from .ipv6_address_value_object import Ipv6AddressValueObject
|
|
9
9
|
from .ipv6_network_value_object import Ipv6NetworkValueObject
|
|
10
|
-
from .
|
|
10
|
+
from .keys import KebabCaseKeyValueObject, SnakeCaseKeyValueObject
|
|
11
11
|
from .mac_address_value_object import MacAddressValueObject
|
|
12
12
|
from .port_value_object import PortValueObject
|
|
13
13
|
from .slug_value_object import SlugValueObject
|
|
14
14
|
from .uri import HttpHttpsUrlValueObject, HttpUrlValueObject, HttpsUrlValueObject, UrlValueObject
|
|
15
|
+
from .user_agent_value_object import UserAgentValueObject
|
|
15
16
|
|
|
16
17
|
__all__ = (
|
|
17
18
|
'AwsCloudRegionValueObject',
|
|
@@ -26,9 +27,11 @@ __all__ = (
|
|
|
26
27
|
'Ipv4NetworkValueObject',
|
|
27
28
|
'Ipv6AddressValueObject',
|
|
28
29
|
'Ipv6NetworkValueObject',
|
|
29
|
-
'
|
|
30
|
+
'KebabCaseKeyValueObject',
|
|
30
31
|
'MacAddressValueObject',
|
|
31
32
|
'PortValueObject',
|
|
32
33
|
'SlugValueObject',
|
|
34
|
+
'SnakeCaseKeyValueObject',
|
|
33
35
|
'UrlValueObject',
|
|
36
|
+
'UserAgentValueObject',
|
|
34
37
|
)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
KebabCaseKeyValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from re import Pattern, compile as re_compile
|
|
6
|
+
from typing import NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
from value_object_pattern.usables import NotEmptyStringValueObject, TrimmedStringValueObject
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class KebabCaseKeyValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
13
|
+
"""
|
|
14
|
+
KebabCaseKeyValueObject ensures the provided value is a valid kebab-case dotted key.
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
```python
|
|
18
|
+
from value_object_pattern.usables.internet.keys import KebabCaseKeyValueObject
|
|
19
|
+
|
|
20
|
+
key = KebabCaseKeyValueObject(value='organization.api-keys.rotate-after-days')
|
|
21
|
+
|
|
22
|
+
print(repr(key))
|
|
23
|
+
# >>> KebabCaseKeyValueObject(value='organization.api-keys.rotate-after-days')
|
|
24
|
+
```
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[a-z0-9]+(?:-[a-z0-9]+)*(?:\.[a-z0-9]+(?:-[a-z0-9]+)*)*$')
|
|
28
|
+
|
|
29
|
+
@validation(order=0)
|
|
30
|
+
def _ensure_value_follows_validation_regex(self, value: str) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Ensures the value object `value` follows the kebab-case dotted key format.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
value (str): The provided value.
|
|
36
|
+
|
|
37
|
+
Raises:
|
|
38
|
+
ValueError: If the `value` has invalid format.
|
|
39
|
+
"""
|
|
40
|
+
if not self._VALIDATION_REGEX.fullmatch(string=value):
|
|
41
|
+
self._raise_value_contains_invalid_characters(value=value)
|
|
42
|
+
|
|
43
|
+
def _raise_value_contains_invalid_characters(self, value: str) -> NoReturn:
|
|
44
|
+
"""
|
|
45
|
+
Raises a ValueError if the value object `value` contains invalid characters.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
value (str): The provided value.
|
|
49
|
+
|
|
50
|
+
Raises:
|
|
51
|
+
ValueError: If the `value` has invalid format.
|
|
52
|
+
"""
|
|
53
|
+
raise ValueError(f'KebabCaseKeyValueObject value <<<{value}>>> has invalid format. Only lowercase letters and digits separated by single hyphens inside dot-separated segments are allowed.') # noqa: E501 # fmt: skip
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SnakeCaseKeyValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from re import Pattern, compile as re_compile
|
|
6
|
+
from typing import NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
from value_object_pattern.usables import NotEmptyStringValueObject, TrimmedStringValueObject
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SnakeCaseKeyValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
13
|
+
"""
|
|
14
|
+
SnakeCaseKeyValueObject ensures the provided value is a valid snake_case dotted key.
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
```python
|
|
18
|
+
from value_object_pattern.usables.internet.keys import SnakeCaseKeyValueObject
|
|
19
|
+
|
|
20
|
+
key = SnakeCaseKeyValueObject(value='organization.api_keys.rotate_after_days')
|
|
21
|
+
|
|
22
|
+
print(repr(key))
|
|
23
|
+
# >>> SnakeCaseKeyValueObject(value='organization.api_keys.rotate_after_days')
|
|
24
|
+
```
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[a-z0-9]+(?:_[a-z0-9]+)*(?:\.[a-z0-9]+(?:_[a-z0-9]+)*)*$')
|
|
28
|
+
|
|
29
|
+
@validation(order=0)
|
|
30
|
+
def _ensure_value_follows_validation_regex(self, value: str) -> None:
|
|
31
|
+
"""
|
|
32
|
+
Ensures the value object `value` follows the snake_case dotted key format.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
value (str): The provided value.
|
|
36
|
+
|
|
37
|
+
Raises:
|
|
38
|
+
ValueError: If the `value` has invalid format.
|
|
39
|
+
"""
|
|
40
|
+
if not self._VALIDATION_REGEX.fullmatch(string=value):
|
|
41
|
+
self._raise_value_contains_invalid_characters(value=value)
|
|
42
|
+
|
|
43
|
+
def _raise_value_contains_invalid_characters(self, value: str) -> NoReturn:
|
|
44
|
+
"""
|
|
45
|
+
Raises a ValueError if the value object `value` contains invalid characters.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
value (str): The provided value.
|
|
49
|
+
|
|
50
|
+
Raises:
|
|
51
|
+
ValueError: If the `value` has invalid format.
|
|
52
|
+
"""
|
|
53
|
+
raise ValueError(f'SnakeCaseKeyValueObject value <<<{value}>>> has invalid format. Only lowercase letters and digits separated by single underscores inside dot-separated segments are allowed.') # noqa: E501 # fmt: skip
|
|
@@ -12,6 +12,16 @@ from value_object_pattern.usables import NotEmptyStringValueObject, TrimmedStrin
|
|
|
12
12
|
class SlugValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
13
13
|
"""
|
|
14
14
|
SlugValueObject ensures the provided value is a valid slug string.
|
|
15
|
+
|
|
16
|
+
Example:
|
|
17
|
+
```python
|
|
18
|
+
from value_object_pattern.usables.internet import SlugValueObject
|
|
19
|
+
|
|
20
|
+
slug = SlugValueObject(value='summer-release-2026')
|
|
21
|
+
|
|
22
|
+
print(repr(slug))
|
|
23
|
+
# >>> SlugValueObject(value='summer-release-2026')
|
|
24
|
+
```
|
|
15
25
|
"""
|
|
16
26
|
|
|
17
27
|
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[a-z0-9]+(?:-[a-z0-9]+)*$')
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""
|
|
2
|
+
UserAgentValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from value_object_pattern.usables import NotEmptyStringValueObject, PrintableStringValueObject, TrimmedStringValueObject
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class UserAgentValueObject(NotEmptyStringValueObject, PrintableStringValueObject, TrimmedStringValueObject):
|
|
9
|
+
"""
|
|
10
|
+
UserAgentValueObject ensures the provided value is a non-empty, trimmed, printable user agent string.
|
|
11
|
+
|
|
12
|
+
Example:
|
|
13
|
+
```python
|
|
14
|
+
from value_object_pattern.usables.internet import UserAgentValueObject
|
|
15
|
+
|
|
16
|
+
user_agent = UserAgentValueObject(value='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15')
|
|
17
|
+
|
|
18
|
+
print(repr(user_agent))
|
|
19
|
+
# >>> UserAgentValueObject(value='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15')
|
|
20
|
+
```
|
|
21
|
+
"""
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# This file was automatically updated using "update_lists.py" on 2026-
|
|
1
|
+
# This file was automatically updated using "update_lists.py" on 2026-04-19T04:07:29.141154+00:00
|
|
2
2
|
|
|
3
3
|
aaa
|
|
4
4
|
aarp
|
|
@@ -742,6 +742,7 @@ meme
|
|
|
742
742
|
memorial
|
|
743
743
|
men
|
|
744
744
|
menu
|
|
745
|
+
merck
|
|
745
746
|
merckmsd
|
|
746
747
|
mg
|
|
747
748
|
mh
|
|
@@ -20,10 +20,15 @@ from .none import NoneValueObject, NotNoneValueObject
|
|
|
20
20
|
from .string import (
|
|
21
21
|
AlphaStringValueObject,
|
|
22
22
|
AlphanumericStringValueObject,
|
|
23
|
+
CamelCaseStringValueObject,
|
|
23
24
|
DigitStringValueObject,
|
|
25
|
+
KebabCaseStringValueObject,
|
|
24
26
|
LowercaseStringValueObject,
|
|
25
27
|
NotEmptyStringValueObject,
|
|
28
|
+
PascalCaseStringValueObject,
|
|
26
29
|
PrintableStringValueObject,
|
|
30
|
+
ScreamingSnakeCaseStringValueObject,
|
|
31
|
+
SnakeCaseStringValueObject,
|
|
27
32
|
StringValueObject,
|
|
28
33
|
TrimmedStringValueObject,
|
|
29
34
|
UppercaseStringValueObject,
|
|
@@ -34,11 +39,13 @@ __all__ = (
|
|
|
34
39
|
'AlphanumericStringValueObject',
|
|
35
40
|
'BooleanValueObject',
|
|
36
41
|
'BytesValueObject',
|
|
42
|
+
'CamelCaseStringValueObject',
|
|
37
43
|
'DigitStringValueObject',
|
|
38
44
|
'EvenIntegerValueObject',
|
|
39
45
|
'FalseValueObject',
|
|
40
46
|
'FloatValueObject',
|
|
41
47
|
'IntegerValueObject',
|
|
48
|
+
'KebabCaseStringValueObject',
|
|
42
49
|
'LowercaseStringValueObject',
|
|
43
50
|
'NegativeFloatValueObject',
|
|
44
51
|
'NegativeIntegerValueObject',
|
|
@@ -48,11 +55,14 @@ __all__ = (
|
|
|
48
55
|
'NotEmptyStringValueObject',
|
|
49
56
|
'NotNoneValueObject',
|
|
50
57
|
'OddIntegerValueObject',
|
|
58
|
+
'PascalCaseStringValueObject',
|
|
51
59
|
'PositiveFloatValueObject',
|
|
52
60
|
'PositiveIntegerValueObject',
|
|
53
61
|
'PositiveOrZeroFloatValueObject',
|
|
54
62
|
'PositiveOrZeroIntegerValueObject',
|
|
55
63
|
'PrintableStringValueObject',
|
|
64
|
+
'ScreamingSnakeCaseStringValueObject',
|
|
65
|
+
'SnakeCaseStringValueObject',
|
|
56
66
|
'StringValueObject',
|
|
57
67
|
'TrimmedStringValueObject',
|
|
58
68
|
'TrueValueObject',
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
from .alpha_value_object import AlphaStringValueObject
|
|
2
2
|
from .alphanumeric_value_object import AlphanumericStringValueObject
|
|
3
|
+
from .camel_case_string_value_object import CamelCaseStringValueObject
|
|
3
4
|
from .digit_value_object import DigitStringValueObject
|
|
5
|
+
from .kebab_case_string_value_object import KebabCaseStringValueObject
|
|
4
6
|
from .lowercase_string_value_object import LowercaseStringValueObject
|
|
5
7
|
from .non_empty_string_value_object import NotEmptyStringValueObject
|
|
8
|
+
from .pascal_case_string_value_object import PascalCaseStringValueObject
|
|
6
9
|
from .printable_string_value_object import PrintableStringValueObject
|
|
10
|
+
from .screaming_snake_case_string_value_object import ScreamingSnakeCaseStringValueObject
|
|
11
|
+
from .snake_case_string_value_object import SnakeCaseStringValueObject
|
|
7
12
|
from .string_value_object import StringValueObject
|
|
8
13
|
from .trimmed_string_value_object import TrimmedStringValueObject
|
|
9
14
|
from .uppercase_string_value_object import UppercaseStringValueObject
|
|
@@ -11,10 +16,15 @@ from .uppercase_string_value_object import UppercaseStringValueObject
|
|
|
11
16
|
__all__ = (
|
|
12
17
|
'AlphaStringValueObject',
|
|
13
18
|
'AlphanumericStringValueObject',
|
|
19
|
+
'CamelCaseStringValueObject',
|
|
14
20
|
'DigitStringValueObject',
|
|
21
|
+
'KebabCaseStringValueObject',
|
|
15
22
|
'LowercaseStringValueObject',
|
|
16
23
|
'NotEmptyStringValueObject',
|
|
24
|
+
'PascalCaseStringValueObject',
|
|
17
25
|
'PrintableStringValueObject',
|
|
26
|
+
'ScreamingSnakeCaseStringValueObject',
|
|
27
|
+
'SnakeCaseStringValueObject',
|
|
18
28
|
'StringValueObject',
|
|
19
29
|
'TrimmedStringValueObject',
|
|
20
30
|
'UppercaseStringValueObject',
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CamelCaseStringValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from re import Pattern, compile as re_compile
|
|
6
|
+
from typing import NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
|
|
10
|
+
from .non_empty_string_value_object import NotEmptyStringValueObject
|
|
11
|
+
from .trimmed_string_value_object import TrimmedStringValueObject
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CamelCaseStringValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
15
|
+
"""
|
|
16
|
+
CamelCaseStringValueObject value object ensures the provided value is camelCase.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
```python
|
|
20
|
+
from value_object_pattern.usables import CamelCaseStringValueObject
|
|
21
|
+
|
|
22
|
+
string = CamelCaseStringValueObject(value='abcd1234Word')
|
|
23
|
+
|
|
24
|
+
print(repr(string))
|
|
25
|
+
# >>> CamelCaseStringValueObject(value='abcd1234Word')
|
|
26
|
+
```
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$')
|
|
30
|
+
|
|
31
|
+
@validation(order=0)
|
|
32
|
+
def _ensure_value_is_camel_case(self, value: str) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Ensures the value object `value` is camelCase.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
value (str): The provided value.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ValueError: If the `value` is not camelCase.
|
|
41
|
+
"""
|
|
42
|
+
if not self._VALIDATION_REGEX.fullmatch(string=value):
|
|
43
|
+
self._raise_value_is_not_camel_case(value=value)
|
|
44
|
+
|
|
45
|
+
def _raise_value_is_not_camel_case(self, value: str) -> NoReturn:
|
|
46
|
+
"""
|
|
47
|
+
Raises a ValueError if the value object `value` is not camelCase.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
value (str): The provided value.
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
ValueError: If the `value` is not camelCase.
|
|
54
|
+
"""
|
|
55
|
+
raise ValueError(f'CamelCaseStringValueObject value <<<{value}>>> has invalid format. Only camelCase strings starting with a lowercase letter and continuing with alphanumeric words are allowed.') # noqa: E501 # fmt: skip
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
KebabCaseStringValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from re import Pattern, compile as re_compile
|
|
6
|
+
from typing import NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
|
|
10
|
+
from .non_empty_string_value_object import NotEmptyStringValueObject
|
|
11
|
+
from .trimmed_string_value_object import TrimmedStringValueObject
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class KebabCaseStringValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
15
|
+
"""
|
|
16
|
+
KebabCaseStringValueObject value object ensures the provided value is kebab-case.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
```python
|
|
20
|
+
from value_object_pattern.usables import KebabCaseStringValueObject
|
|
21
|
+
|
|
22
|
+
string = KebabCaseStringValueObject(value='abcd-1234')
|
|
23
|
+
|
|
24
|
+
print(repr(string))
|
|
25
|
+
# >>> KebabCaseStringValueObject(value='abcd-1234')
|
|
26
|
+
```
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[a-z0-9]+(?:-[a-z0-9]+)*$')
|
|
30
|
+
|
|
31
|
+
@validation(order=0)
|
|
32
|
+
def _ensure_value_is_kebab_case(self, value: str) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Ensures the value object `value` is kebab-case.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
value (str): The provided value.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ValueError: If the `value` is not kebab-case.
|
|
41
|
+
"""
|
|
42
|
+
if not self._VALIDATION_REGEX.fullmatch(string=value):
|
|
43
|
+
self._raise_value_is_not_kebab_case(value=value)
|
|
44
|
+
|
|
45
|
+
def _raise_value_is_not_kebab_case(self, value: str) -> NoReturn:
|
|
46
|
+
"""
|
|
47
|
+
Raises a ValueError if the value object `value` is not kebab-case.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
value (str): The provided value.
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
ValueError: If the `value` is not kebab-case.
|
|
54
|
+
"""
|
|
55
|
+
raise ValueError(f'KebabCaseStringValueObject value <<<{value}>>> has invalid format. Only lowercase letters and digits separated by single hyphens are allowed.') # noqa: E501 # fmt: skip
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PascalCaseStringValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from re import Pattern, compile as re_compile
|
|
6
|
+
from typing import NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
|
|
10
|
+
from .non_empty_string_value_object import NotEmptyStringValueObject
|
|
11
|
+
from .trimmed_string_value_object import TrimmedStringValueObject
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class PascalCaseStringValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
15
|
+
"""
|
|
16
|
+
PascalCaseStringValueObject value object ensures the provided value is PascalCase.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
```python
|
|
20
|
+
from value_object_pattern.usables import PascalCaseStringValueObject
|
|
21
|
+
|
|
22
|
+
string = PascalCaseStringValueObject(value='Abcd1234Word')
|
|
23
|
+
|
|
24
|
+
print(repr(string))
|
|
25
|
+
# >>> PascalCaseStringValueObject(value='Abcd1234Word')
|
|
26
|
+
```
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[A-Z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$')
|
|
30
|
+
|
|
31
|
+
@validation(order=0)
|
|
32
|
+
def _ensure_value_is_pascal_case(self, value: str) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Ensures the value object `value` is PascalCase.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
value (str): The provided value.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ValueError: If the `value` is not PascalCase.
|
|
41
|
+
"""
|
|
42
|
+
if not self._VALIDATION_REGEX.fullmatch(string=value):
|
|
43
|
+
self._raise_value_is_not_pascal_case(value=value)
|
|
44
|
+
|
|
45
|
+
def _raise_value_is_not_pascal_case(self, value: str) -> NoReturn:
|
|
46
|
+
"""
|
|
47
|
+
Raises a ValueError if the value object `value` is PascalCase.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
value (str): The provided value.
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
ValueError: If the `value` is not PascalCase.
|
|
54
|
+
"""
|
|
55
|
+
raise ValueError(f'PascalCaseStringValueObject value <<<{value}>>> has invalid format. Only PascalCase strings starting with an uppercase letter and continuing with alphanumeric words are allowed.') # noqa: E501 # fmt: skip
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ScreamingSnakeCaseStringValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from re import Pattern, compile as re_compile
|
|
6
|
+
from typing import NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
|
|
10
|
+
from .non_empty_string_value_object import NotEmptyStringValueObject
|
|
11
|
+
from .trimmed_string_value_object import TrimmedStringValueObject
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ScreamingSnakeCaseStringValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
15
|
+
"""
|
|
16
|
+
ScreamingSnakeCaseStringValueObject value object ensures the provided value is SCREAMING_SNAKE_CASE.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
```python
|
|
20
|
+
from value_object_pattern.usables import ScreamingSnakeCaseStringValueObject
|
|
21
|
+
|
|
22
|
+
string = ScreamingSnakeCaseStringValueObject(value='ABCD_1234')
|
|
23
|
+
|
|
24
|
+
print(repr(string))
|
|
25
|
+
# >>> ScreamingSnakeCaseStringValueObject(value='ABCD_1234')
|
|
26
|
+
```
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[A-Z0-9]+(?:_[A-Z0-9]+)*$')
|
|
30
|
+
|
|
31
|
+
@validation(order=0)
|
|
32
|
+
def _ensure_value_is_screaming_snake_case(self, value: str) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Ensures the value object `value` is SCREAMING_SNAKE_CASE.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
value (str): The provided value.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ValueError: If the `value` is not SCREAMING_SNAKE_CASE.
|
|
41
|
+
"""
|
|
42
|
+
if not self._VALIDATION_REGEX.fullmatch(string=value):
|
|
43
|
+
self._raise_value_is_not_screaming_snake_case(value=value)
|
|
44
|
+
|
|
45
|
+
def _raise_value_is_not_screaming_snake_case(self, value: str) -> NoReturn:
|
|
46
|
+
"""
|
|
47
|
+
Raises a ValueError if the value object `value` is not SCREAMING_SNAKE_CASE.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
value (str): The provided value.
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
ValueError: If the `value` is not SCREAMING_SNAKE_CASE.
|
|
54
|
+
"""
|
|
55
|
+
raise ValueError(f'ScreamingSnakeCaseStringValueObject value <<<{value}>>> has invalid format. Only uppercase letters and digits separated by single underscores are allowed.') # noqa: E501 # fmt: skip
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SnakeCaseStringValueObject value object.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from re import Pattern, compile as re_compile
|
|
6
|
+
from typing import NoReturn
|
|
7
|
+
|
|
8
|
+
from value_object_pattern.decorators import validation
|
|
9
|
+
|
|
10
|
+
from .non_empty_string_value_object import NotEmptyStringValueObject
|
|
11
|
+
from .trimmed_string_value_object import TrimmedStringValueObject
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SnakeCaseStringValueObject(NotEmptyStringValueObject, TrimmedStringValueObject):
|
|
15
|
+
"""
|
|
16
|
+
SnakeCaseStringValueObject value object ensures the provided value is snake_case.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
```python
|
|
20
|
+
from value_object_pattern.usables import SnakeCaseStringValueObject
|
|
21
|
+
|
|
22
|
+
string = SnakeCaseStringValueObject(value='abcd_1234')
|
|
23
|
+
|
|
24
|
+
print(repr(string))
|
|
25
|
+
# >>> SnakeCaseStringValueObject(value='abcd_1234')
|
|
26
|
+
```
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
_VALIDATION_REGEX: Pattern[str] = re_compile(pattern=r'^[a-z0-9]+(?:_[a-z0-9]+)*$')
|
|
30
|
+
|
|
31
|
+
@validation(order=0)
|
|
32
|
+
def _ensure_value_is_snake_case(self, value: str) -> None:
|
|
33
|
+
"""
|
|
34
|
+
Ensures the value object `value` is snake_case.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
value (str): The provided value.
|
|
38
|
+
|
|
39
|
+
Raises:
|
|
40
|
+
ValueError: If the `value` is not snake_case.
|
|
41
|
+
"""
|
|
42
|
+
if not self._VALIDATION_REGEX.fullmatch(string=value):
|
|
43
|
+
self._raise_value_is_not_snake_case(value=value)
|
|
44
|
+
|
|
45
|
+
def _raise_value_is_not_snake_case(self, value: str) -> NoReturn:
|
|
46
|
+
"""
|
|
47
|
+
Raises a ValueError if the value object `value` is not snake_case.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
value (str): The provided value.
|
|
51
|
+
|
|
52
|
+
Raises:
|
|
53
|
+
ValueError: If the `value` is not snake_case.
|
|
54
|
+
"""
|
|
55
|
+
raise ValueError(f'SnakeCaseStringValueObject value <<<{value}>>> has invalid format. Only lowercase letters and digits separated by single underscores are allowed.') # noqa: E501 # fmt: skip
|