def createConnectable(var): #If var is and SLOT or and EVENT, a proper connectable object must be created! aspect = var.vardef.aspect name = var.vardef.name connectable = None if (aspect == 'SLOT'): connectable = Out(name=name, abstract_variable=var.abstract_variable) if (aspect == 'EVEN'): connectable = In(name=name, variable=var) if (connectable == None): return {} connectable.save() connectableId = {} connectableId['id'] = connectable.id connectableId['name'] = name return connectableId
def create(self, request, user_name, screen_id=None): user = user_authentication(user_name) # Gets all needed parameters from request if request.POST.has_key('json'): json = simplejson.loads(request.POST['json']) else: return HttpResponseBadRequest('json parameter expected') #TODO Remove this. Sets user screen by default if not screen_id: screen_id = 1 try: #Gets current user screen screen = Screen.objects.get(user=user, code=screen_id) igadgets = json['iGadgetList'] for igadget in igadgets: igadget_object = IGadget.objects.get(screen=screen, code=igadget['id']) # Save all IGadget connections (in and out variables) for var in igadget['list']: var_object = Variable.objects.get(uri=var['uri'], vardef__name=var['name'], igadget=igadget_object) # Remove existed connections Out.objects.filter(variable=var_object).delete() In.objects.filter(variable=var_object).delete() # Saves IN connection if var['aspect'] == 'EVEN': uri_in = "/user/%s/igadgets/%s/in/%s" % ( user_name, igadget_object.code, var['name']) in_object = In(uri=uri_in, name=var['name'], variable=var_object) in_object.save() # Saves OUT connection if var['aspect'] == 'SLOT': uri_out = "/user/%s/igadgets/%s/out/%s" % ( user_name, igadget_object.code, var['name']) out_object = Out(uri=uri_out, name=var['name'], variable=var_object) out_object.save() # Delete channels InOut.objects.filter(user=user).delete() # Saves all channels for inout in json['inOutList']: inout_object = None inout_object = InOut(user=user, uri=inout['uri'], name=inout['name'], friend_code=inout['friend_code'], value=inout['value']) inout_object.save() # Saves all channel inputs for ins in inout['ins']: igadget_object = IGadget.objects.get(screen=screen, code=ins['igadget']) var_object = Variable.objects.get(vardef__name=ins['name'], igadget=igadget_object) connected_in = In.objects.get(variable=var_object) connected_in.inout.add(inout_object) # Saves all channel outputs for out in inout['outs']: igadget_object = IGadget.objects.get(screen=screen, code=out['igadget']) var_object = Variable.objects.get(vardef__name=out['name'], igadget=igadget_object) connected_out = Out.objects.get(variable=var_object) connected_out.inout.add(inout_object) transaction.commit() return HttpResponse('ok') except Screen.DoesNotExist: transaction.rollback() return HttpResponseBadRequest('refered screen (' + screen_id + ') doesn\'t exists.') except IGadget.DoesNotExist: transaction.rollback() return HttpResponseBadRequest('refered igadget doesn\'t exists.') except Variable.DoesNotExist: transaction.rollback() return HttpResponseBadRequest('refered variable doesn\'t exists.') except Exception, e: transaction.rollback() return HttpResponseBadRequest('connectables cannot be save: %s' % e)
def create(self, request, user_name, screen_id=None): user = user_authentication(user_name) # Gets all needed parameters from request if request.POST.has_key('json'): json = simplejson.loads(request.POST['json']) else: return HttpResponseBadRequest (_(u'JSON parameter expected')) #TODO Remove this. Sets user screen by default if not screen_id: screen_id = 1 try: #Gets current user screen screen = Screen.objects.get(user=user, code=screen_id) igadgets = json['iGadgetList'] for igadget in igadgets: igadget_object = IGadget.objects.get(screen=screen, code=igadget['id']) # Save all IGadget connections (in and out variables) for var in igadget['list']: var_object = Variable.objects.get(uri=var['uri'], vardef__name=var['name'], igadget=igadget_object) # Remove existed connections Out.objects.filter(variable=var_object).delete() In.objects.filter(variable=var_object).delete() # Saves IN connection if var['aspect'] == 'EVEN': uri_in = "/user/%s/igadgets/%s/in/%s" % (user_name, igadget_object.code, var['name']) in_object = In(uri=uri_in, name=var['name'], variable=var_object) in_object.save() # Saves OUT connection if var['aspect'] == 'SLOT': uri_out = "/user/%s/igadgets/%s/out/%s" % (user_name, igadget_object.code, var['name']) out_object = Out(uri=uri_out, name=var['name'], variable=var_object) out_object.save() # Delete channels InOut.objects.filter(user=user).delete() # Saves all channels for inout in json['inOutList']: inout_object = None inout_object = InOut(user=user, uri=inout['uri'], name=inout['name'], friend_code=inout['friend_code'], value=inout['value']) inout_object.save() # Saves all channel inputs for ins in inout['ins']: igadget_object = IGadget.objects.get(screen=screen, code=ins['igadget']) var_object = Variable.objects.get(vardef__name=ins['name'], igadget=igadget_object) connected_in = In.objects.get(variable=var_object) connected_in.inout.add(inout_object) # Saves all channel outputs for out in inout['outs']: igadget_object = IGadget.objects.get(screen=screen, code=out['igadget']) var_object = Variable.objects.get(vardef__name=out['name'], igadget=igadget_object) connected_out = Out.objects.get(variable=var_object) connected_out.inout.add(inout_object) transaction.commit() return HttpResponse ('ok') except Screen.DoesNotExist: transaction.rollback() return HttpResponseBadRequest(_('refered screen %(screen_id)s doesn\'t exists.') % {'screen_id': screen_id}) except IGadget.DoesNotExist: transaction.rollback() return HttpResponseBadRequest(_('refered igadget doesn\'t exists.')) except Variable.DoesNotExist: transaction.rollback() return HttpResponseBadRequest(_('refered variable doesn\'t exists.')) except Exception, e: transaction.rollback() return HttpResponseBadRequest(_('connectables cannot be save: %(exc)s') % {'exc': e})