civics-cdf-validator 1.47.dev11__tar.gz → 1.48.dev0__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 (22) hide show
  1. {civics_cdf_validator-1.47.dev11/civics_cdf_validator.egg-info → civics_cdf_validator-1.48.dev0}/PKG-INFO +1 -1
  2. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0/civics_cdf_validator.egg-info}/PKG-INFO +1 -1
  3. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/rules.py +30 -0
  4. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/version.py +1 -1
  5. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/CONTRIBUTING.md +0 -0
  6. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/LICENSE-2.0.txt +0 -0
  7. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/MANIFEST.in +0 -0
  8. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/README.md +0 -0
  9. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/__init__.py +0 -0
  10. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/base.py +0 -0
  11. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/civics_cdf_validator.egg-info/SOURCES.txt +0 -0
  12. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/civics_cdf_validator.egg-info/dependency_links.txt +0 -0
  13. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/civics_cdf_validator.egg-info/entry_points.txt +0 -0
  14. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/civics_cdf_validator.egg-info/requires.txt +0 -0
  15. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/civics_cdf_validator.egg-info/top_level.txt +0 -0
  16. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/gpunit_rules.py +0 -0
  17. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/loggers.py +0 -0
  18. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/office_utils.py +0 -0
  19. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/setup.cfg +0 -0
  20. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/setup.py +0 -0
  21. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/stats.py +0 -0
  22. {civics_cdf_validator-1.47.dev11 → civics_cdf_validator-1.48.dev0}/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: civics_cdf_validator
3
- Version: 1.47.dev11
3
+ Version: 1.48.dev0
4
4
  Summary: Checks if an election feed follows best practices
5
5
  Home-page: https://github.com/google/civics_cdf_validator
6
6
  Author: Google Civics
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: civics_cdf_validator
3
- Version: 1.47.dev11
3
+ Version: 1.48.dev0
4
4
  Summary: Checks if an election feed follows best practices
5
5
  Home-page: https://github.com/google/civics_cdf_validator
6
6
  Author: Google Civics
@@ -4106,6 +4106,35 @@ class OfficeHolderSubFeedDatesAreSequential(base.DateRule):
4106
4106
  )
4107
4107
 
4108
4108
 
4109
+ class FeedInactiveDateIsLatestDate(base.BaseRule):
4110
+ """Partner feeds should have a FeedInactiveDate that occurs after the FullDeliveryDate and EndDate."""
4111
+
4112
+ def elements(self):
4113
+ return ["Feed"]
4114
+
4115
+ def check(self, element):
4116
+ if element_has_text(element.find("FeedInactiveDate")):
4117
+ feed_inactive_date = base.PartialDate.init_partial_date(
4118
+ element.find("FeedInactiveDate").text
4119
+ )
4120
+ for full_delivery_date_element in element.iter("FullDeliveryDate"):
4121
+ full_delivery_date = base.PartialDate.init_partial_date(
4122
+ full_delivery_date_element.text
4123
+ )
4124
+ if feed_inactive_date.is_older_than(full_delivery_date) > 0:
4125
+ raise loggers.ElectionError.from_message(
4126
+ "FeedInactiveDate is older than FullDeliveryDate",
4127
+ [element],
4128
+ )
4129
+ for end_date_element in element.iter("EndDate"):
4130
+ end_date = base.PartialDate.init_partial_date(end_date_element.text)
4131
+ if feed_inactive_date.is_older_than(end_date) > 0:
4132
+ raise loggers.ElectionError.from_message(
4133
+ "FeedInactiveDate is older than EndDate",
4134
+ [element],
4135
+ )
4136
+
4137
+
4109
4138
  class FeedHasValidCountryCode(base.BaseRule):
4110
4139
  """Feeds should have valid country code."""
4111
4140
 
@@ -4470,6 +4499,7 @@ METADATA_RULES = (
4470
4499
  Encoding,
4471
4500
  FeedHasValidCountryCode,
4472
4501
  FeedIdsAreUnique,
4502
+ FeedInactiveDateIsLatestDate,
4473
4503
  FeedInactiveDateSetForNonEvergreenFeed,
4474
4504
  FeedTypeHasValidFeedLongevity,
4475
4505
  NoSourceDirPathBeforeInitialDeliveryDate,
@@ -5,4 +5,4 @@ No dependencies should be added to this module.
5
5
  See https://packaging.python.org/guides/single-sourcing-package-version/
6
6
  """
7
7
 
8
- __version__ = '1.47.dev11'
8
+ __version__ = '1.48.dev0'