code: def spec(self, field_name):
          
  
          if not isinstance(field_name, str_cls):
              raise TypeError(unwrap(
                  '''
                  field_name must be a unicode string, not %s
                  ''',
                  type_name(field_name)
              ))
  
          if self._fields is None:
              raise ValueError(unwrap(
                  '''
                  Unable to retrieve spec for field %s in the class %s because
                  _fields has not been set
                  ''',
                  repr(field_name),
                  type_name(self)
              ))
  
          index = self._field_map[field_name]
          info = self._determine_spec(index)
  
          return info[2]
docs: Determines the spec to use for the field specified. Depending on how
          the spec is determined (_oid_pair or _spec_callbacks), it may be
          necessary to set preceding field values before calling this. Usually
          specs, if dynamic, are controlled by a preceding ObjectIdentifier
          field.
  
          :param field_name:
              A unicode string of the field name to get the spec for
  
          :return:
              A child class of asn1crypto.core.Asn1Value that the field must be
              encoded using