Example #1
0
    def put_list(self, request, response):
        if not self.authorized(request):
            logger.info("Unauthorized request.",
                        extra={'location': request.url,
                               'details': repr(request.authorization)})
            raise CustomUnauthorized()
        if request.mimetype != "application/json":
            logger.warning("Unsupported MIME type.",
                           extra={'location': request.url,
                                  'details': request.mimetype})
            raise UnsupportedMediaType()

        try:
            data = json.load(request.stream)
        except (TypeError, ValueError):
            logger.warning("Wrong JSON.",
                           extra={'location': request.url})
            raise BadRequest()

        try:
            self.store.merge_list(data)
        except InvalidData:
            logger.warning("Invalid data.", exc_info=True,
                           extra={'location': request.url,
                                  'details': data})
            raise BadRequest()

        response.status_code = 204
Example #2
0
 def delete_subchange(self, key):
     # Delete the subchange from the (sorted) list and reset the
     # history.
     for i in range(len(self._changes)):
         if self._changes[i].key == key:
             del self._changes[i]
     self.reset_history()
     logger.info("Reset history after deleting subchange '" + key + "'")
Example #3
0
    def delete_list(self, request, response):
        if not self.authorized(request):
            logger.info("Unauthorized request.",
                        extra={'location': request.url,
                               'details': repr(request.authorization)})
            raise CustomUnauthorized()

        self.store.delete_list()

        response.status_code = 204
Example #4
0
 def update_subchange(self, key, subchange):
     # Update the subchange inside the (sorted) list and,
     # regardless of its position in that list, reset the history.
     for i in range(len(self._changes)):
         if self._changes[i].key == key:
             self._changes[i] = subchange
     self.reset_history()
     logger.info("Reset history for user '" +
         self._submissions[subchange.submission].user + "' and task '" +
         self._submissions[subchange.submission].user +
         "' after updating subchange '" + key + "' for submission '" +
         subchange.submission + "'")
Example #5
0
 def update_subchange(self, key, subchange):
     # Update the subchange inside the (sorted) list and,
     # regardless of its position in that list, reset the history.
     for i in range(len(self._changes)):
         if self._changes[i].key == key:
             self._changes[i] = subchange
     self.reset_history()
     logger.info("Reset history for user '" +
                 self._submissions[subchange.submission].user +
                 "' and task '" +
                 self._submissions[subchange.submission].user +
                 "' after updating subchange '" + key +
                 "' for submission '" + subchange.submission + "'")
Example #6
0
    def delete(self, request, response, key):
        # Limit charset of keys.
        if re.match("^[A-Za-z0-9_]+$", key) is None:
            return NotFound()
        if key not in self.store:
            raise NotFound()
        if not self.authorized(request):
            logger.info("Unauthorized request.",
                        extra={'location': request.url,
                               'details': repr(request.authorization)})
            raise CustomUnauthorized()

        self.store.delete(key)

        response.status_code = 204
Example #7
0
 def create_subchange(self, key, subchange):
     # Insert the subchange at the right position inside the
     # (sorted) list and call the appropriate method (append_change
     # or reset_history)
     if len(self._changes) == 0 or \
        subchange.time > self._changes[-1].time or \
        (subchange.time == self._changes[-1].time and
         subchange.key > self._changes[-1].key):
         self._changes.append(subchange)
         self.append_change(subchange)
     else:
         for idx, val in enumerate(self._changes):
             if subchange.time < val.time or \
                (subchange.time == val.time and subchange.key < val.key):
                 self._changes.insert(idx, subchange)
                 break
         self.reset_history()
         logger.info("Reset history for user '" +
             self._submissions[subchange.submission].user + "' and task '" +
             self._submissions[subchange.submission].user +
             "' after creating subchange '" + key + "' for submission '" +
             subchange.submission + "'")
Example #8
0
 def create_subchange(self, key, subchange):
     # Insert the subchange at the right position inside the
     # (sorted) list and call the appropriate method (append_change
     # or reset_history)
     if len(self._changes) == 0 or \
        subchange.time > self._changes[-1].time or \
        (subchange.time == self._changes[-1].time and
         subchange.key > self._changes[-1].key):
         self._changes.append(subchange)
         self.append_change(subchange)
     else:
         for idx, val in enumerate(self._changes):
             if subchange.time < val.time or \
                (subchange.time == val.time and subchange.key < val.key):
                 self._changes.insert(idx, subchange)
                 break
         self.reset_history()
         logger.info("Reset history for user '" +
                     self._submissions[subchange.submission].user +
                     "' and task '" +
                     self._submissions[subchange.submission].user +
                     "' after creating subchange '" + key +
                     "' for submission '" + subchange.submission + "'")
Example #9
0
 def delete_subchange(self, key):
     # Delete the subchange from the (sorted) list and reset the
     # history.
     self._changes = filter(lambda a: a.key != key, self._changes)
     self.reset_history()
     logger.info("Reset history after deleting subchange '" + key + "'")
Example #10
0
 def delete_subchange(self, key):
     # Delete the subchange from the (sorted) list and reset the
     # history.
     self._changes = filter(lambda a: a.key != key, self._changes)
     self.reset_history()
     logger.info("Reset history after deleting subchange '" + key + "'")