Workspace ================= .. currentmodule:: axioma.gui .. class:: Workspace Представление рабочего пространства во внутреннем формате. Используется как промежуточный контейнер при запаси или чтении рабочего пространства в формат MWS. .. py:method:: clear() Очистка всего внутреннего содержания .. py:method:: loadFile(filename) Чтение из внешнего файла WMS во внутренний формат представления информации :param filename: Наименование файла в файловой системе :type filename: :class:`str` .. py:method:: saveFile(filename) Запись внутренного представления рабочего пространства во внешний файл формата WMS :param filename: Наименование файла в файловой системе :type filename: :class:`str` .. Чтение ###### Для **чтения** рабочего набора из внешнего файла необходимо последовательно произвести следующие действия: * Создать объект внутреннего представления рабочего пространства :class:`~axioma.gui.Workspace`. * В него загрузить содержимое из внешнего файла посредством :class:`~axioma.gui.Workspace.loadFile`. * Создать контекст чтения :class:`~axioma.gui.WorkspaceLoadContext` и установить для него менеджеры, куда будут создаваться объекты из рабочего набора (менеджеры карт :class:`~axioma.gui.MapViewManager`, отчетов :class:`~axioma.gui.ReportViewManager` и таблиц просмотра :class:`~axioma.gui.BrowserManager`). * Создать объект-загрузчик рабочего пространства из внутреннего представления в данные для менеджеров. * Произвести непосредственное чтение посредством метода WorkspaceLoader :class:`~axioma.gui.WorkspaceLoader.load`. Пример чтения из файла: .. code-block:: python3 # Чтение рабочего пространства из файла from axioma.core.dp import * from axioma.gui import * try: # Создаем контейнеры, куда мы будем в конечном счете загружать данные из рабочего набора catalog = DataCatalog() # Каталог с источниками данных mapManager = MapViewManager() # Менеджер карт reportManager = ReportViewManager() # Менеджер отчетов browserManager = BrowserManager() # Менеджер таблиц просмотра # Читаем рабочее пространство из файла workspaceIn = Workspace() # внутреннее представление рабочего пространства fileName = 'sampleWorkspace.mws' # Имя файла для чтения workspaceIn.loadFile(fileName) # Контекст для чтения. Устанавливаем куда мы будем сохранять прочитанное состояние context = WorkspaceLoadContext(gui, catalog) context.setMapViewManager(mapManager) context.setReportViewManager(reportManager) context.setBrowserManager(browserManager) loader = WorkspaceLoader(fileName, context) # Читаем из внутреннего представления loader.load(workspaceIn) # Контролируем зачитанную информацию из рабочего пространства print('tables={}, maps={}, reports={}, browsers={}'.format(len(catalog.allDataObjects()), len(mapManager.mapViews()), len(reportManager.views()), len(browserManager.tableWindows()))) except Exception as ex: print(ex) Запись ###### Для **записи** рабочего набора во внешний файл необходимо выполнить следующие действия: * Предварительно должны существовать каталог с данными (:class:`~axioma.core.dp.DataCatalogInterface`) и менеджеры (карт :class:`~axioma.gui.MapViewManager`, отчетов :class:`~axioma.gui.ReportViewManager` и таблиц просмотра :class:`~axioma.gui.BrowserManager`). Они должны содержать информацию о состоянии, которое будет в последствии записано в файл. * Создаем контекст для записи :class:`~axioma.gui.WorkspaceSaveContext` и установить для него менеджеры, откуда будут браться объекты для рабочего набора (менеджеры карт :class:`~axioma.gui.MapViewManager`, отчетов :class:`~axioma.gui.ReportViewManager` и таблиц просмотра :class:`~axioma.gui.BrowserManager`). * Создать объект преобразования данных контекста во внутреннюю структуру :class:`~axioma.gui.WorkspaceSaver` и произвести в него запись посредством :class:`~axioma.gui.WorkspaceSaver.save`, получив как результат :class:`~axioma.gui.Workspace`. * Произвести запись состояния :class:`~axioma.gui.Workspace` в файл посредством :class:`~axioma.gui.Workspace.saveFile`. Пример записи в файл: .. code-block:: python3 # Сохранение рабочего пространства в файл from axioma.core.dp import * from axioma.gui import * try: # Создаем контейнеры catalog = DataCatalog() # Каталог с источниками данных mapManager = MapViewManager() # Менеджер карт reportManager = ReportViewManager() # Менеджер отчетов browserManager = BrowserManager() # Менеджер таблиц просмотра # каким-то образом заполняем контейнеры либо изменяем загруженные ранее из рабочего пространства данные fileNameOut = "sampleWorkspace.mws" # Имя файла для записи # Создаем контекст для сохранения contextSave = WorkspaceSaveContext(gui, catalog) # Устанавливаем в данном контексте ссылки на существующие менеджеры contextSave.setMapViewManager(mapManager) contextSave.setReportViewManager(reportManager) contextSave.setBrowserManager(browserManager) # Создаем объект преобразования данных контекста во внутреннюю структуру saver = WorkspaceSaver(fileNameOut, contextSave) # Сохраняем во внутренний формат workspaceOut = saver.save() # Сохраняем в файл workspaceOut.saveFile(fileNameOut) except Exception as ex: print(ex)