Exemple #1
0
    def __init__(self,
                 storage_system=None,
                 storage_cache=None,
                 *,
                 auto_project: bool = True):
        super().__init__()

        self.define_root_context()
        self.define_type("profile")
        self.define_relationship("workspaces", WorkspaceLayout.factory)
        self.define_relationship("data_groups", DataGroup.data_group_factory)
        self.define_relationship("project_references",
                                 project_reference_factory,
                                 insert=self.__insert_project_reference,
                                 remove=self.__remove_project_reference)
        self.define_property("workspace_uuid",
                             converter=Converter.UuidToStringConverter())
        self.define_property(
            "data_item_references", dict(), hidden=True
        )  # map string key to data item, used for data acquisition channels
        self.define_property(
            "data_item_variables", dict(), hidden=True
        )  # map string key to data item, used for reference in scripts
        self.define_property("target_project_reference_uuid",
                             converter=Converter.UuidToStringConverter(),
                             changed=self.__property_changed)
        self.define_property("work_project_reference_uuid",
                             converter=Converter.UuidToStringConverter(),
                             changed=self.__property_changed)
        self.define_property("closed_items", list())

        self.storage_system = storage_system or FileStorageSystem.MemoryPersistentStorageSystem(
        )
        self.storage_system.load_properties()

        self.__work_project_reference: typing.Optional[ProjectReference] = None
        self.__target_project_reference: typing.Optional[
            ProjectReference] = None

        self.storage_cache = storage_cache or Cache.DictStorageCache(
        )  # need to deallocate
        self.set_storage_system(self.storage_system)

        self.__document_model = None
        self.profile_context = None

        # helper object to produce the projects sequence
        oo = Observer.ObserverBuilder()
        oo.source(self).ordered_sequence_from_array("project_references").map(
            oo.x.prop("project")).filter(lambda x: x is not None).trampoline(
                self, "projects")
        self.__projects_observer = oo.make_observable()

        self.__is_read = False

        if auto_project:
            self.profile_context = MemoryProfileContext()
            project_reference = self.add_project_memory()
            self.work_project_reference_uuid = project_reference.uuid
            self.target_project_reference_uuid = project_reference.uuid
Exemple #2
0
 def __init__(self,
              source=None,
              source_property=None,
              target=None,
              target_property=None,
              *,
              parent=None):
     super().__init__("property-connection", parent=parent)
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("source_property")
     self.define_property("target_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("target_property")
     # these are only set in persistent object context changed
     self.__source = None
     self.__target = None
     self.__binding = None
     self.__target_property_changed_listener = None
     self.__registration_listener = None
     # suppress messages while we're setting source or target
     self.__suppress = False
     # but setup if we were passed objects
     if source is not None:
         self.source_uuid = source.uuid
     if source_property:
         self.source_property = source_property
     if target is not None:
         self.target_uuid = target.uuid
     if target_property:
         self.target_property = target_property
Exemple #3
0
    def __init__(
            self,
            storage_system: typing.Optional[
                FileStorageSystem.PersistentStorageSystem] = None,
            storage_cache: typing.Optional[Cache.CacheLike] = None,
            *,
            profile_context: typing.Optional[ProfileContext] = None) -> None:
        super().__init__()
        self.__class__.count += 1

        self.define_root_context()
        self.define_type("profile")
        self.define_property("last_project_reference",
                             converter=Converter.UuidToStringConverter(),
                             hidden=True)
        self.define_property("work_project_reference_uuid",
                             converter=Converter.UuidToStringConverter(),
                             hidden=True)
        self.define_property("closed_items", list(), hidden=True)
        self.define_property("script_items_updated",
                             False,
                             changed=self.__property_changed,
                             hidden=True)
        self.define_relationship("project_references",
                                 project_reference_factory,
                                 insert=self.__insert_project_reference,
                                 remove=self.__remove_project_reference,
                                 hidden=True)
        self.define_relationship(
            "script_items",
            typing.cast(
                typing.Callable[[typing.Callable[[str], str]],
                                typing.Optional[Persistence.PersistentObject]],
                script_item_factory),
            hidden=True)

        self.storage_system = storage_system or FileStorageSystem.MemoryPersistentStorageSystem(
        )
        self.storage_system.load_properties()

        self.storage_cache: typing.Any = storage_cache or Cache.DictStorageCache(
        )  # need to deallocate
        self.set_storage_system(self.storage_system)

        self.profile_context = None

        # helper object to produce the projects sequence
        oo = Observer.ObserverBuilder()
        oo.source(typing.cast(
            Observer.ItemValue,
            self)).ordered_sequence_from_array("project_references").map(
                oo.x.prop("project")).filter(
                    lambda x: x is not None).trampoline(self, "projects")
        self.__projects_observer = oo.make_observable()

        if profile_context:
            self.profile_context = profile_context
            self.add_project_memory()
Exemple #4
0
 def __init__(self, expression: str = None):
     super().__init__()
     self.__container_weak_ref = None
     self.about_to_be_removed_event = Event.Event()
     self.about_to_cascade_delete_event = Event.Event()
     self._about_to_be_removed = False
     self._closed = False
     self.define_type("computation")
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("original_expression", expression)
     self.define_property("error_text",
                          hidden=True,
                          changed=self.__error_changed)
     self.define_property("label", changed=self.__label_changed)
     self.define_property("processing_id")  # see note above
     self.define_relationship("variables", variable_factory)
     self.define_relationship("results", result_factory)
     self.__source = None
     self.__variable_changed_event_listeners = dict()
     self.__variable_needs_rebind_event_listeners = dict()
     self.__result_needs_rebind_event_listeners = dict()
     self.last_evaluate_data_time = 0
     self.needs_update = expression is not None
     self.computation_mutated_event = Event.Event()
     self.computation_output_changed_event = Event.Event()
     self.variable_inserted_event = Event.Event()
     self.variable_removed_event = Event.Event()
     self.is_initial_computation_complete = threading.Event(
     )  # helpful for waiting for initial computation
     self._evaluation_count_for_test = 0
     self.target_output = None
     self._inputs = set(
     )  # used by document model for tracking dependencies
     self._outputs = set()
Exemple #5
0
 def __init__(self, display_item=None, line_profile=None, *, parent=None):
     super().__init__("interval-list-connection", parent=parent)
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("target_uuid",
                          converter=Converter.UuidToStringConverter())
     # these are only set in persistent object context changed
     self.__source = display_item
     self.__target = line_profile
     self.__item_inserted_event_listener = None
     self.__item_removed_event_listener = None
     self.__interval_mutated_listeners = list()
     # but setup if we were passed objects
     if display_item is not None:
         self.source_uuid = display_item.uuid
     if line_profile is not None:
         self.target_uuid = line_profile.uuid
Exemple #6
0
 def __init__(self, type: str):
     super().__init__()
     self.define_type(type)
     self.define_property("project_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("is_active",
                          False,
                          changed=self.__property_changed)
     self.__project: typing.Optional[Project.Project] = None
Exemple #7
0
 def secondary_specifier_uuid_str(self, value):
     converter = Converter.UuidToStringConverter()
     value = converter.convert(converter.convert_back(value))
     if self.secondary_specifier_uuid_str != value and self.secondary_specifier:
         secondary_specifier = self.secondary_specifier
         if value:
             secondary_specifier["uuid"] = value
         else:
             secondary_specifier.pop("uuid", None)
         self.secondary_specifier = secondary_specifier
Exemple #8
0
    def __init__(self, storage_system: FileStorageSystem.ProjectStorageSystem):
        super().__init__()

        self.define_type("project")
        self.define_property("title", str())
        self.define_relationship("data_items",
                                 data_item_factory,
                                 insert=self.__data_item_inserted,
                                 remove=self.__data_item_removed)
        self.define_relationship("display_items",
                                 display_item_factory,
                                 insert=self.__display_item_inserted,
                                 remove=self.__display_item_removed)
        self.define_relationship("computations",
                                 computation_factory,
                                 insert=self.__computation_inserted,
                                 remove=self.__computation_removed)
        self.define_relationship("data_structures",
                                 data_structure_factory,
                                 insert=self.__data_structure_inserted,
                                 remove=self.__data_structure_removed)
        self.define_relationship("connections",
                                 Connection.connection_factory,
                                 insert=self.__connection_inserted,
                                 remove=self.__connection_removed)
        self.define_relationship("data_groups",
                                 DataGroup.data_group_factory,
                                 insert=self.__data_group_inserted,
                                 remove=self.__data_group_removed)
        self.define_relationship("workspaces", WorkspaceLayout.factory)
        self.define_property("workspace_uuid",
                             converter=Converter.UuidToStringConverter())
        self.define_property(
            "data_item_references",
            dict(),
            hidden=True,
            changed=self.__property_changed
        )  # map string key to data item, used for data acquisition channels
        self.define_property(
            "mapped_items", list(), changed=self.__property_changed
        )  # list of item references, used for shortcut variables in scripts

        self.handle_start_read = None
        self.handle_insert_model_item = None
        self.handle_remove_model_item = None
        self.handle_finish_read = None

        self.__has_been_read = False

        self._raw_properties = None  # debugging

        self.__storage_system = storage_system

        self.set_storage_system(self.__storage_system)
Exemple #9
0
 def resolve_variable(
         self,
         object_specifier: dict) -> typing.Optional[ComputationVariable]:
     if object_specifier:
         uuid_str = object_specifier.get("uuid")
         uuid_ = Converter.UuidToStringConverter().convert_back(
             uuid_str) if uuid_str else None
         if uuid_:
             for variable in self.variables:
                 if variable.uuid == uuid_:
                     return variable
     return None
Exemple #10
0
    def __init__(self,
                 storage_system=None,
                 storage_cache=None,
                 *,
                 profile_context: typing.Optional[ProfileContext] = None):
        super().__init__()
        self.__class__.count += 1

        self.define_root_context()
        self.define_type("profile")
        self.define_relationship("project_references",
                                 project_reference_factory,
                                 insert=self.__insert_project_reference,
                                 remove=self.__remove_project_reference)
        self.define_property("last_project_reference",
                             converter=Converter.UuidToStringConverter())
        self.define_property("work_project_reference_uuid",
                             converter=Converter.UuidToStringConverter())
        self.define_property("closed_items", list())

        self.storage_system = storage_system or FileStorageSystem.MemoryPersistentStorageSystem(
        )
        self.storage_system.load_properties()

        self.storage_cache = storage_cache or Cache.DictStorageCache(
        )  # need to deallocate
        self.set_storage_system(self.storage_system)

        self.profile_context = None

        # helper object to produce the projects sequence
        oo = Observer.ObserverBuilder()
        oo.source(self).ordered_sequence_from_array("project_references").map(
            oo.x.prop("project")).filter(lambda x: x is not None).trampoline(
                self, "projects")
        self.__projects_observer = oo.make_observable()

        if profile_context:
            self.profile_context = profile_context
            self.add_project_memory()
Exemple #11
0
 def __init__(self, type, *, parent=None):
     super().__init__()
     self.__container_weak_ref = None
     self.about_to_be_removed_event = Event.Event()
     self.about_to_cascade_delete_event = Event.Event()
     self._about_to_be_removed = False
     self._closed = False
     self.__registration_listener = None
     self.define_type(type)
     self.define_property("parent_uuid",
                          converter=Converter.UuidToStringConverter())
     self.__parent = parent
     if parent is not None:
         self.parent_uuid = parent.uuid
Exemple #12
0
 def __init__(self, type: str):
     super().__init__()
     self.define_type(type)
     self.define_property("project_uuid",
                          converter=Converter.UuidToStringConverter())
     self.define_property("last_used",
                          None,
                          converter=Converter.DatetimeToStringConverter())
     self.__has_project_info_been_read = False
     self.__project_version = None
     self.__project_state = "invalid"
     self.__document_model: typing.Optional[
         DocumentModel.DocumentModel] = None
     self.__document_model_about_to_close_listener = None
     self.storage_cache = None
Exemple #13
0
 def __init__(self, type: str) -> None:
     super().__init__()
     self.define_type(type)
     self.define_property("project_uuid",
                          converter=Converter.UuidToStringConverter(),
                          hidden=True)
     self.define_property("last_used",
                          None,
                          converter=Converter.DatetimeToStringConverter(),
                          hidden=True)
     self.__has_project_info_been_read = False
     self.__project_version: typing.Optional[int] = None
     self.__project_state = "invalid"
     self.__document_model: typing.Optional[
         DocumentModel.DocumentModel] = None
     self.storage_cache: typing.Optional[Cache.CacheLike] = None
Exemple #14
0
def dict_value(type: str, value: typing.Any) -> DictValue:
    if value is None:
        return None
    if type in (SET, ):
        return list(value)
    if type in (BOOLEAN, ):
        return bool(value)
    if type in (INT, ):
        return int(value)
    if type in (FLOAT, ):
        return float(value)
    if type in (TIMESTAMP, ):
        return Converter.DatetimeToStringConverter().convert(value)
    if type in (UUID, ):
        return Converter.UuidToStringConverter().convert(value)
    if type in (PATH, ):
        return Converter.PathToStringConverter().convert(value)
    return typing.cast(DictValue, value)
Exemple #15
0
def build_value(type: str, value: typing.Any) -> typing.Any:
    if value is None:
        return None
    if type in (SET, ):
        return set(value)
    if type in (BOOLEAN, ):
        return bool(value)
    if type in (INT, ):
        return int(value)
    if type in (FLOAT, ):
        return float(value)
    if type in (TIMESTAMP, ):
        return Converter.DatetimeToStringConverter().convert_back(value)
    if type in (UUID, ):
        return Converter.UuidToStringConverter().convert_back(value)
    if type in (PATH, ):
        return Converter.PathToStringConverter().convert_back(value)
    return value
Exemple #16
0
def dict_value(type: str, value):
    if value is None:
        return None
    if type in (SET, ):
        return list(value)
    if type in (BOOLEAN, ):
        return bool(value)
    if type in (INT, ):
        return int(value)
    if type in (FLOAT, ):
        return float(value)
    if type in (TIMESTAMP):
        return Converter.DatetimeToStringConverter().convert(value)
    if type in (UUID):
        return Converter.UuidToStringConverter().convert(value)
    if type in (PATH):
        return Converter.PathToStringConverter().convert(value)
    return value
Exemple #17
0
 def __init__(self, *, structure_type: str = None, source=None):
     super().__init__()
     self.__container_weak_ref = None
     self.about_to_be_removed_event = Event.Event()
     self.about_to_cascade_delete_event = Event.Event()
     self._about_to_be_removed = False
     self._closed = False
     self.__properties = dict()
     self.__referenced_objects = dict()
     self.define_type("data_structure")
     self.define_property("structure_type", structure_type)
     self.define_property("source_uuid",
                          converter=Converter.UuidToStringConverter())
     # properties is handled explicitly
     self.data_structure_changed_event = Event.Event()
     self.referenced_objects_changed_event = Event.Event()
     self.__source = source
     if source is not None:
         self.source_uuid = source.uuid
Exemple #18
0
    def __init__(
            self,
            storage_system: FileStorageSystem.ProjectStorageSystem) -> None:
        super().__init__()

        self.define_type("project")
        self.define_property("title", str(), hidden=True)
        self.define_relationship("data_items",
                                 data_item_factory,
                                 insert=self.__data_item_inserted,
                                 remove=self.__data_item_removed,
                                 hidden=True)
        self.define_relationship("display_items",
                                 display_item_factory,
                                 insert=self.__display_item_inserted,
                                 remove=self.__display_item_removed,
                                 hidden=True)
        self.define_relationship("computations",
                                 computation_factory,
                                 insert=self.__computation_inserted,
                                 remove=self.__computation_removed,
                                 hidden=True)
        self.define_relationship("data_structures",
                                 data_structure_factory,
                                 insert=self.__data_structure_inserted,
                                 remove=self.__data_structure_removed,
                                 hidden=True)
        self.define_relationship("connections",
                                 Connection.connection_factory,
                                 insert=self.__connection_inserted,
                                 remove=self.__connection_removed,
                                 hidden=True)
        self.define_relationship("data_groups",
                                 DataGroup.data_group_factory,
                                 insert=self.__data_group_inserted,
                                 remove=self.__data_group_removed,
                                 hidden=True)
        self.define_relationship("workspaces",
                                 WorkspaceLayout.factory,
                                 hidden=True)
        self.define_property("workspace_uuid",
                             converter=Converter.UuidToStringConverter(),
                             hidden=True)
        self.define_property(
            "data_item_references",
            dict(),
            changed=self.__property_changed,
            hidden=True
        )  # map string key to data item, used for data acquisition channels
        self.define_property(
            "mapped_items",
            list(),
            changed=self.__property_changed,
            hidden=True
        )  # list of item references, used for shortcut variables in scripts

        self.handle_start_read: typing.Optional[typing.Callable[[],
                                                                None]] = None
        self.handle_insert_model_item: typing.Optional[typing.Callable[[
            Persistence.PersistentContainerType, str, int, Persistence.
            PersistentObject
        ], None]] = None
        self.handle_remove_model_item: typing.Optional[typing.Callable[[
            Persistence.PersistentContainerType, str, Persistence.
            PersistentObject, bool
        ], Changes.UndeleteLog]] = None
        self.handle_finish_read: typing.Optional[typing.Callable[[],
                                                                 None]] = None

        self.__has_been_read = False

        self._raw_properties: typing.Optional[
            PersistentDictType] = None  # debugging

        self.__storage_system = storage_system

        self.set_storage_system(self.__storage_system)