value-object-pattern 1.15.1__tar.gz → 1.16.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.15.1 → value_object_pattern-1.16.0}/PKG-INFO +1 -1
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/__init__.py +1 -1
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/models/base_model.py +3 -3
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/models/collections/list_value_object.py +325 -7
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/.gitignore +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/LICENSE.md +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/README.md +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/pyproject.toml +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/decorators/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/decorators/classproperty.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/decorators/value_object_process.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/decorators/value_object_validation.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/models/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/models/collections/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/models/enumeration_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/models/value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/py.typed +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/date/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/date/date_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/date/string_date_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/datetime/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/datetime/datetime_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/datetime/string_datetime_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/timezone/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/timezone/string_timezone_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/dates/timezone/timezone_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/uuid/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/uuid/string_uuid_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/uuid/uuid_v4_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/uuid/uuid_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/country_tld_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/dni_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/nie_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/nif_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/nuss_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/passport_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/phone_number_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/administrative_technician_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/air_force_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/army_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/canarias_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/catalan_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/civil_guard_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/consular_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/diplomatic_corps_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/especial_plate_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/historical_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/international_organization_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_development_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ministry_environment_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/national_police_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/navy_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_truck_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/ordinary_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/provincial_system_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/state_motor_pool_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.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.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_company_registered_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/temporal_private_individual_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/two_wheels_vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/plates/utils/provincial_plate_codes.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/utils/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/utils/provincial_codes.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/europe/spain/vehicle_plate_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/iso3166_alpha2_code_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/iso3166_alpha3_code_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/iso3166_numeric_code_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/phone_code_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_codes.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_alpha3_mapping.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_numeric_mapping.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_phone_code_mapping.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha2_to_tld_mapping.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_alpha3_codes.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/utils/iso3166_numeric_codes.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/identifiers/world/vin_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/aws_cloud_region_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/domain_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/email_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/host_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/ip_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/ipv4_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/ipv4_network_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/ipv6_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/ipv6_network_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mac_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mac_addresses/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mac_addresses/cisco_mac_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mac_addresses/raw_mac_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mac_addresses/space_mac_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mac_addresses/universal_mac_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mac_addresses/windows_mac_address_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mobile/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/mobile/imei_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/port_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/uri/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/uri/http_https_url_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/uri/http_url_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/uri/https_url_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/uri/url_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/utils/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/utils/aws_regions.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/internet/utils/tld_domains.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/credit_card_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/credit_cards/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/credit_cards/amex_credit_card_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/credit_cards/discover_credit_card_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/credit_cards/mastercard_credit_card_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/credit_cards/visa_credit_card_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/iban_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/utils/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/money/utils/iban_lengths.txt +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/boolean/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/boolean/boolean_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/boolean/false_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/boolean/true_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/bytes/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/bytes/bytes_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/float/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/float/float_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/float/negative_float_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/float/positive_float_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/integer/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/integer/even_integer_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/integer/integer_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/integer/negative_integer_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/integer/odd_integer_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/integer/positive_integer_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/none/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/none/none_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/none/not_none_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/alpha_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/alphanumeric_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/digit_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/lowercase_string_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/non_empty_string_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/printable_string_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/string_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/trimmed_string_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/primitives/string/uppercase_string_value_object.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/value_object_pattern/usables/utils/__init__.py +0 -0
- {value_object_pattern-1.15.1 → value_object_pattern-1.16.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.16.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
|
|
@@ -15,7 +15,7 @@ from abc import ABC, abstractmethod
|
|
|
15
15
|
from copy import deepcopy
|
|
16
16
|
from enum import Enum
|
|
17
17
|
from inspect import Parameter, _empty, signature
|
|
18
|
-
from typing import Any, NoReturn
|
|
18
|
+
from typing import Any, NoReturn
|
|
19
19
|
|
|
20
20
|
from .value_object import ValueObject
|
|
21
21
|
|
|
@@ -307,7 +307,7 @@ class BaseModel(ABC):
|
|
|
307
307
|
return dictionary
|
|
308
308
|
|
|
309
309
|
@classmethod
|
|
310
|
-
def from_primitives(cls, primitives: dict[str, Any]) ->
|
|
310
|
+
def from_primitives(cls, primitives: dict[str, Any]) -> BaseModel:
|
|
311
311
|
"""
|
|
312
312
|
Create an instance of the class with a dictionary of its primitives.
|
|
313
313
|
|
|
@@ -319,7 +319,7 @@ class BaseModel(ABC):
|
|
|
319
319
|
ValueError: If the `primitives` does not have all the required attributes.
|
|
320
320
|
|
|
321
321
|
Returns:
|
|
322
|
-
|
|
322
|
+
BaseModel: Instance of the class.
|
|
323
323
|
|
|
324
324
|
Example:
|
|
325
325
|
```python
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
ListValueObject module.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
5
7
|
from sys import version_info
|
|
6
8
|
|
|
7
9
|
if version_info >= (3, 12):
|
|
@@ -12,7 +14,7 @@ else:
|
|
|
12
14
|
from collections.abc import Iterator
|
|
13
15
|
from enum import Enum
|
|
14
16
|
from inspect import isclass
|
|
15
|
-
from typing import Any, Generic, NoReturn,
|
|
17
|
+
from typing import Any, Generic, NoReturn, TypeVar, get_args, get_origin
|
|
16
18
|
|
|
17
19
|
from value_object_pattern.decorators import validation
|
|
18
20
|
from value_object_pattern.models import BaseModel, ValueObject
|
|
@@ -350,8 +352,324 @@ class ListValueObject(ValueObject[list[T]], Generic[T]): # noqa: UP046
|
|
|
350
352
|
"""
|
|
351
353
|
return not self._value
|
|
352
354
|
|
|
355
|
+
def add(self, *, item: T) -> ListValueObject[T]:
|
|
356
|
+
"""
|
|
357
|
+
Returns a new ListValueObject with the item added to the end.
|
|
358
|
+
|
|
359
|
+
Args:
|
|
360
|
+
item (T): The item to add.
|
|
361
|
+
|
|
362
|
+
Returns:
|
|
363
|
+
ListValueObject[T]: A new ListValueObject with the item added.
|
|
364
|
+
|
|
365
|
+
Example:
|
|
366
|
+
```python
|
|
367
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
class IntListValueObject(ListValueObject[int]):
|
|
371
|
+
pass
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
sequence = IntListValueObject(value=[1, 2, 3])
|
|
375
|
+
new_sequence = sequence.add(item=4)
|
|
376
|
+
print(new_sequence)
|
|
377
|
+
print(id(sequence) == id(new_sequence))
|
|
378
|
+
# >>> [1, 2, 3, 4]
|
|
379
|
+
# >>> False
|
|
380
|
+
```
|
|
381
|
+
"""
|
|
382
|
+
return self.__class__(value=[*self._value, item])
|
|
383
|
+
|
|
384
|
+
def add_from_primitives(self, *, item: Any) -> ListValueObject[T]:
|
|
385
|
+
"""
|
|
386
|
+
Returns a new ListValueObject with the item created from a primitives added to the end.
|
|
387
|
+
|
|
388
|
+
Args:
|
|
389
|
+
item (Any): The primitives item to convert and add.
|
|
390
|
+
|
|
391
|
+
Returns:
|
|
392
|
+
ListValueObject[T]: A new ListValueObject with the item added.
|
|
393
|
+
|
|
394
|
+
Example:
|
|
395
|
+
```python
|
|
396
|
+
from value_object_pattern.models import ValueObject
|
|
397
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
class Age(ValueObject[int]):
|
|
401
|
+
pass
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
class AgeListValueObject(ListValueObject[Age]):
|
|
405
|
+
pass
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
sequence = AgeListValueObject(value=[Age(value=10), Age(value=20)])
|
|
409
|
+
new_sequence = sequence.add_from_primitives(item=30)
|
|
410
|
+
print(new_sequence)
|
|
411
|
+
print(id(sequence) == id(new_sequence))
|
|
412
|
+
# >>> [10, 20, 30]
|
|
413
|
+
# >>> False
|
|
414
|
+
```
|
|
415
|
+
"""
|
|
416
|
+
item = self._convert_from_primitives(value=item)
|
|
417
|
+
|
|
418
|
+
return self.add(item=item)
|
|
419
|
+
|
|
420
|
+
def extend(self, *, items: list[T]) -> ListValueObject[T]:
|
|
421
|
+
"""
|
|
422
|
+
Returns a new ListValueObject with multiple items added to the end.
|
|
423
|
+
|
|
424
|
+
Args:
|
|
425
|
+
items (list[T]): The items to add.
|
|
426
|
+
|
|
427
|
+
Returns:
|
|
428
|
+
ListValueObject[T]: A new ListValueObject with the items added.
|
|
429
|
+
|
|
430
|
+
Example:
|
|
431
|
+
```python
|
|
432
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
class IntListValueObject(ListValueObject[int]):
|
|
436
|
+
pass
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
sequence = IntListValueObject(value=[1, 2, 3])
|
|
440
|
+
new_sequence = sequence.extend(items=[4, 5, 6])
|
|
441
|
+
print(new_sequence)
|
|
442
|
+
print(id(sequence) == id(new_sequence))
|
|
443
|
+
# >>> [1, 2, 3, 4, 5, 6]
|
|
444
|
+
# >>> False
|
|
445
|
+
```
|
|
446
|
+
"""
|
|
447
|
+
return self.__class__(value=self._value + items)
|
|
448
|
+
|
|
449
|
+
def extend_from_primitives(self, *, items: list[Any]) -> ListValueObject[T]:
|
|
450
|
+
"""
|
|
451
|
+
Returns a new ListValueObject with multiple items created from primitives added to the end.
|
|
452
|
+
|
|
453
|
+
Args:
|
|
454
|
+
items (list[Any]): The primitive items to convert and add.
|
|
455
|
+
|
|
456
|
+
Returns:
|
|
457
|
+
ListValueObject[T]: A new ListValueObject with the items added.
|
|
458
|
+
|
|
459
|
+
Example:
|
|
460
|
+
```python
|
|
461
|
+
from value_object_pattern.models import ValueObject
|
|
462
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
class Age(ValueObject[int]):
|
|
466
|
+
pass
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
class AgeListValueObject(ListValueObject[Age]):
|
|
470
|
+
pass
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
sequence = AgeListValueObject(value=[Age(value=10)])
|
|
474
|
+
new_sequence = sequence.extend_from_primitives(items=[20, 30])
|
|
475
|
+
print(new_sequence)
|
|
476
|
+
print(id(sequence) == id(new_sequence))
|
|
477
|
+
# >>> [10, 20, 30]
|
|
478
|
+
# >>> False
|
|
479
|
+
```
|
|
480
|
+
"""
|
|
481
|
+
items = [self._convert_from_primitives(value=item) for item in items]
|
|
482
|
+
|
|
483
|
+
return self.extend(items=items)
|
|
484
|
+
|
|
485
|
+
def delete(self, *, item: T) -> ListValueObject[T]:
|
|
486
|
+
"""
|
|
487
|
+
Returns a new ListValueObject with the first occurrence of the item deleted.
|
|
488
|
+
|
|
489
|
+
Args:
|
|
490
|
+
item (T): The item to delete.
|
|
491
|
+
|
|
492
|
+
Raises:
|
|
493
|
+
ValueError: If the item is not in the list.
|
|
494
|
+
|
|
495
|
+
Returns:
|
|
496
|
+
ListValueObject[T]: A new ListValueObject with the item deleted.
|
|
497
|
+
|
|
498
|
+
Example:
|
|
499
|
+
```python
|
|
500
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
class IntListValueObject(ListValueObject[int]):
|
|
504
|
+
pass
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
sequence = IntListValueObject(value=[1, 2, 3, 2])
|
|
508
|
+
new_sequence = sequence.delete(item=2)
|
|
509
|
+
print(new_sequence)
|
|
510
|
+
print(id(sequence) == id(new_sequence))
|
|
511
|
+
# >>> [1, 3, 2]
|
|
512
|
+
# >>> False
|
|
513
|
+
```
|
|
514
|
+
"""
|
|
515
|
+
items = self._value.copy()
|
|
516
|
+
|
|
517
|
+
try:
|
|
518
|
+
items.remove(item)
|
|
519
|
+
|
|
520
|
+
except ValueError:
|
|
521
|
+
self._raise_value_not_found_when_deleting(value=item)
|
|
522
|
+
|
|
523
|
+
return self.__class__(value=items)
|
|
524
|
+
|
|
525
|
+
def _raise_value_not_found_when_deleting(self, value: Any) -> NoReturn:
|
|
526
|
+
"""
|
|
527
|
+
Raises a ValueError if the item to be deleted is not found.
|
|
528
|
+
|
|
529
|
+
Args:
|
|
530
|
+
value (Any): The item to be deleted.
|
|
531
|
+
|
|
532
|
+
Raises:
|
|
533
|
+
ValueError: If the item is not found.
|
|
534
|
+
"""
|
|
535
|
+
raise ValueError(f'ListValueObject item <<<{value}>>> not found in thelist when attempting to delete it.')
|
|
536
|
+
|
|
537
|
+
def delete_from_primitives(self, *, item: Any) -> ListValueObject[T]:
|
|
538
|
+
"""
|
|
539
|
+
Returns a new ListValueObject with the first occurrence of an item matching the primitive deleted.
|
|
540
|
+
|
|
541
|
+
Args:
|
|
542
|
+
item (Any): The primitive value to convert and delete.
|
|
543
|
+
|
|
544
|
+
Raises:
|
|
545
|
+
ValueError: If the item is not in the list.
|
|
546
|
+
|
|
547
|
+
Returns:
|
|
548
|
+
ListValueObject[T]: A new ListValueObject with the item deleted.
|
|
549
|
+
|
|
550
|
+
Example:
|
|
551
|
+
```python
|
|
552
|
+
from value_object_pattern.models import ValueObject
|
|
553
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
class Age(ValueObject[int]):
|
|
557
|
+
pass
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
class AgeListValueObject(ListValueObject[Age]):
|
|
561
|
+
pass
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
sequence = AgeListValueObject(value=[Age(value=10), Age(value=20)])
|
|
565
|
+
new_sequence = sequence.delete_from_primitives(item=10)
|
|
566
|
+
print(new_sequence)
|
|
567
|
+
print(id(sequence) == id(new_sequence))
|
|
568
|
+
# >>> [20]
|
|
569
|
+
# >>> False
|
|
570
|
+
```
|
|
571
|
+
"""
|
|
572
|
+
item = self._convert_from_primitives(value=item)
|
|
573
|
+
|
|
574
|
+
return self.delete(item=item)
|
|
575
|
+
|
|
576
|
+
def delete_all(self, *, items: list[T]) -> ListValueObject[T]:
|
|
577
|
+
"""
|
|
578
|
+
Returns a new ListValueObject with all occurrences of the specified items deleted.
|
|
579
|
+
|
|
580
|
+
Args:
|
|
581
|
+
items (list[T]): The items to delete.
|
|
582
|
+
|
|
583
|
+
Raises:
|
|
584
|
+
ValueError: If any item is not in the list.
|
|
585
|
+
|
|
586
|
+
Returns:
|
|
587
|
+
ListValueObject[T]: A new ListValueObject with the items deleted.
|
|
588
|
+
|
|
589
|
+
Example:
|
|
590
|
+
```python
|
|
591
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
class IntListValueObject(ListValueObject[int]):
|
|
595
|
+
pass
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
sequence = IntListValueObject(value=[1, 2, 3, 2, 4])
|
|
599
|
+
new_sequence = sequence.delete_all(items=[2, 4])
|
|
600
|
+
print(new_sequence)
|
|
601
|
+
print(id(sequence) == id(new_sequence))
|
|
602
|
+
# >>> [1, 3]
|
|
603
|
+
# >>> False
|
|
604
|
+
```
|
|
605
|
+
"""
|
|
606
|
+
new_list = [item for item in self._value if item not in items]
|
|
607
|
+
|
|
608
|
+
for item in items:
|
|
609
|
+
if item not in self._value:
|
|
610
|
+
self._raise_value_not_found_when_deleting(value=item)
|
|
611
|
+
|
|
612
|
+
return self.__class__(value=new_list)
|
|
613
|
+
|
|
614
|
+
def delete_all_from_primitives(self, *, items: list[Any]) -> ListValueObject[T]:
|
|
615
|
+
"""
|
|
616
|
+
Returns a new ListValueObject with all occurrences of items matching the primitives deleted.
|
|
617
|
+
|
|
618
|
+
Args:
|
|
619
|
+
items (list[Any]): The primitive values to convert and delete.
|
|
620
|
+
|
|
621
|
+
Raises:
|
|
622
|
+
ValueError: If any item is not in the list.
|
|
623
|
+
|
|
624
|
+
Returns:
|
|
625
|
+
ListValueObject[T]: A new ListValueObject with the items deleted.
|
|
626
|
+
|
|
627
|
+
Example:
|
|
628
|
+
```python
|
|
629
|
+
from value_object_pattern.models.collections import ListValueObject
|
|
630
|
+
from value_object_pattern.models import ValueObject
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
class Age(ValueObject[int]):
|
|
634
|
+
pass
|
|
635
|
+
|
|
636
|
+
|
|
637
|
+
class AgeListValueObject(ListValueObject[Age]):
|
|
638
|
+
pass
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
sequence = AgeListValueObject(value=[Age(value=10), Age(value=20), Age(value=30)])
|
|
642
|
+
new_sequence = sequence.delete_all_from_primitives(items=[10, 30])
|
|
643
|
+
print(new_sequence)
|
|
644
|
+
print(id(sequence) == id(new_sequence))
|
|
645
|
+
# >>> [20]
|
|
646
|
+
# >>> False
|
|
647
|
+
```
|
|
648
|
+
"""
|
|
649
|
+
items = [self._convert_from_primitives(value=item) for item in items]
|
|
650
|
+
|
|
651
|
+
return self.delete_all(items=items)
|
|
652
|
+
|
|
653
|
+
def _convert_from_primitives(self, *, value: Any) -> T:
|
|
654
|
+
"""
|
|
655
|
+
Converts a primitive value to the appropriate type T.
|
|
656
|
+
|
|
657
|
+
Args:
|
|
658
|
+
value (Any): The primitive value to convert.
|
|
659
|
+
|
|
660
|
+
Returns:
|
|
661
|
+
T: The converted value.
|
|
662
|
+
"""
|
|
663
|
+
if hasattr(self._type, 'from_primitives'):
|
|
664
|
+
return self._type.from_primitives(value) # type: ignore[no-any-return]
|
|
665
|
+
|
|
666
|
+
if hasattr(self._type, 'value'):
|
|
667
|
+
return self._type(value=value) # type: ignore[no-any-return]
|
|
668
|
+
|
|
669
|
+
return value # type: ignore[no-any-return]
|
|
670
|
+
|
|
353
671
|
@classmethod
|
|
354
|
-
def from_primitives(cls, value: list[Any]) ->
|
|
672
|
+
def from_primitives(cls, value: list[Any]) -> ListValueObject[T]:
|
|
355
673
|
"""
|
|
356
674
|
Creates a ListValueObject from a list of primitives.
|
|
357
675
|
|
|
@@ -359,18 +677,18 @@ class ListValueObject(ValueObject[list[T]], Generic[T]): # noqa: UP046
|
|
|
359
677
|
value (list[Any]): The list of primitives.
|
|
360
678
|
|
|
361
679
|
Returns:
|
|
362
|
-
|
|
680
|
+
ListValueObject[T]: The created ListValueObject.
|
|
363
681
|
"""
|
|
364
682
|
items: list[Any] = []
|
|
365
683
|
|
|
366
|
-
for
|
|
684
|
+
for item in value:
|
|
367
685
|
if hasattr(cls._type, 'from_primitives'):
|
|
368
|
-
items.append(cls._type.from_primitives(
|
|
686
|
+
items.append(cls._type.from_primitives(item)) # BaseModel
|
|
369
687
|
|
|
370
688
|
elif hasattr(cls._type, 'value'):
|
|
371
|
-
items.append(cls._type(value=
|
|
689
|
+
items.append(cls._type(value=item)) # ValueObject
|
|
372
690
|
|
|
373
691
|
else:
|
|
374
|
-
items.append(
|
|
692
|
+
items.append(item)
|
|
375
693
|
|
|
376
694
|
return cls(value=items)
|
|
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.15.1 → value_object_pattern-1.16.0}/value_object_pattern/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{value_object_pattern-1.15.1 → value_object_pattern-1.16.0}/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
|