Esempio n. 1
0
    def save_datastore(self, datastore, commit_and_handle_state_change=True, flush=False):
        """ :type datastore: dart.model.datastore.Datastore """
        schema = self.get_schema(datastore)
        datastore = self.default_and_validate_datastore(datastore, schema)
        datastore.id = random_id()

        secrets = {}
        datastore_dict = datastore.to_dict()
        purge_secrets(datastore_dict, schema, secrets)
        datastore = Datastore.from_dict(datastore_dict)
        for k, v in secrets.iteritems():
            self._secrets.put('dart-datastore-%s-%s' % (datastore.id, k), v)

        self._set_s3_paths(datastore)
        datastore_dao = DatastoreDao()
        datastore_dao.id = datastore.id
        datastore_dao.data = datastore.data.to_dict()
        db.session.add(datastore_dao)
        if flush:
            db.session.flush()
        datastore = datastore_dao.to_model()
        if commit_and_handle_state_change:
            db.session.commit()
            datastore = datastore_dao.to_model()
            self.handle_datastore_state_change(datastore, None, datastore_dao.data['state'])
        return datastore
Esempio n. 2
0
def patch_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    p = JsonPatch(request.get_json())
    sanitized_datastore = datastore.copy()
    patched_datastore = Datastore.from_dict(p.apply(datastore.to_dict()))

    # only allow updating fields that are editable
    sanitized_datastore.data.name = patched_datastore.data.name
    sanitized_datastore.data.host = patched_datastore.data.host
    sanitized_datastore.data.port = patched_datastore.data.port
    sanitized_datastore.data.connection_url = patched_datastore.data.connection_url
    sanitized_datastore.data.state = patched_datastore.data.state
    sanitized_datastore.data.concurrency = patched_datastore.data.concurrency
    sanitized_datastore.data.args = patched_datastore.data.args
    sanitized_datastore.data.extra_data = patched_datastore.data.extra_data
    sanitized_datastore.data.tags = patched_datastore.data.tags

    # revalidate
    sanitized_datastore = datastore_service().default_and_validate_datastore(
        sanitized_datastore)

    return {
        'results':
        datastore_service().patch_datastore(datastore,
                                            sanitized_datastore).to_dict()
    }
Esempio n. 3
0
    def save_datastore(self,
                       datastore,
                       commit_and_handle_state_change=True,
                       flush=False):
        """ :type datastore: dart.model.datastore.Datastore """
        schema = self.get_schema(datastore)
        datastore = self.default_and_validate_datastore(datastore, schema)
        datastore.id = random_id()

        secrets = {}
        datastore_dict = datastore.to_dict()
        purge_secrets(datastore_dict, schema, secrets)
        datastore = Datastore.from_dict(datastore_dict)
        for k, v in secrets.iteritems():
            self._secrets.put('dart-datastore-%s-%s' % (datastore.id, k), v)

        self._set_s3_paths(datastore)
        datastore_dao = DatastoreDao()
        datastore_dao.id = datastore.id
        datastore_dao.data = datastore.data.to_dict()
        db.session.add(datastore_dao)
        if flush:
            db.session.flush()
        datastore = datastore_dao.to_model()
        if commit_and_handle_state_change:
            db.session.commit()
            datastore = datastore_dao.to_model()
            self.handle_datastore_state_change(datastore, None,
                                               datastore_dao.data['state'])
        return datastore
Esempio n. 4
0
 def patch_datastore(self, source_datastore, datastore):
     schema = self.get_schema(datastore)
     secrets = {}
     datastore_dict = datastore.to_dict()
     purge_secrets(datastore_dict, schema, secrets)
     datastore = Datastore.from_dict(datastore_dict)
     datastore = patch_difference(DatastoreDao, source_datastore, datastore)
     self.handle_datastore_state_change(datastore, source_datastore.data.state, datastore.data.state)
     return datastore
Esempio n. 5
0
def put_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    updated_datastore = Datastore.from_dict(request.get_json())
    if datastore.data.state == DatastoreState.TEMPLATE and updated_datastore.data.state != DatastoreState.TEMPLATE:
        return {'results': 'ERROR', 'error_message': 'TEMPLATE state cannot be changed'}, 400, None
    if updated_datastore.data.state not in [DatastoreState.ACTIVE, DatastoreState.INACTIVE, DatastoreState.DONE]:
        return {'results': 'ERROR', 'error_message': 'state must be ACTIVE, INACTIVE, or DONE'}, 400, None

    datastore = datastore_service().update_datastore_extra_data(datastore, updated_datastore.data.extra_data)
    return {'results': datastore_service().update_datastore_state(datastore, updated_datastore.data.state).to_dict()}
Esempio n. 6
0
 def _resolve_and_save_datastore(self, entity_id, entity_map, actual_entities_by_node_id, actual_entities_by_unsaved_id):
     actual_id, unsaved_id = self._resolve(EntityType.datastore, entity_id, entity_map, actual_entities_by_unsaved_id)
     if actual_id:
         return actual_id
     node_id = self._node_id(EntityType.datastore, unsaved_id)
     datastore = Datastore.from_dict(entity_map['unsaved_entities'][node_id])
     datastore = self._datastore_service.save_datastore(datastore, commit_and_handle_state_change=False, flush=True)
     actual_entities_by_node_id[node_id] = datastore
     actual_entities_by_unsaved_id[unsaved_id] = datastore
     return datastore.id
Esempio n. 7
0
 def _resolve_and_save_datastore(self, entity_id, entity_map, actual_entities_by_node_id, actual_entities_by_unsaved_id):
     actual_id, unsaved_id = self._resolve(EntityType.datastore, entity_id, entity_map, actual_entities_by_unsaved_id)
     if actual_id:
         return actual_id
     node_id = self._node_id(EntityType.datastore, unsaved_id)
     datastore = Datastore.from_dict(entity_map['unsaved_entities'][node_id])
     datastore = self._datastore_service.save_datastore(datastore, commit_and_handle_state_change=False, flush=True)
     actual_entities_by_node_id[node_id] = datastore
     actual_entities_by_unsaved_id[unsaved_id] = datastore
     return datastore.id
Esempio n. 8
0
 def patch_datastore(self, source_datastore, datastore):
     schema = self.get_schema(datastore)
     secrets = {}
     datastore_dict = datastore.to_dict()
     purge_secrets(datastore_dict, schema, secrets)
     datastore = Datastore.from_dict(datastore_dict)
     datastore = patch_difference(DatastoreDao, source_datastore, datastore)
     self.handle_datastore_state_change(datastore,
                                        source_datastore.data.state,
                                        datastore.data.state)
     return datastore
Esempio n. 9
0
    def clone_datastore(self, source_datastore, **data_property_overrides):
        datastore = Datastore.from_dict(source_datastore.to_dict())
        datastore.data.state = DatastoreState.INACTIVE
        datastore.data.host = None
        datastore.data.port = None
        datastore.data.username = None
        datastore.data.password = None
        datastore.data.connection_url = None
        datastore.data.extra_data = None
        self._set_s3_paths(datastore)
        for k, v in data_property_overrides.iteritems():
            setattr(datastore.data, k, v)

        datastore_dao = DatastoreDao()
        datastore_dao.id = random_id()
        datastore_dao.data = datastore.data.to_dict()
        db.session.add(datastore_dao)
        db.session.commit()
        return datastore_dao.to_model()
Esempio n. 10
0
    def clone_datastore(self, source_datastore, **data_property_overrides):
        datastore = Datastore.from_dict(source_datastore.to_dict())
        datastore.data.state = DatastoreState.INACTIVE
        datastore.data.host = None
        datastore.data.port = None
        datastore.data.username = None
        datastore.data.password = None
        datastore.data.connection_url = None
        datastore.data.extra_data = None
        self._set_s3_paths(datastore)
        for k, v in data_property_overrides.iteritems():
            setattr(datastore.data, k, v)

        datastore_dao = DatastoreDao()
        datastore_dao.id = random_id()
        datastore_dao.data = datastore.data.to_dict()
        db.session.add(datastore_dao)
        db.session.commit()
        return datastore_dao.to_model()
Esempio n. 11
0
def patch_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    p = JsonPatch(request.get_json())
    sanitized_datastore = datastore.copy()
    patched_datastore = Datastore.from_dict(p.apply(datastore.to_dict()))

    # only allow updating fields that are editable
    sanitized_datastore.data.name = patched_datastore.data.name
    sanitized_datastore.data.host = patched_datastore.data.host
    sanitized_datastore.data.port = patched_datastore.data.port
    sanitized_datastore.data.connection_url = patched_datastore.data.connection_url
    sanitized_datastore.data.state = patched_datastore.data.state
    sanitized_datastore.data.concurrency = patched_datastore.data.concurrency
    sanitized_datastore.data.args = patched_datastore.data.args
    sanitized_datastore.data.extra_data = patched_datastore.data.extra_data
    sanitized_datastore.data.tags = patched_datastore.data.tags

    # revalidate
    sanitized_datastore = datastore_service().default_and_validate_datastore(sanitized_datastore)

    return {'results': datastore_service().patch_datastore(datastore, sanitized_datastore).to_dict()}
Esempio n. 12
0
def put_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    updated_datastore = Datastore.from_dict(request.get_json())
    if datastore.data.state == DatastoreState.TEMPLATE and updated_datastore.data.state != DatastoreState.TEMPLATE:
        return {
            'results': 'ERROR',
            'error_message': 'TEMPLATE state cannot be changed'
        }, 400, None
    if updated_datastore.data.state not in [
            DatastoreState.ACTIVE, DatastoreState.INACTIVE, DatastoreState.DONE
    ]:
        return {
            'results': 'ERROR',
            'error_message': 'state must be ACTIVE, INACTIVE, or DONE'
        }, 400, None

    datastore = datastore_service().update_datastore_extra_data(
        datastore, updated_datastore.data.extra_data)
    return {
        'results':
        datastore_service().update_datastore_state(
            datastore, updated_datastore.data.state).to_dict()
    }
Esempio n. 13
0
def put_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    return update_datastore(datastore, Datastore.from_dict(request.get_json()))
Esempio n. 14
0
def post_datastore():
    return {'results': datastore_service().save_datastore(Datastore.from_dict(request.get_json())).to_dict()}
Esempio n. 15
0
def patch_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    p = JsonPatch(request.get_json())
    return update_datastore(datastore, Datastore.from_dict(p.apply(datastore.to_dict())))
Esempio n. 16
0
def post_datastore():
    return {'results': datastore_service().save_datastore(Datastore.from_dict(request.get_json())).to_dict()}
Esempio n. 17
0
def patch_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    p = JsonPatch(request.get_json())
    return update_datastore(datastore, Datastore.from_dict(p.apply(datastore.to_dict())))
Esempio n. 18
0
def put_datastore(datastore):
    """ :type datastore: dart.model.datastore.Datastore """
    return update_datastore(datastore, Datastore.from_dict(request.get_json()))