scripts/ui/project.py (40 lines of code) (raw):

#!/usr/bin/env python3 # Copyright 2004-present Facebook. All Rights Reserved. # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. """Project class that allows S3 data verification from the host. Example: project = Project( FLAGS.project_root, FLAGS.cache, FLAGS.csv_path, FLAGS.s3_sample_frame, FLAGS.s3_ignore_fullsize_color, FLAGS.verbose, ) project.verify() """ import os import pickle import sys dir_scripts = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) dir_root = os.path.dirname(dir_scripts) sys.path.append(dir_root) sys.path.append(os.path.join(dir_scripts, "render")) import verify_data from scripts.aws.util import AWSUtil from scripts.render.network import Address class Project: """Project class to interact with S3""" def __init__( self, project_root, cache, csv_path, s3_sample_frame, s3_ignore_fullsize_color, verbose, ): """Project class to interact with S3 Args: project_root (str): Path of the project. cache (str): Path of the local cache. csv_path (str): Path to AWS credentials .csv file s3_sample_frame (str): Sample frame to donwload (empty = first found) s3_ignore_fullsize_color (bool): Boolean to ignore full-size colors verbose (bool): Verbose output """ project_address = Address(project_root) self.is_aws = project_address.protocol == "s3" self.is_lan = project_address.protocol == "smb" self.project_root = project_root self.path_project = os.path.join(cache, project_address.path) self.s3_sample_frame = s3_sample_frame self.s3_ignore_fullsize_color = s3_ignore_fullsize_color self.verbose = verbose if self.is_aws: self.aws_util = AWSUtil(csv_path, s3_url=self.project_root) self.aws_util.configure_shell(run_silently=not verbose) verify_data.set_default_top_level_paths(self) def verify(self, pickle_frames=True): """Verify S3 data, including downloading and unpacking sample frames""" verify_data.verify(self) if pickle_frames: dict_all = self.__dict__ dict_project = {k: v for k, v in dict_all.items() if k != "aws_util"} pickle_fn = os.path.join(self.path_project, "project.pickle") with open(pickle_fn, "wb") as f: pickle.dump(dict_project, f, pickle.HIGHEST_PROTOCOL)