value-object-pattern 1.31.1__tar.gz → 1.33.0__tar.gz

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