[docs]classDescriptorManager:""" A class to manage file descriptors and their associated streams. :param ObjectsManager objects_manager: The objects manager. :param FilesystemManager filesystem_manager: The filesystem manager. """def__init__(self,objects_manager:"ObjectsManager",filesystem_manager:"FilesystemManager"):""" Initialize the descriptor manager. :param ObjectsManager objects_manager: The objects manager. :param FilesystemManager filesystem_manager: The filesystem manager. """self.objects_manager=objects_managerself.filesystem_manager=filesystem_managerself.descriptors:dict[int,Stream]={}
[docs]defadd(self,fd:int,stream:Stream):""" Add a stream to the descriptor manager. :param int fd: The file descriptor. :param Stream stream: The stream to add. """self.descriptors[int(fd)]=stream
[docs]deffrom_json(self,data:dict):""" Load the descriptor manager from a JSON-serializable dictionary. :param dict data: The JSON-serializable dictionary to load from. """forfd,stream_dataindata.items():try:stream=Stream.from_json(stream_data,self.objects_manager,self.filesystem_manager)exceptWorkflowParsingErrorase:e.set_data("fd",fd)raiseeself.add(int(fd),stream)
[docs]defto_json(self)->dict:""" Convert the descriptor manager to a JSON-serializable dictionary. """# Convert the fd numbers to strings, since in JSON keys cant be ints.return{str(fd):stream.to_json()forfd,streaminself.descriptors.items()}
[docs]defitems(self)->ItemsView[int,"Stream"]:""" Get the items in the descriptor manager. :return: A view of the descriptor manager's items. """returnself.descriptors.items()
[docs]defall(self)->dict[int,"Stream"]:""" Get all the streams in the descriptor manager. :return: A dictionary of all the streams in the descriptor manager. """returnself.descriptors
[docs]defget(self,fd:int)->"Stream":""" Get a stream by its file descriptor. :param int fd: The file descriptor. :return: The stream associated with the file descriptor. """returnself.descriptors.get(fd)
[docs]defsize(self)->int:""" Get the number of streams in the descriptor manager. :return: The number of streams in the descriptor manager. """returnlen(self.descriptors)