| |
| """ |
| Random name manager |
| |
| Used for produce protocols |
| """ |
| from __future__ import absolute_import |
|
|
| import os |
| import sys |
| from core_scripts.other_tools import list_tools |
| from core_scripts.data_io import io_tools |
|
|
| __author__ = "Xin Wang" |
| __email__ = "wangxin@nii.ac.jp" |
| __copyright__ = "Copyright 2021, Xin Wang" |
|
|
| def list_loader(list_file): |
| """ output_list = list_loader(list_file) |
| Load a text file as a list of string. This function will use __cache to save |
| the loaded list |
| |
| Args: |
| list_file: str, path to the input text file |
| Return: |
| output_list: list, |
| |
| Note, a __cache will be created along list_file |
| """ |
| cache_dir = os.path.join(os.path.dirname(list_file), '__cache') |
| return io_tools.wrapper_data_load_with_cache( |
| list_file, list_tools.read_list_from_text, cache_dir) |
|
|
| class RandomNameMgn: |
| """ Class to manage the list of random file names |
| """ |
| def __init__(self, file_random_name_list, verbose=False): |
| """ RandomNameMgn(file_random_name_list, verbose=False) |
| Create a random name manager |
| |
| Args: |
| file_random_name_list: str, path to the text file of random names. |
| verbose: bool, default False, print information during initialziation |
| """ |
| if verbose: |
| print("Loading random name tables") |
| |
| |
| |
| self.unused_entries = list_loader(file_random_name_list) |
| |
| self.mapper = {x : None for x in self.unused_entries} |
| |
| self.mapper_rev = {} |
|
|
| |
| if verbose: |
| self.print_info() |
|
|
| self.verbose = verbose |
| |
| return |
|
|
| def print_info(self): |
| mes = "Number of unused random file names: {:d}".format( |
| len(self.unused_entries)) |
| print(mes) |
| return |
|
|
| def retrieve_rand_name(self, filename): |
| """ rand_name = retrieve_rand_name(filename) |
| |
| filename: str, input, input file name |
| rand_name: str, output, the random file name |
| """ |
| if filename in self.mapper_rev: |
| return self.mapper_rev[filename] |
| else: |
| rand_name = self.unused_entries.pop() |
| self.mapper[rand_name] = filename |
| self.mapper_rev[filename]= rand_name |
| return rand_name |
|
|
| def save_unused_name(self, save_file): |
| """ save_unused_name(save_file) |
| |
| save_file: str, input, the path to save random names that |
| have NOT been used |
| """ |
| with open(save_file, 'w') as file_ptr: |
| for entry in self.unused_entries: |
| file_ptr.write(entry+'\n') |
| |
| if self.verbose: |
| self.print_info() |
| print("Save unused random names to {:s}".format(save_file)) |
| return |
| |
| def retrieve_filename(self, random_name): |
| if random_name in self.mapper: |
| return self.mapper[random_name] |
| else: |
| print("Random name {:s} has not been logged".format(random_name)) |
| sys.exit(1) |
| |
| if __name__ == "__main__": |
| print("") |
|
|