def post(self): try: data = get_json() if 'user_name' in data: user = User.objects.get(user_name=data['user_name']) elif 'email' in data: user = User.objects.get(email=data['email']) else: error_api("Missing email,user_name.", status=400) if user.has_password(data['password']): get_session()['user'] = unicode(user.pk) # item = get_db()['users'].find_one({'_id':user.pk}) # item = UserRes()._item_to_json(item) session_id = get_session().sid response = dict(status='ok', user_id=unicode(user.pk), session_id=session_id, msg="Welcomed '%s'." % user.user_name) return respond_json(response, status=200) response = dict(status='fail', msg="Wrong password.") return respond_json(response, status=400) except Exception, e: response = dict(status='fail', msg=unicode(e)) return respond_json(response, status=400)
def put(self, id): # import pdb;pdb.set_trace() self.project = self._find_obj(id) if not self.project: return error_api(msg='Error: wrong project id in request.', status=404) status = self.project.get_status() if status < CONFIRMED: return error_api(msg='Error: project is not confirmed yet.', status=400) data = get_json() status = data.get('status') if status not in range(len(STATES)): return error_api(msg='Error: wrong status in request.', status=400) state = STATES[status] if state not in STATES: return error_api(msg='Error: wrong status in request.', status=400) # In any case ensure instances exist self.consumer_params = data.get('consumer_params') error = self._set_state(self.project.services, state) if error: return respond_json(error, status=error['status_code']) else: response = dict(status='ok', msg="Project state set to '%s'" % state) return respond_json(response, status=200)
def put(self, id): # import pdb;pdb.set_trace() self.sproject = self._find_obj(id) if not self.sproject: return error_api(msg='Error: wrong service project id in request.', status=404) data = get_json() status = data.get('status') if status not in [ CONFIRMED, DISABLED ]: # Only support confirm by now. not in range(len(STATES)): return error_api(msg='Error: wrong status in request.', status=400) if status == CONFIRMED and self.sproject.status in range( CONFIRMED, DISABLED): return error_api( msg='Error: service project is already confirmed yet.', status=400) # if status==DISABLED and self.sproject.status < CONFIRMED, DISABLED): # return error_api( msg='Error: service project is already confirmed yet.', status=400 ) state = STATES[status] self.sproject.status = status self.sproject.save() response = dict(status='ok', msg="Service project state set to %s" % state) return respond_json(response, status=200)
def put(self, id): """ Modifies the project when not confirmed. Use Project/state othercase """ # import pdb;pdb.set_trace() project = self._find_obj(id) if not project: return error_api(msg='Error: wrong project id in request.', status=404) status = project.get_status() if status >= CONFIRMED: return error_api(msg='Error: project is confirmed yet.', status=400) item = get_json() return update_project(project, item)
def get(self, id): # import pdb;pdb.set_trace() self.project = self._find_obj(id) if not self.project: return error_api(msg='Error: wrong project id in request.', status=404) status = self.project.get_status() if status < CONFIRMED: response = dict(state=STATES[status], status=status, project_id=id) return respond_json(response, status=200) resp = self._get_state(self.project.services) if resp['status_code'] not in (200, 201): return respond_json(resp, status=resp['status_code']) if resp['state']: return respond_json( { "status": resp["status"], "state": resp['state'], "project_id": id }, status=200) else: response = dict(state='CONFIRMED', status=3, project_id=id) return respond_json(response, status=200)
def delete(self, id): project = self._find_obj(id) if not project: return error_api(msg='Error: wrong project id in request.', status=404) status = project.get_status() return delete_project(project)
def post(self): if get_session() and get_session().get('user'): user = User.objects.get(id=get_session().get('user')) else: return error_api("Not signed in.", status=400) item = get_json() item['client'] = user.partner_id return create_project(item)
def get(self, id): # import pdb;pdb.set_trace() self.project = self._find_obj(id) if not self.project: return error_api(msg='Error: wrong project id in request.', status=404) status = self.project.get_status() if status < CONFIRMED: response = dict(state=STATES[status], status=status) return respond_json(response, status=200) state, error = self._get_state(self.project.services) if error: return error_api(msg=error, status=400) if state: status = STATES.index(state) response = dict(state=state, status=status) return respond_json(response, status=200) else: response = dict(state='CONFIRMED', status=3) return respond_json(response, status=200)
def delete(self, id): project = self._find_obj(id) if not project: return error_api(msg='Error: wrong project id in request.', status=404) status = project.get_status() for sproject in project.services: spres = SProjectRes() orch = Orchestrator(debug=False) item = spres._find_item(unicode(sproject.pk)) instance = find_instance(unicode(item['_id'])) if instance: orch.instance_delete(instance['instance_id']) return delete_project(project)
def get(self, id): project = self._find_obj(id) if not project: return error_api(msg='Error: wrong project id in request.', status=404) status = project.get_status() key_data = None for sproject in project.services: spres = SProjectRes() orch = Orchestrator(debug=False) item = spres._find_item(unicode(sproject.pk)) instance = find_instance(unicode(item['_id'])) if instance: key_data = orch.instance_get_key(instance['instance_id']) break return key_data
def post(self, id): try: project = Project.objects.get(id=ObjectId(id)) obj = self._obj_from_json(get_json()) obj.project = project valid_error = self._validate(obj) if valid_error: response = dict(status='fail', msg='%s: %s' % (self.name, valid_error)) return respond_json(response, status=400) obj.save() response = dict(status='ok', msg='%s updated' % self.name) return respond_json(response, status=200) except Exception, e: return error_api(msg=str(e))
def get(self): if get_session() and get_session().get('user'): return UserRes.get(self, get_session().get('user')) else: error_api("Not signed in.", status=404)
def update_project(project, item, is_new=False): # import pdb;pdb.set_trace() _status = SAVED status_code = 200 if is_new: status_code = 201 try: resp = regex_name(item) if resp is not None: return resp if 'name' not in item: item['name'] = datetime.utcnow().strftime('%Y%m%d%H%M%S%f') client = None client_id = item.pop('client', None) if client_id: is_provider = get_type_user(client_id) if is_provider: client = Provider.objects.get(id=client_id) _status = CONFIRMED else: client = Client.objects.get(id=client_id) if project.client: if client and project.client != client: return error_api( msg='Error: Client project can not be changed.', status=400) elif client is None: return error_api("Client not defined.", status=400) else: project.client = client services = project.services if services: for sproject in list(services): sproject.delete() project.services.remove(sproject) sitems = item.pop('services') for name in ['name', 'description', 'summary']: if name in item: setattr(project, name, item[name]) try: project.save() except NotUniqueError: error_response = create_message_error(409, 'NOT_UNIQUE_PROJECT_NAME') return respond_json(error_response, status=409) services = [] if not sitems: project.delete() return error_api("No services.", status=400) try: for sitem in sitems: service_id = sitem['service'] # service = ServiceDescription.objects.get(id=service_id) service = get_db(_cfg.database__database_name)['services']. \ find_one({'_id': ObjectId(service_id)}) if service is None: project.delete() return error_api("Service '%s' doesn't exist." % service_id, status=400) services.append(service) except Exception, err: project.delete() return error_api(msg="Error in project '%s'." % err, status=400) try: for sitem, service in zip(sitems, services): # context_type=sitem.get('context_type', '') provider = service['provider'] sproject = SProject(service=service['_id'], project=project, provider=provider, status=_status) sproject.save() project.services.append(sproject) project.save() except Exception, err: if project.services: for sproject in project.services: sproject.delete() project.delete() return error_api(msg="Error: updating project '%s'." % err, status=400)
def update_project(project, item, is_new=False): # import pdb;pdb.set_trace() try: client = None client_id = item.pop('client', None) if client_id: client = Client.objects.get(id=client_id) if project.client: if client and project.client != client: return error_api( msg='Error: Client project can not be changed.', status=400) elif client is None: return error_api("Client not defined.", status=400) else: project.client = client services = project.services if services: for sproject in list(services): sproject.delete() project.services.remove(sproject) sitems = item.pop('services') for name in ['name', 'description', 'summary']: if name in item: setattr(project, name, item[name]) project.save() services = [] if not sitems: return error_api("No services.", status=400) for sitem in sitems: service_id = sitem['service'] service = ServiceDescription.objects.get(id=service_id) if service is None: return error_api("Service '%s' doesn't exist." % service_id, status=400) services.append(service) try: for sitem, service in zip(sitems, services): context_type = sitem.get('context_type', '') context = sitem.get('context', {}) if not context_type: context_type = service.properties.get('context_type', '') # if not context_type: # return error_api("Context_type not defined.", status=400) if not context: if context_type: scontext = get_db()['scontexts'].find_one( {'context_type': context_type}) context = scontext['context'] else: context = {} sproject = SProject(service=service, project=project, provider=service.provider, context_type=context_type, context=context, status=SAVED) sproject.save() project.services.append(sproject) except Exception, err: if project.services: for sproject in project.services: sproject.delete() project.delete() return error_api(msg="Error: updating project '%s'." % err, status=400) else: