Exemple #1
0
    def _create(self, miss_checks, db_checks, **kwargs):
        """
        :param miss_checks: [miss1, miss2]
        :param db_checks: [(table, exist, query, error)]
        """
        if self.json_args is None:
            raises.BadRequest(message.no_body())

        data = self.table_cls.from_dict(self.json_args)
        for miss in miss_checks:
            miss_data = data.__getattribute__(miss)
            if miss_data is None or miss_data == '':
                raises.BadRequest(message.missing(miss))

        for k, v in kwargs.iteritems():
            data.__setattr__(k, v)

        for table, exist, query, error in db_checks:
            check = yield self._eval_db_find_one(query(data), table)
            if (exist and not check) or (not exist and check):
                code, msg = error(data)
                raises.CodeTBD(code, msg)

        if self.table != 'results':
            data.creation_date = datetime.now()
        _id = yield self._eval_db(self.table,
                                  'insert',
                                  data.format(),
                                  check_keys=False)
        if 'name' in self.json_args:
            resource = data.name
        else:
            resource = _id
        self.finish_request(self._create_response(resource))
Exemple #2
0
    def _update(self, query, db_keys):
        if self.json_args is None:
            raises.BadRequest(message.no_body())

        # check old data exist
        from_data = yield self._eval_db_find_one(query)
        if from_data is None:
            raises.NotFound(message.not_found(self.table, query))

        data = self.table_cls.from_dict(from_data)
        # check new data exist
        equal, new_query = self._update_query(db_keys, data)
        if not equal:
            to_data = yield self._eval_db_find_one(new_query)
            if to_data is not None:
                raises.Forbidden(message.exist(self.table, new_query))

        # we merge the whole document """
        edit_request = self._update_requests(data)
        """ Updating the DB """
        yield self._eval_db(self.table,
                            'update',
                            query,
                            edit_request,
                            check_keys=False)
        edit_request['_id'] = str(data._id)
        self.finish_request(edit_request)
Exemple #3
0
 def wrap(self, *args, **kwargs):
     checks = kwargs.pop('values_check', {})
     if checks:
         for field, check, options in checks:
             if not check(field, options):
                 raises.BadRequest(message.invalid_value(field, options))
     ret = yield gen.coroutine(xstep)(self, *args, **kwargs)
     raise gen.Return(ret)
Exemple #4
0
 def prepare(self):
     if self.request.method != "GET" and self.request.method != "DELETE":
         if self.request.headers.get("Content-Type") is not None:
             if self.request.headers["Content-Type"].startswith(
                     DEFAULT_REPRESENTATION):
                 try:
                     self.json_args = json.loads(self.request.body)
                 except (ValueError, KeyError, TypeError) as error:
                     raises.BadRequest(message.bad_format(str(error)))
Exemple #5
0
 def wrap(self, *args, **kwargs):
     fields = kwargs.pop('miss_fields', [])
     if fields:
         for miss in fields:
             miss_data = self.json_args.get(miss)
             if miss_data is None or miss_data == '':
                 raises.BadRequest(message.missing(miss))
     ret = yield gen.coroutine(xstep)(self, *args, **kwargs)
     raise gen.Return(ret)
Exemple #6
0
    def _calc_total_pages(records_count, last, page, per_page):
        records_nr = records_count
        if (records_count > last) and (last > 0):
            records_nr = last

        total_pages, remainder = divmod(records_nr, per_page)
        if remainder > 0:
            total_pages += 1
        if page > 1 and page > total_pages:
            raises.BadRequest(
                'Request page > total_pages [{}]'.format(total_pages))
        return total_pages, records_nr
Exemple #7
0
 def _update_requests_add_projects(self, version):
     exists = list()
     malformat = list()
     for n in self.body:
         try:
             f_n = models.ScenarioProject.from_dict_with_raise(n)
             if not any(o.project == f_n.project for o in version.projects):
                 version.projects.append(f_n)
             else:
                 exists.append(n['project'])
         except Exception as e:
             malformat.append(e.message)
     if malformat:
         raises.BadRequest(message.bad_format(malformat))
     elif exists:
         raises.Conflict(message.exist('projects', exists))
 def _update_with_body(self, clazz, field, withs):
     exists = list()
     malformat = list()
     for new in self.body:
         try:
             format_new = clazz.from_dict_with_raise(new)
             new_name = getattr(format_new, field)
             if not any(getattr(o, field) == new_name for o in withs):
                 withs.append(format_new)
             else:
                 exists.append(new_name)
         except Exception as error:
             malformat.append(error.message)
     if malformat:
         raises.BadRequest(message.bad_format(malformat))
     elif exists:
         raises.Conflict(message.exist('{}s'.format(field), exists))
     return withs
Exemple #9
0
 def _update_requests_update_projects(self, version):
     exists = list()
     malformat = list()
     projects = list()
     for n in self.body:
         try:
             f_n = models.ScenarioProject.from_dict_with_raise(n)
             if not any(o.project == f_n.project for o in projects):
                 projects.append(models.ScenarioProject.from_dict(n))
             else:
                 exists.append(n['project'])
         except:
             malformat.append(n)
     if malformat:
         raises.BadRequest(message.bad_format(malformat))
     elif exists:
         raises.Forbidden(message.exist('projects', exists))
     version.projects = projects
Exemple #10
0
 def get_int(self, key, value):
     try:
         value = int(value)
     except Exception:
         raises.BadRequest(message.must_int(key))
     return value
Exemple #11
0
 def wrap(self, *args, **kwargs):
     if self.json_args is None:
         raises.BadRequest(message.no_body())
     ret = yield gen.coroutine(xstep)(self, *args, **kwargs)
     raise gen.Return(ret)
 def _update_requests_rename(self, data):
     data.name = self._term.get('name')
     if not data.name:
         raises.BadRequest(message.missing('name'))