civics-cdf-validator 1.50.dev1__tar.gz → 1.51.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.50.dev1/civics_cdf_validator.egg-info → civics_cdf_validator-1.51.dev0}/PKG-INFO +1 -1
  2. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0/civics_cdf_validator.egg-info}/PKG-INFO +1 -1
  3. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/rules.py +18 -7
  4. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/version.py +1 -1
  5. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/CONTRIBUTING.md +0 -0
  6. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/LICENSE-2.0.txt +0 -0
  7. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/MANIFEST.in +0 -0
  8. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/README.md +0 -0
  9. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/__init__.py +0 -0
  10. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/base.py +0 -0
  11. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/civics_cdf_validator.egg-info/SOURCES.txt +0 -0
  12. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/civics_cdf_validator.egg-info/dependency_links.txt +0 -0
  13. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/civics_cdf_validator.egg-info/entry_points.txt +0 -0
  14. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/civics_cdf_validator.egg-info/requires.txt +0 -0
  15. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/civics_cdf_validator.egg-info/top_level.txt +0 -0
  16. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/gpunit_rules.py +0 -0
  17. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/loggers.py +0 -0
  18. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/office_utils.py +0 -0
  19. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/setup.cfg +0 -0
  20. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/setup.py +0 -0
  21. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/stats.py +0 -0
  22. {civics_cdf_validator-1.50.dev1 → civics_cdf_validator-1.51.dev0}/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: civics_cdf_validator
3
- Version: 1.50.dev1
3
+ Version: 1.51.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.4
2
2
  Name: civics_cdf_validator
3
- Version: 1.50.dev1
3
+ Version: 1.51.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
@@ -4322,6 +4322,8 @@ class OfficeHolderSubFeedDatesAreSequential(base.DateRule):
4322
4322
  class FeedInactiveDateIsLatestDate(base.BaseRule):
4323
4323
  """Partner feeds should have a FeedInactiveDate that occurs after the FullDeliveryDate and EndDate."""
4324
4324
 
4325
+ ignorable_election_date_statuses = frozenset(["canceled"])
4326
+
4325
4327
  def elements(self):
4326
4328
  return ["Feed"]
4327
4329
 
@@ -4339,13 +4341,22 @@ class FeedInactiveDateIsLatestDate(base.BaseRule):
4339
4341
  "FeedInactiveDate is older than FullDeliveryDate",
4340
4342
  [element],
4341
4343
  )
4342
- for end_date_element in element.iter("EndDate"):
4343
- end_date = base.PartialDate.init_partial_date(end_date_element.text)
4344
- if feed_inactive_date < end_date:
4345
- raise loggers.ElectionError.from_message(
4346
- "FeedInactiveDate is older than EndDate",
4347
- [element],
4348
- )
4344
+ for election_event_element in element.iter("ElectionEvent"):
4345
+ if element_has_text(
4346
+ election_event_element.find("ElectionDateStatus")
4347
+ ) and (
4348
+ election_event_element.find("ElectionDateStatus").text
4349
+ in self.ignorable_election_date_statuses
4350
+ ):
4351
+ continue
4352
+ if element_has_text(election_event_element.find("EndDate")):
4353
+ end_date_element = election_event_element.find("EndDate")
4354
+ end_date = base.PartialDate.init_partial_date(end_date_element.text)
4355
+ if feed_inactive_date < end_date:
4356
+ raise loggers.ElectionError.from_message(
4357
+ "FeedInactiveDate is older than EndDate",
4358
+ [element],
4359
+ )
4349
4360
 
4350
4361
 
4351
4362
  class FeedHasValidCountryCode(base.BaseRule):
@@ -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.50.dev1'
8
+ __version__ = '1.51.dev0'