Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @dataclass_json
- @dataclasses.dataclass
- class SnapshotMetadata:
- archive_time: str = ''
- archive_user: str = ''
- block_cnt_new: int = 0
- block_cnt_total: int = 0
- block_list: list = dataclasses.field(default_factory = lambda: [])
- close_time: str = ''
- close_user: str = ''
- create_time: str = ''
- create_user: str = ''
- field_snapshot_type: str = 'pd'
- new_block_list: list = dataclasses.field(default_factory = lambda: [])
- opened: bool = 1
- snapshot_block_types: list = dataclasses.field(default_factory = lambda: ['dft_inserted', 'lif_inserted', 'post_dfm'])
- snapshot_desc: str = "This is a default snapshot description, please change it with <snapshot config set snapshot_desc>"
- snapshot_parent: str = ''
- snapshot_target: list = dataclasses.field(default_factory = lambda: ['pd', 'top'])
- snapshot_type: str = 'pd'
- update_time: str = ''
- update_user: str = ''
- views: list = dataclasses.field(default_factory = lambda: ['db', 'lef', 'def', 'netlist', 'spef', 'gds'])
- views_mandatory: list = dataclasses.field(default_factory = lambda: ['db'])
- @dataclass_json
- @dataclasses.dataclass
- class View:
- name: str = ''
- path: str = ''
- view_metadata: dict = dataclasses.field(default_factory = lambda: {
- 'owner': '',
- 'pnr_rev': '',
- 'pnr_rev_id': 0,
- 'view_revision': 0})
- @dataclass_json
- @dataclasses.dataclass
- class Block:
- name: str = ''
- block_type: str = ''
- views: List[View] = dataclasses.field(default_factory = lambda: [])
- @dataclass_json
- @dataclasses.dataclass
- class SnapshotData:
- '''Class for storing & manipulating snapshot data with constructor
- and methods (ex: eq method) created automatically'''
- name: str = ''
- snapshot_blocks: List[Block] = dataclasses.field(default_factory = lambda: [])
- snapshot_metadata: SnapshotMetadata = SnapshotMetadata()
- def create_dict(self):
- dict_object = dataclasses.asdict(self)
- new_dict = {}
- new_dict['snapshot'] = dict_object
- return new_dict
- def write_to_file(self, snap_name, type):
- snapshot_path = _get_global_snapshot_path(snap_name, type)
- # check if the parent of the file exists; if not, it will be created
- if not os.path.exists(os.path.dirname(os.path.abspath(snapshot_path))):
- try:
- os.mkdir(os.path.dirname(os.path.abspath(snapshot_path)))
- except:
- print('Error: Could not create the parent directory of the snapshot. \
- Please enter a valid path to the parent directory.')
- sys.exit()
- # write the data to file
- with open(snapshot_path, 'w+') as snap_data_file:
- yaml.dump(self.create_dict(), snap_data_file, default_flow_style=False)
- print('Snapshot created/updated at %s' % snapshot_path)
- @classmethod
- def load_dict_from_file(cls, path):
- with open(path, 'r') as file:
- snapshot_dict = yaml.load(file, Loader=yaml.FullLoader)['snapshot']
- #print(snapshot_dict)
- # return SnapshotData(**snapshot_dict)
- return cls.from_dict(snapshot_dict)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement