Source code for biothings.hub.dataindex.snapshot_repo

import elasticsearch

from biothings.utils.exceptions import RepositoryVerificationFailed


[docs] class Repository: def __init__(self, client, repository): # Corresponds to HTTP operations on # /_snapshot/<repository> self.client = client self.name = repository
[docs] def exists(self): try: self.client.snapshot.get_repository(self.name) except elasticsearch.exceptions.NotFoundError: return False return True
[docs] def create(self, **body): # https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-s3-client.html return self.client.snapshot.create_repository(self.name, body=body)
[docs] def delete(self): self.client.snapshot.delete_repository(self.name)
[docs] def verify(self, config): """A repository is consider properly setup and working, when: - passes verification of ElasticSearch - it's settings must match with the snapshot's config. """ # Check if the repo pass ElasticSearch's verification self.client.snapshot.verify_repository(self.name) # Check if the repo's settings match with the snapshot's config repo_settings = self.client.snapshot.get_repository(self.name)[self.name] incorrect_data = {} for field in ["type", "settings"]: if config[field] != repo_settings[field]: incorrect_data[field] = {"config": config[field], "repo": repo_settings[field]} if incorrect_data: raise RepositoryVerificationFailed( { "error": "repository_verification_exception", "detail": { "message": "the repository's settings is not match with snapshot config.", "diff": incorrect_data, }, } )
def __str__(self): return ( f"<Repository {'READY' if self.exists() else 'MISSING'}" f" name='{self.name}'" f" client={self.client}" f">" )
[docs] def test_01(): from elasticsearch import Elasticsearch client = Elasticsearch() snapshot = Repository(client, "mynews") print(snapshot)
[docs] def test_02(): from elasticsearch import Elasticsearch client = Elasticsearch() snapshot = Repository(client, "______") print(snapshot)
if __name__ == "__main__": test_01()