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
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