Esempio n. 1
0
 def __str__(self):
     consumer = None
     if not isinstance(self.data, DataBuilder):
         consumer = self.data
         super(AtomicInstance, self).__setattr__('_data', DataBuilder())
     try:
         value = str(self._packer.pack(self, self.data))
     except Exception as err:
         code.print_helpful_traceback()
         raise Exception('Could not pack atomic instance: %s' % err)
     if consumer is not None:
         super(AtomicInstance, self).__setattr__('_data', consumer)
     return value
Esempio n. 2
0
 def __call__(self, data, **kwargs):
     if self._subfmts:
         raise RuntimeError('Subatoms have not returned fully')
     data = DataConsumer(data)
     dest_child = kwargs.pop('dest_child', None)
     atomic = self.atomic(self, data, **kwargs)
     if dest_child:
         # Patch the parent with this atomic before iterating
         kwargs['parent'][dest_child] = atomic
     unpacked = {}
     try:
         for entry in self.format_iterator(atomic):
             value = entry.unpack_one(atomic)
             if entry.name:
                 atomic[entry.name] = value
     except Exception as err:
         code.print_helpful_traceback()
         raise Exception('Could not generate atomic instance: %s' % err)
     atomic.freeze()
     return atomic