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
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() }
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
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()}
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
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()
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()}
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() }
def put_datastore(datastore): """ :type datastore: dart.model.datastore.Datastore """ return update_datastore(datastore, Datastore.from_dict(request.get_json()))
def post_datastore(): return {'results': datastore_service().save_datastore(Datastore.from_dict(request.get_json())).to_dict()}
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())))