def save(self): interface_code = self.cleaned_data['file'].read() parser = InterfaceParser() interface = parser.parse(interface_code) with transaction.commit_on_success(): i = Interface(name=interface['interface_name'], interface_file=self.cleaned_data['file']) i.save() for method in interface['precondition_methods']: m = Method(name=method['method_name'], interface=i) m.save() for parameter in method['parameters']: mp = MethodParameter(method=m, name=parameter) mp.save() for trigger in interface['trigger_methods']: m = Method.objects.get(interface__name=interface['interface_name'], name=trigger) t = Trigger(method=m) t.save() # Send file to Mirri event_handler = EventHandler() try: client = MirriClient() client.upload_interface_file(interface['interface_name'], self.cleaned_data['file']) except (MirriConnectionError, MirriTimeoutError, MirriNotFoundError), e: logger.error('Interface file %s could not be posted to Mirri: %s' % (self.cleaned_data['file'].name, e)) event_handler.add_event('Interface file %s could not be posted to Mirri: %s' % (self.cleaned_data['file'].name, e)) else:
def clean_file(self): file = self.cleaned_data['file'] interface_code = file.read() file.seek(0) parser = InterfaceParser() interface = [] try: interface = parser.parse(interface_code) except SyntaxError, e: raise forms.ValidationError('File %s contains syntax errors (line %s, col %s): %s' % (file.name, e.lineno, e.offset, e.text))