Skip to content

Commit 5752f59

Browse files
committed
remove storage logic (like JSON and database) to own folder - tests not yet integrated
1 parent 661dcfc commit 5752f59

File tree

12 files changed

+112
-715
lines changed

12 files changed

+112
-715
lines changed

hololinked/core/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@
22
from .events import *
33
from .actions import *
44
from .property import *
5-
from .database import *
65
from .thing import *
76
from .meta import ThingMeta

hololinked/core/dataklasses.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
resources on the network. These classese are generally not for consumption by the package-end-user.
44
"""
55
import typing
6-
import platform
76
import warnings
8-
import inspect
97
from enum import Enum
108
from dataclasses import dataclass, fields
119
from types import FunctionType, MethodType

hololinked/core/meta.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -547,8 +547,10 @@ def get_from_DB(self) -> typing.Dict[str, typing.Any]:
547547
final_list = {}
548548
for name, prop in props.items():
549549
try:
550-
serializer = Serializers.for_object(self.owner_inst.id, self.owner_cls.__name__, name)
551-
final_list[name] = serializer.loads(prop)
550+
# serializer = Serializers.for_object(self.owner_inst.id, self.owner_cls.__name__, name)
551+
# if name in self.db_commit_objects:
552+
# continue
553+
final_list[name] = prop
552554
except Exception as ex:
553555
self.owner_inst.logger.error(
554556
f"could not deserialize property {name} due to error - {str(ex)}, skipping this property"
@@ -568,8 +570,8 @@ def load_from_DB(self):
568570
get_missing_property_names=True
569571
)
570572
# 4. read db_init and db_persist objects
571-
with edit_constant_parameters(self):
572-
for db_prop, value in self.get_from_DB():
573+
with edit_constant_parameters(self.owner_inst):
574+
for db_prop, value in self.get_from_DB().items():
573575
try:
574576
if db_prop not in missing_properties:
575577
setattr(self.owner_inst, db_prop, value) # type: ignore

hololinked/core/thing.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,13 @@ class attribute.
8787
any database credentials. `use_default_db` value can also be set as a class attribute.
8888
- db_config_file: `str`, optional.
8989
if not using a default database, supply a JSON configuration file to create a database connection. Check documentaion
90-
of `hololinked.core.database`.
90+
of `hololinked.core.database`.
91+
- use_json_file: bool, Default False
92+
if True, a JSON file will be used as the property storage instead of a database. This value can also be
93+
set as a class attribute.
94+
- json_filename: str, optional
95+
If using JSON storage, this filename is used to persist property values. If not provided, a default filename
96+
is generated based on the instance name.
9197
"""
9298
Propertized.__init__(self, id=id, logger=logger, **kwargs)
9399
RemoteInvokable.__init__(self)
@@ -100,7 +106,8 @@ class attribute.
100106

101107
from .logger import prepare_object_logger
102108
from .state_machine import prepare_object_FSM
103-
from .database import prepare_object_database
109+
from ..storage import prepare_object_storage
110+
104111
prepare_object_logger(
105112
instance=self,
106113
log_level=kwargs.get('log_level', None),
@@ -112,7 +119,9 @@ class attribute.
112119
)
113120
)
114121
prepare_object_FSM(self)
115-
prepare_object_database(self, kwargs.get('use_default_db', False), kwargs.get('db_config_file', None))
122+
prepare_object_storage(self, **kwargs) # use_default_db, db_config_file, use_json_file, json_filename
123+
# choose storage type, if use_json_file is True - use JSON storage, else - use database
124+
116125

117126
# thing._qualified_id = f'{self._qualified_id}/{thing.id}'
118127

@@ -121,9 +130,11 @@ def __post_init__(self):
121130
from .zmq.rpc_server import RPCServer
122131
from .events import EventPublisher
123132
from .logger import RemoteAccessHandler
133+
from ..storage.database import prepare_object_database, ThingDB
124134
# Type definitions
125135
self.rpc_server = None # type: typing.Optional[RPCServer]
126136
self.event_publisher = None # type: typing.Optional[EventPublisher]
137+
self.db_engine: typing.Optional[ThingDB]
127138
self._owners = None if not hasattr(self, '_owners') else self._owners # type: typing.Optional[typing.List[Thing]]
128139
self._remote_access_loghandler: typing.Optional[RemoteAccessHandler]
129140
self._internal_fixed_attributes: typing.List[str]

hololinked/serializers/serializers.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -532,10 +532,11 @@ def register_for_thing_instance(cls, thing_id: str, serializer: BaseSerializer)
532532
"""
533533
cls.object_serializer_map[thing_id] = serializer
534534

535+
535536
@classmethod
536537
def reset(cls) -> None:
537538
"""
538-
Reset the serializer registry. This is useful for testing purposes to clear the registry and start fresh.
539+
Reset the serializer registry.
539540
"""
540541
cls.object_content_type_map.clear()
541542
cls.object_serializer_map.clear()

0 commit comments

Comments
 (0)