aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2019-09-09 16:32:59 -0500
committerPaul Kehrer <paul.l.kehrer@gmail.com>2019-09-10 05:32:59 +0800
commit7b2b3a65800b7c004399da5b3b6f431aa30946cc (patch)
tree2c1fc24d7383b0f03b302eab91a532d057079cc6 /src
parent3bf44b7c847cc5983834355af84b19e96c535652 (diff)
downloadcryptography-7b2b3a65800b7c004399da5b3b6f431aa30946cc.tar.gz
cryptography-7b2b3a65800b7c004399da5b3b6f431aa30946cc.tar.bz2
cryptography-7b2b3a65800b7c004399da5b3b6f431aa30946cc.zip
Simplify implementing sequence methods (#4987)
* Simplify implementing sequence methods * flake8
Diffstat (limited to 'src')
-rw-r--r--src/cryptography/x509/extensions.py125
1 files changed, 31 insertions, 94 deletions
diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py
index 5bef9945..f60075a8 100644
--- a/src/cryptography/x509/extensions.py
+++ b/src/cryptography/x509/extensions.py
@@ -70,6 +70,19 @@ def _key_identifier_from_public_key(public_key):
return hashlib.sha1(data).digest()
+def _make_sequence_methods(field_name):
+ def len_method(self):
+ return len(getattr(self, field_name))
+
+ def iter_method(self):
+ return iter(getattr(self, field_name))
+
+ def getitem_method(self, idx):
+ return getattr(self, field_name)[idx]
+
+ return len_method, iter_method, getitem_method
+
+
class DuplicateExtension(Exception):
def __init__(self, msg, oid):
super(DuplicateExtension, self).__init__(msg)
@@ -118,14 +131,7 @@ class Extensions(object):
"No {} extension was found".format(extclass), extclass.oid
)
- def __iter__(self):
- return iter(self._extensions)
-
- def __len__(self):
- return len(self._extensions)
-
- def __getitem__(self, idx):
- return self._extensions[idx]
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_extensions")
def __repr__(self):
return (
@@ -307,11 +313,7 @@ class AuthorityInformationAccess(object):
self._descriptions = descriptions
- def __iter__(self):
- return iter(self._descriptions)
-
- def __len__(self):
- return len(self._descriptions)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_descriptions")
def __repr__(self):
return "<AuthorityInformationAccess({})>".format(self._descriptions)
@@ -325,9 +327,6 @@ class AuthorityInformationAccess(object):
def __ne__(self, other):
return not self == other
- def __getitem__(self, idx):
- return self._descriptions[idx]
-
def __hash__(self):
return hash(tuple(self._descriptions))
@@ -454,11 +453,9 @@ class CRLDistributionPoints(object):
self._distribution_points = distribution_points
- def __iter__(self):
- return iter(self._distribution_points)
-
- def __len__(self):
- return len(self._distribution_points)
+ __len__, __iter__, __getitem__ = _make_sequence_methods(
+ "_distribution_points"
+ )
def __repr__(self):
return "<CRLDistributionPoints({})>".format(self._distribution_points)
@@ -472,9 +469,6 @@ class CRLDistributionPoints(object):
def __ne__(self, other):
return not self == other
- def __getitem__(self, idx):
- return self._distribution_points[idx]
-
def __hash__(self):
return hash(tuple(self._distribution_points))
@@ -495,11 +489,9 @@ class FreshestCRL(object):
self._distribution_points = distribution_points
- def __iter__(self):
- return iter(self._distribution_points)
-
- def __len__(self):
- return len(self._distribution_points)
+ __len__, __iter__, __getitem__ = _make_sequence_methods(
+ "_distribution_points"
+ )
def __repr__(self):
return "<FreshestCRL({})>".format(self._distribution_points)
@@ -513,9 +505,6 @@ class FreshestCRL(object):
def __ne__(self, other):
return not self == other
- def __getitem__(self, idx):
- return self._distribution_points[idx]
-
def __hash__(self):
return hash(tuple(self._distribution_points))
@@ -701,11 +690,7 @@ class CertificatePolicies(object):
self._policies = policies
- def __iter__(self):
- return iter(self._policies)
-
- def __len__(self):
- return len(self._policies)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_policies")
def __repr__(self):
return "<CertificatePolicies({})>".format(self._policies)
@@ -719,9 +704,6 @@ class CertificatePolicies(object):
def __ne__(self, other):
return not self == other
- def __getitem__(self, idx):
- return self._policies[idx]
-
def __hash__(self):
return hash(tuple(self._policies))
@@ -862,11 +844,7 @@ class ExtendedKeyUsage(object):
self._usages = usages
- def __iter__(self):
- return iter(self._usages)
-
- def __len__(self):
- return len(self._usages)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_usages")
def __repr__(self):
return "<ExtendedKeyUsage({})>".format(self._usages)
@@ -941,11 +919,7 @@ class TLSFeature(object):
self._features = features
- def __iter__(self):
- return iter(self._features)
-
- def __len__(self):
- return len(self._features)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_features")
def __repr__(self):
return "<TLSFeature(features={0._features})>".format(self)
@@ -956,9 +930,6 @@ class TLSFeature(object):
return self._features == other._features
- def __getitem__(self, idx):
- return self._features[idx]
-
def __ne__(self, other):
return not self == other
@@ -1237,12 +1208,7 @@ class GeneralNames(object):
)
self._general_names = general_names
-
- def __iter__(self):
- return iter(self._general_names)
-
- def __len__(self):
- return len(self._general_names)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names")
def get_values_for_type(self, type):
# Return the value of each GeneralName, except for OtherName instances
@@ -1265,9 +1231,6 @@ class GeneralNames(object):
def __ne__(self, other):
return not self == other
- def __getitem__(self, idx):
- return self._general_names[idx]
-
def __hash__(self):
return hash(tuple(self._general_names))
@@ -1279,11 +1242,7 @@ class SubjectAlternativeName(object):
def __init__(self, general_names):
self._general_names = GeneralNames(general_names)
- def __iter__(self):
- return iter(self._general_names)
-
- def __len__(self):
- return len(self._general_names)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names")
def get_values_for_type(self, type):
return self._general_names.get_values_for_type(type)
@@ -1297,9 +1256,6 @@ class SubjectAlternativeName(object):
return self._general_names == other._general_names
- def __getitem__(self, idx):
- return self._general_names[idx]
-
def __ne__(self, other):
return not self == other
@@ -1314,11 +1270,7 @@ class IssuerAlternativeName(object):
def __init__(self, general_names):
self._general_names = GeneralNames(general_names)
- def __iter__(self):
- return iter(self._general_names)
-
- def __len__(self):
- return len(self._general_names)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names")
def get_values_for_type(self, type):
return self._general_names.get_values_for_type(type)
@@ -1335,9 +1287,6 @@ class IssuerAlternativeName(object):
def __ne__(self, other):
return not self == other
- def __getitem__(self, idx):
- return self._general_names[idx]
-
def __hash__(self):
return hash(self._general_names)
@@ -1349,11 +1298,7 @@ class CertificateIssuer(object):
def __init__(self, general_names):
self._general_names = GeneralNames(general_names)
- def __iter__(self):
- return iter(self._general_names)
-
- def __len__(self):
- return len(self._general_names)
+ __len__, __iter__, __getitem__ = _make_sequence_methods("_general_names")
def get_values_for_type(self, type):
return self._general_names.get_values_for_type(type)
@@ -1370,9 +1315,6 @@ class CertificateIssuer(object):
def __ne__(self, other):
return not self == other
- def __getitem__(self, idx):
- return self._general_names[idx]
-
def __hash__(self):
return hash(self._general_names)
@@ -1451,14 +1393,9 @@ class PrecertificateSignedCertificateTimestamps(object):
)
self._signed_certificate_timestamps = signed_certificate_timestamps
- def __iter__(self):
- return iter(self._signed_certificate_timestamps)
-
- def __len__(self):
- return len(self._signed_certificate_timestamps)
-
- def __getitem__(self, idx):
- return self._signed_certificate_timestamps[idx]
+ __len__, __iter__, __getitem__ = _make_sequence_methods(
+ "_signed_certificate_timestamps"
+ )
def __repr__(self):
return (