]> Cypherpunks.ru repositories - pyderasn.git/blobdiff - pyderasn.py
More correct phrase about offset property
[pyderasn.git] / pyderasn.py
index 4ae1eb0814182f065fa045d1c89b7a9f6c11e9ba..833e785206f26a4f84ec209a793c8c797fba51cc 100755 (executable)
@@ -177,7 +177,7 @@ by specifying ``leavemm=True`` argument.
 When object is decoded, ``decoded`` property is true and you can safely
 use following properties:
 
-* ``offset`` -- position from initial offset where object's tag is started
+* ``offset`` -- position including initial offset where object's tag starts
 * ``tlen`` -- length of object's tag
 * ``llen`` -- length of object's length value
 * ``vlen`` -- length of object's value
@@ -318,6 +318,7 @@ from collections import OrderedDict
 from datetime import datetime
 from math import ceil
 
+from six import add_metaclass
 from six import binary_type
 from six import byte2int
 from six import indexbytes
@@ -655,6 +656,13 @@ def len_decode(data):
 # Base class
 ########################################################################
 
+class AutoAddSlots(type):
+    def __new__(cls, name, bases, _dict):
+        _dict["__slots__"] = _dict.get("__slots__", ())
+        return type.__new__(cls, name, bases, _dict)
+
+
+@add_metaclass(AutoAddSlots)
 class Obj(object):
     """Common ASN.1 object class
 
@@ -709,7 +717,7 @@ class Obj(object):
     def decoded(self):
         """Is object decoded?
         """
-        return self.llen > 0
+        return (self.llen + self.vlen) > 0
 
     def copy(self):  # pragma: no cover
         """Make a copy of object, safe to be mutated
@@ -727,6 +735,18 @@ class Obj(object):
     def __str__(self):  # pragma: no cover
         return self.__bytes__() if PY2 else self.__unicode__()
 
+    def __ne__(self, their):
+        return not(self == their)
+
+    def __gt__(self, their):  # pragma: no cover
+        return not(self < their)
+
+    def __le__(self, their):  # pragma: no cover
+        return (self == their) or (self < their)
+
+    def __ge__(self, their):  # pragma: no cover
+        return (self == their) or (self > their)
+
     def _encode(self):  # pragma: no cover
         raise NotImplementedError()
 
@@ -1319,10 +1339,7 @@ class Integer(Obj):
         )
 
     def __lt__(self, their):
-        return self._value < their
-
-    def __gt__(self, their):
-        return self._value > their
+        return self._value < their._value
 
     @property
     def named(self):
@@ -1938,6 +1955,9 @@ class OctetString(Obj):
             self._expl == their._expl
         )
 
+    def __lt__(self, their):
+        return self._value < their._value
+
     def __call__(
             self,
             value=None,
@@ -2305,10 +2325,7 @@ class ObjectIdentifier(Obj):
         )
 
     def __lt__(self, their):
-        return self._value < their
-
-    def __gt__(self, their):
-        return self._value > their
+        return self._value < their._value
 
     def __call__(
             self,