示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
 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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
 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)
示例#10
0
 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
示例#11
0
    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))
示例#12
0
 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)
示例#13
0
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)
示例#14
0
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: