civics-cdf-validator 1.61.dev4__tar.gz → 1.61.dev5__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.61.dev4/civics_cdf_validator.egg-info → civics_cdf_validator-1.61.dev5}/PKG-INFO +1 -1
  2. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5/civics_cdf_validator.egg-info}/PKG-INFO +1 -1
  3. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/rules.py +12 -5
  4. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/version.py +1 -1
  5. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/CONTRIBUTING.md +0 -0
  6. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/LICENSE-2.0.txt +0 -0
  7. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/MANIFEST.in +0 -0
  8. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/README.md +0 -0
  9. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/__init__.py +0 -0
  10. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/base.py +0 -0
  11. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/civics_cdf_validator.egg-info/SOURCES.txt +0 -0
  12. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/civics_cdf_validator.egg-info/dependency_links.txt +0 -0
  13. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/civics_cdf_validator.egg-info/entry_points.txt +0 -0
  14. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/civics_cdf_validator.egg-info/requires.txt +0 -0
  15. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/civics_cdf_validator.egg-info/top_level.txt +0 -0
  16. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/gpunit_rules.py +0 -0
  17. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/loggers.py +0 -0
  18. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/office_utils.py +0 -0
  19. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/setup.cfg +0 -0
  20. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/setup.py +0 -0
  21. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/stats.py +0 -0
  22. {civics_cdf_validator-1.61.dev4 → civics_cdf_validator-1.61.dev5}/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: civics_cdf_validator
3
- Version: 1.61.dev4
3
+ Version: 1.61.dev5
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.61.dev4
3
+ Version: 1.61.dev5
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
@@ -141,6 +141,13 @@ _WINNER_POST_ELECTION_STATUSES = frozenset([
141
141
  ])
142
142
 
143
143
 
144
+ def _is_xml_true(element):
145
+ return (
146
+ element_has_text(element)
147
+ and element.text.strip().lower() in _XML_TRUE_VALUES
148
+ )
149
+
150
+
144
151
  def _get_office_roles(element, is_post_office_split_feed=False):
145
152
  if is_post_office_split_feed:
146
153
  return [element.text for element in element.findall("Role")]
@@ -4716,6 +4723,10 @@ class FeedInactiveDateIsLatestDate(base.BaseRule):
4716
4723
  return ["Feed"]
4717
4724
 
4718
4725
  def check(self, element):
4726
+ # Skip this rule for test feeds.
4727
+ if _is_xml_true(element.find("IsTest")):
4728
+ return
4729
+
4719
4730
  if element_has_text(element.find("FeedInactiveDate")):
4720
4731
  feed_inactive_date = base.PartialDate.init_partial_date(
4721
4732
  element.find("FeedInactiveDate").text
@@ -5404,11 +5415,7 @@ class ValidateIncludeInAggregationBallotSelections(base.BaseRule):
5404
5415
 
5405
5416
  included_selections = []
5406
5417
  for selection in all_selections:
5407
- included_in_aggregation_element = selection.find("IncludedInAggregation")
5408
- if (
5409
- element_has_text(included_in_aggregation_element)
5410
- and included_in_aggregation_element.text in _XML_TRUE_VALUES
5411
- ):
5418
+ if _is_xml_true(selection.find("IncludedInAggregation")):
5412
5419
  included_selections.append(selection)
5413
5420
  if not included_selections:
5414
5421
  return
@@ -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.61.dev4'
8
+ __version__ = '1.61.dev5'