civics-cdf-validator 1.55.dev3__py3-none-any.whl → 1.56__py3-none-any.whl

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.
@@ -409,7 +409,7 @@ class PercentSum(base.BaseRule):
409
409
 
410
410
 
411
411
  class EmptyText(base.BaseRule):
412
- """Check that Text elements are not strictly whitespace."""
412
+ """Check that Text elements are not empty or strictly whitespace."""
413
413
 
414
414
  def elements(self):
415
415
  return ["Text"]
@@ -421,6 +421,38 @@ class EmptyText(base.BaseRule):
421
421
  raise loggers.ElectionError.from_message("Text is empty", element)
422
422
 
423
423
 
424
+ class EmptyString(base.BaseRule):
425
+ """Check that string fields are not empty or strictly whitespace."""
426
+
427
+ def elements(self):
428
+ """Returns all elements of type xs:string from the schema."""
429
+ string_elements = []
430
+ for _, element in etree.iterwalk(self.schema_tree):
431
+ tag = self.strip_schema_ns(element)
432
+ if (
433
+ tag
434
+ and tag == "element"
435
+ and element.get("type") == "xs:string"
436
+ and element.get("name") is not None
437
+ ):
438
+ string_elements.append(element.get("name"))
439
+ return string_elements
440
+
441
+ # pylint: disable=g-explicit-length-test
442
+ def check(self, element):
443
+ if element.text is None or not element.text.strip() and not len(element):
444
+ # TODO(b/462777279): Remove this once once feeds are no longer setting
445
+ # this to an empty string.
446
+ if element.tag == "IssuerAbbreviation":
447
+ raise loggers.ElectionWarning.from_message(
448
+ "String field is empty", [element]
449
+ )
450
+ else:
451
+ raise loggers.ElectionError.from_message(
452
+ "String field is empty", [element]
453
+ )
454
+
455
+
424
456
  class DuplicateID(base.TreeRule):
425
457
  """Check that the file does not contain duplicate object IDs."""
426
458
 
@@ -4723,6 +4755,7 @@ COMMON_RULES = (
4723
4755
  DuplicateGpUnits,
4724
4756
  DuplicateID,
4725
4757
  DuplicatedGpUnitOcdId,
4758
+ EmptyString,
4726
4759
  EmptyText,
4727
4760
  Encoding,
4728
4761
  ExecutiveOfficeShouldNotHaveGovernmentBody,
@@ -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.55.dev3'
8
+ __version__ = '1.56'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: civics_cdf_validator
3
- Version: 1.55.dev3
3
+ Version: 1.56
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
@@ -0,0 +1,15 @@
1
+ civics_cdf_validator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ civics_cdf_validator/base.py,sha256=5zntjAdAA-bdwYOOStFgUle9LGX_ccelS--thMhUG9A,16954
3
+ civics_cdf_validator/gpunit_rules.py,sha256=Cg-qlOeVKTCQ5qUKYSxbVrrh3tdLt1X5Eg-7uyyR_SY,9487
4
+ civics_cdf_validator/loggers.py,sha256=ZfWFd9yskcd2-qb83EPz7eqa1iGO8BRFMtDZeE1hofA,6921
5
+ civics_cdf_validator/office_utils.py,sha256=aFxcFQZF2oBn0gPXt_kv1LxHGvwzABScT8X5yaYtVLw,2705
6
+ civics_cdf_validator/rules.py,sha256=UDqNKdnR6TbfFgMxMz0nNb0rf3qfcliCeGPVtgitumI,164263
7
+ civics_cdf_validator/stats.py,sha256=YNqv3Khkt_hJxCIunFBRSl23oXqu5gNjCmWMHFbAcSU,3819
8
+ civics_cdf_validator/validator.py,sha256=2nwlFfQ9AmpTaO5n5ekaO845Rm0JPjNF-Il6FJW_50k,12678
9
+ civics_cdf_validator/version.py,sha256=bLN2dIjTqfHY9K_CU1fuTbP4uXEX9Dw6iIWwo1-Lp68,183
10
+ civics_cdf_validator-1.56.dist-info/licenses/LICENSE-2.0.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
11
+ civics_cdf_validator-1.56.dist-info/METADATA,sha256=T7uPZUPEm_jZFHmZzQeXyZNEPxJOmAtnaBS-D81h13I,1213
12
+ civics_cdf_validator-1.56.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
+ civics_cdf_validator-1.56.dist-info/entry_points.txt,sha256=QibgvtMOocwDi7fQ1emgMJ2lIlI41sW0__KIQdnVn90,77
14
+ civics_cdf_validator-1.56.dist-info/top_level.txt,sha256=PYT5Eclxbop5o6DJIcgs4IeU6Ds5jqyftjoFbgkkJYo,21
15
+ civics_cdf_validator-1.56.dist-info/RECORD,,
@@ -1,15 +0,0 @@
1
- civics_cdf_validator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- civics_cdf_validator/base.py,sha256=5zntjAdAA-bdwYOOStFgUle9LGX_ccelS--thMhUG9A,16954
3
- civics_cdf_validator/gpunit_rules.py,sha256=Cg-qlOeVKTCQ5qUKYSxbVrrh3tdLt1X5Eg-7uyyR_SY,9487
4
- civics_cdf_validator/loggers.py,sha256=ZfWFd9yskcd2-qb83EPz7eqa1iGO8BRFMtDZeE1hofA,6921
5
- civics_cdf_validator/office_utils.py,sha256=aFxcFQZF2oBn0gPXt_kv1LxHGvwzABScT8X5yaYtVLw,2705
6
- civics_cdf_validator/rules.py,sha256=JFABOAmX6l5rWoqKd5edc3W1_X2n9ZBhPifSgfBZu54,163145
7
- civics_cdf_validator/stats.py,sha256=YNqv3Khkt_hJxCIunFBRSl23oXqu5gNjCmWMHFbAcSU,3819
8
- civics_cdf_validator/validator.py,sha256=2nwlFfQ9AmpTaO5n5ekaO845Rm0JPjNF-Il6FJW_50k,12678
9
- civics_cdf_validator/version.py,sha256=z9AAIvOmwiEcidtwGtXdZrfZlJpUY9YFrbtgxslQMeg,188
10
- civics_cdf_validator-1.55.dev3.dist-info/licenses/LICENSE-2.0.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
11
- civics_cdf_validator-1.55.dev3.dist-info/METADATA,sha256=UhI39vuXQR0dwQkRABH2m38DuK75QHQV7kvlhhQpaKc,1218
12
- civics_cdf_validator-1.55.dev3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
13
- civics_cdf_validator-1.55.dev3.dist-info/entry_points.txt,sha256=QibgvtMOocwDi7fQ1emgMJ2lIlI41sW0__KIQdnVn90,77
14
- civics_cdf_validator-1.55.dev3.dist-info/top_level.txt,sha256=PYT5Eclxbop5o6DJIcgs4IeU6Ds5jqyftjoFbgkkJYo,21
15
- civics_cdf_validator-1.55.dev3.dist-info/RECORD,,