예제 #1
0
def update_session(user_id, session_id, patch_doc, project_id=None):
    if CONF.enable_v1_api:
        valid_patch = utilsv1.SessionDoc.create_patch(patch_doc)
    else:
        valid_patch = utilsv2.SessionDoc.create_patch(patch_doc)

    sessiont = get_session(project_id=project_id,
                           user_id=user_id,
                           session_id=session_id)
    if not sessiont:
        raise freezer_api_exc.DocumentNotFound(
            message='Session not register with ID'
            ' {0}'.format(session_id))

    values = {}
    for key in valid_patch.keys():
        if key == 'jobs':
            jobintable = sessiont.get('jobs', None)
            jobinpatch = valid_patch.get('jobs', None)
            if jobintable:
                jobintable.update(jobinpatch)
                jobinpatch.update(jobintable)
            values['job'] = json_utils.json_encode(valid_patch.get(key, None))
        elif key == 'schedule':
            values[key] = json_utils.json_encode(valid_patch.get(key, None))
        else:
            values[key] = valid_patch.get(key, None)

    update_tuple(tablename=models.Session,
                 user_id=user_id,
                 tuple_id=session_id,
                 tuple_values=values,
                 project_id=project_id)

    return 0
예제 #2
0
    def update(self, session_id, session_update_doc):
        # remove _version from the document
        session_update_doc.pop('_version', 0)
        update_doc = {"doc": session_update_doc}
        try:
            res = self.es.update(index=self.index,
                                 doc_type=self.doc_type,
                                 id=session_id,
                                 body=update_doc)
            version = res['_version']
            self.es.indices.refresh(index=self.index)
        except elasticsearch.TransportError as e:
            if e.status_code == 409:
                raise freezer_api_exc.DocumentExists(message=e.error)
            raise freezer_api_exc.DocumentNotFound(
                message=_i18n._('Unable to update session '
                                '%(id)s %(e)s') % {
                                    'id': session_id,
                                    'e': e
                                })

        except Exception:
            raise freezer_api_exc.StorageEngineError(
                message=_i18n._('Unable to update session with id %s') %
                session_id)
        return version
예제 #3
0
 def on_delete(self, req, resp, session_id):
     # DELETE /v1/sessions/{session_id}     Deletes the specified session
     user_id = req.get_header('X-User-ID')
     obj = self.db.get_session(user_id=user_id, session_id=session_id)
     if not obj:
         raise freezer_api_exc.DocumentNotFound(
             message='No session found with ID:{0}'.format(session_id))
     else:
         self.db.delete_session(user_id=user_id, session_id=session_id)
         resp.body = {'session_id': session_id}
         resp.status = falcon.HTTP_204
예제 #4
0
 def on_delete(self, req, resp, backup_id):
     # DELETE /v1/backups/{backup_id}     Deletes the specified backup
     user_id = req.get_header('X-User-ID')
     obj = self.db.get_backup(user_id=user_id, backup_id=backup_id)
     if not obj:
         raise freezer_api_exc.DocumentNotFound(
             message='No Backup found with ID:{0}'.format(backup_id))
     else:
         self.db.delete_backup(user_id=user_id, backup_id=backup_id)
         resp.body = {'backup_id': backup_id}
         resp.status = falcon.HTTP_204
예제 #5
0
 def on_delete(self, req, resp, job_id):
     # DELETE /v1/jobs/{job_id}     Deletes the specified job
     user_id = req.get_header('X-User-ID')
     obj = self.db.get_job(user_id=user_id, job_id=job_id)
     if not obj:
         raise freezer_api_exc.DocumentNotFound(
             message='No Job found with ID:{0}'.format(job_id))
     else:
         self.db.delete_job(user_id=user_id, job_id=job_id)
         resp.body = {'job_id': job_id}
         resp.status = falcon.HTTP_204
예제 #6
0
 def get(self, user_id, doc_id):
     try:
         res = self.es.get(index=self.index,
                           doc_type=self.doc_type,
                           id=doc_id)
         doc = res['_source']
     except elasticsearch.TransportError:
         raise freezer_api_exc.DocumentNotFound(
             message=_i18n._('No document found with ID %s') % doc_id)
     except Exception as e:
         raise freezer_api_exc.StorageEngineError(
             message=_i18n._('Get operation failed: %s') % e)
     if doc['user_id'] != user_id:
         raise freezer_api_exc.AccessForbidden(
             _i18n._("Document access forbidden"))
     if '_version' in res:
         doc['_version'] = res['_version']
     return doc
예제 #7
0
 def update(self, job_id, job_update_doc):
     # remove _version from the document
     job_update_doc.pop('_version', 0)
     update_doc = {"doc": job_update_doc}
     try:
         res = self.es.update(index=self.index, doc_type=self.doc_type,
                              id=job_id, body=update_doc)
         version = res['_version']
         self.es.indices.refresh(index=self.index)
     except elasticsearch.TransportError as e:
         if e.status_code == 409:
             raise freezer_api_exc.DocumentExists(message=e.error)
         raise freezer_api_exc.DocumentNotFound(
             message='Unable to find job to update with id'
                     ' {0} {1}'.format(job_id, e))
     except Exception:
         raise freezer_api_exc.StorageEngineError(
             message='Unable to update job with id {0}'.format(job_id))
     return version
예제 #8
0
def update_tuple(tablename, user_id, tuple_id, tuple_values, project_id=None):

    session = get_db_session()
    with session.begin():
        try:
            query = model_query(session, tablename, project_id=project_id)
            query = query.filter_by(user_id=user_id).filter_by(id=tuple_id)
            result = query.update(tuple_values)
        except Exception as e:
            raise freezer_api_exc.StorageEngineError(
                message='Mysql operation failed {0}'.format(e))

    if not result:
        raise freezer_api_exc.DocumentNotFound(
            message='Tuple not registered with ID'
            ' {0} in Table{1} '.format(tuple_id, tablename))

    else:
        LOG.info('Tuple updated, tuple_id: {0}'.format(tuple_id))
        return tuple_id
예제 #9
0
 def get(self, project_id, doc_id, user_id=None):
     try:
         res = self.es.get(index=self.index,
                           doc_type=self.doc_type,
                           id=doc_id)
         doc = res['_source']
     except elasticsearch.TransportError:
         raise freezer_api_exc.DocumentNotFound(
             message='No document found with ID:{0}'.format(doc_id))
     except Exception as e:
         raise freezer_api_exc.StorageEngineError(
             message='Get operation failed: {}'.format(e))
     if doc['project_id'] != project_id:
         raise freezer_api_exc.AccessForbidden("You are not allowed to"
                                               " access")
     if user_id:
         if doc['user_id'] != user_id:
             raise freezer_api_exc.AccessForbidden(
                 "Document access forbidden")
     if '_version' in res:
         doc['_version'] = res['_version']
     return doc
예제 #10
0
 def test_get_action_returns_none_when_action_not_found(self):
     self.mock_db.get_action.side_effect = exceptions.DocumentNotFound(
         'regular test failure')
     result = self.resource.get_action('project-id', 'user-id', 'action-id')
     self.assertIsNone(result)
예제 #11
0
 def test_DocumentNotFound(self):
     e = exceptions.DocumentNotFound(message='testing')
     self.assertRaises(falcon.HTTPError, e.handle, self.ex, self.mock_req,
                       self.mock_req, None)