Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.18 KB | None | 0 0
  1. @dataclass_json
  2. @dataclasses.dataclass
  3. class SnapshotMetadata:
  4. archive_time: str = ''
  5. archive_user: str = ''
  6. block_cnt_new: int = 0
  7. block_cnt_total: int = 0
  8. block_list: list = dataclasses.field(default_factory = lambda: [])
  9. close_time: str = ''
  10. close_user: str = ''
  11. create_time: str = ''
  12. create_user: str = ''
  13. field_snapshot_type: str = 'pd'
  14. new_block_list: list = dataclasses.field(default_factory = lambda: [])
  15. opened: bool = 1
  16. snapshot_block_types: list = dataclasses.field(default_factory = lambda: ['dft_inserted', 'lif_inserted', 'post_dfm'])
  17. snapshot_desc: str = "This is a default snapshot description, please change it with <snapshot config set snapshot_desc>"
  18. snapshot_parent: str = ''
  19. snapshot_target: list = dataclasses.field(default_factory = lambda: ['pd', 'top'])
  20. snapshot_type: str = 'pd'
  21. update_time: str = ''
  22. update_user: str = ''
  23. views: list = dataclasses.field(default_factory = lambda: ['db', 'lef', 'def', 'netlist', 'spef', 'gds'])
  24. views_mandatory: list = dataclasses.field(default_factory = lambda: ['db'])
  25.  
  26. @dataclass_json
  27. @dataclasses.dataclass
  28. class View:
  29. name: str = ''
  30. path: str = ''
  31. view_metadata: dict = dataclasses.field(default_factory = lambda: {
  32. 'owner': '',
  33. 'pnr_rev': '',
  34. 'pnr_rev_id': 0,
  35. 'view_revision': 0})
  36.  
  37. @dataclass_json
  38. @dataclasses.dataclass
  39. class Block:
  40. name: str = ''
  41. block_type: str = ''
  42. views: List[View] = dataclasses.field(default_factory = lambda: [])
  43.  
  44. @dataclass_json
  45. @dataclasses.dataclass
  46. class SnapshotData:
  47. '''Class for storing & manipulating snapshot data with constructor
  48. and methods (ex: eq method) created automatically'''
  49.  
  50. name: str = ''
  51. snapshot_blocks: List[Block] = dataclasses.field(default_factory = lambda: [])
  52. snapshot_metadata: SnapshotMetadata = SnapshotMetadata()
  53.  
  54. def create_dict(self):
  55. dict_object = dataclasses.asdict(self)
  56. new_dict = {}
  57. new_dict['snapshot'] = dict_object
  58. return new_dict
  59.  
  60. def write_to_file(self, snap_name, type):
  61. snapshot_path = _get_global_snapshot_path(snap_name, type)
  62.  
  63. # check if the parent of the file exists; if not, it will be created
  64. if not os.path.exists(os.path.dirname(os.path.abspath(snapshot_path))):
  65. try:
  66. os.mkdir(os.path.dirname(os.path.abspath(snapshot_path)))
  67. except:
  68. print('Error: Could not create the parent directory of the snapshot. \
  69. Please enter a valid path to the parent directory.')
  70. sys.exit()
  71. # write the data to file
  72. with open(snapshot_path, 'w+') as snap_data_file:
  73. yaml.dump(self.create_dict(), snap_data_file, default_flow_style=False)
  74. print('Snapshot created/updated at %s' % snapshot_path)
  75.  
  76.  
  77. @classmethod
  78. def load_dict_from_file(cls, path):
  79. with open(path, 'r') as file:
  80. snapshot_dict = yaml.load(file, Loader=yaml.FullLoader)['snapshot']
  81. #print(snapshot_dict)
  82. # return SnapshotData(**snapshot_dict)
  83. return cls.from_dict(snapshot_dict)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement