pantri/scripts/lib/example_objectstore.py (65 lines of code) (raw):
#!/usr/bin/env python3
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved.
import logging
import os
import sys
from example_objectstore import Client as ExampleClient
from . import config, utils
class Example_ObjectStore(object):
def __init__(self, options=None):
"""
Instantiate class variables
"""
if not options:
options = config.getoptions("default", {})
self.options = options
self.logger = logging.getLogger("pantri")
self.paths = utils.get_paths()
self.git_path = self.paths["repo_root"]
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
return self
def upload(self, objects_to_upload) -> None:
self.logger.info("Storing into Example...")
for obj in objects_to_upload:
store_path = os.path.join(dir_path, obj)
if self.example_store(store_path, obj):
yield obj
def example_store(self, obj_path, object) -> None:
with self.client as client:
object_to_store = os.path.join(self.paths["shelves"], object)
if not client.exists(bucket, obj_path):
self.make_example_dir(obj_path)
with open(object_to_store, "rb") as file_to_put:
try:
client.putAppend(bucket, path=obj_path, stream=file_to_put)
self.logger.info("Successfully stored %s into Example", object)
return True
except StorageException:
self.logger.error(
"Storing %s into Example " "was unsuccessful", object
)
return False
def make_example_dir(self, path) -> None:
with self.client as client:
try:
client.mkDirs(bucket, path=path)
except BaseException:
self.logger.error("Example Error: could not create directory.")
sys.exit(1)
return
def retrieve(self, objects_to_sync) -> None:
self.logger.info("Retrieving from Example...")
objects = []
for obj in objects_to_sync:
objects.append(obj)
with self.client as client:
for obj in objects:
object_path = os.path.join(self.options["dest_sync"], obj)
path = os.path.join("tree", obj)
with open(object_path, "wb") as f:
try:
client.get(bucket, path=path, stream=f)
self.logger.info("Downloaded file from example: %s", obj)
yield obj
except BaseException:
self.logger.error("File not found in example: %s", obj)
return
def has_valid_cert(self) -> bool:
return True