Support for GeneralizedTime and UTCTime
authorKim Grasman <kim.grasman@gmail.com>
Tue, 27 Aug 2013 19:14:31 +0000 (21:14 +0200)
committerKim Grasman <kim.grasman@gmail.com>
Tue, 27 Aug 2013 19:14:31 +0000 (21:14 +0200)
Based on patch by Maurizio Papini.

asn1ate/parser.py
asn1ate/pyasn1gen.py
testdata/time_types.asn [new file with mode: 0644]

index f5db90f..c4adf16 100644 (file)
@@ -149,6 +149,10 @@ def _build_asn1_grammar():
     VideotexString = Keyword('VideotexString')
     VisibleString = Keyword('VisibleString')
 
+    # Useful types
+    GeneralizedTime = Keyword('GeneralizedTime')
+    UTCTime = Keyword('UTCTime')
+
     # Literals
     number = Word(nums)
     signed_number = Combine(Optional('-') + number)  # todo: consider defined values from 18.1
@@ -257,6 +261,7 @@ def _build_asn1_grammar():
                                       T61String | UniversalString | \
                                       UTF8String | VideotexString | VisibleString
     characterstring_type = restricted_characterstring_type | unrestricted_characterstring_type
+    useful_type = GeneralizedTime | UTCTime  # TODO: ObjectDescriptor
 
     # todo: consider other builtins from 16.2
     defined_type = Unique(typereference)  # todo: consider other defined types from 13.1
@@ -267,7 +272,7 @@ def _build_asn1_grammar():
     value_list_type = restricted_integer_type | enumerated_type
 
     builtin_type = value_list_type | tagged_type | simple_type | choice_type | sequence_type | set_type | sequenceof_type | setof_type | bitstring_type
-    referenced_type = Unique(defined_type)  # todo: consider other ref:d types from 16.3
+    referenced_type = defined_type | useful_type  # todo: consider other ref:d types from 16.3
 
     type_ << ((builtin_type | referenced_type) + Optional(constraint))
 
index df8c24f..e700b11 100644 (file)
@@ -91,7 +91,7 @@ class Pyasn1Backend(object):
         }
 
     def generate_code(self):
-        self.writer.write_line('from pyasn1.type import univ, char, namedtype, namedval, tag, constraint')
+        self.writer.write_line('from pyasn1.type import univ, char, namedtype, namedval, tag, constraint, useful')
         self.writer.write_blanks(2)
 
         # TODO: Only generate _OID if sema_module
@@ -378,7 +378,9 @@ _ASN1_BUILTIN_TYPES = {
     'SET OF': 'univ.SetOf',
     'UTF8String': 'char.UTF8String',
     'GeneralString': 'char.GeneralString',
-    'OBJECT IDENTIFIER': 'univ.ObjectIdentifier'
+    'OBJECT IDENTIFIER': 'univ.ObjectIdentifier',
+    'GeneralizedTime': 'useful.GeneralizedTime',
+    'UTCTime': 'useful.UTCTime',
 }
 
 
diff --git a/testdata/time_types.asn b/testdata/time_types.asn
new file mode 100644 (file)
index 0000000..52a85cb
--- /dev/null
@@ -0,0 +1,5 @@
+TEST DEFINITIONS ::=
+BEGIN
+  GTime ::= GeneralizedTime
+  UTime ::= UTCTime
+END