2015-04-22 22:57:25 +00:00
|
|
|
import json
|
|
|
|
import lz4
|
|
|
|
|
|
|
|
SERIALISABLE_TYPE_BASE = 0
|
|
|
|
SERIALISABLE_TYPE_BASE_NAMED = 1
|
|
|
|
SERIALISABLE_TYPE_SHORTCUTS = 2
|
2015-05-13 20:22:39 +00:00
|
|
|
SERIALISABLE_TYPE_SUBSCRIPTION = 3
|
|
|
|
SERIALISABLE_TYPE_PERIODIC = 4
|
|
|
|
SERIALISABLE_TYPE_GALLERY_QUERY = 5
|
|
|
|
SERIALISABLE_TYPE_IMPORT_TAG_OPTIONS = 6
|
|
|
|
SERIALISABLE_TYPE_IMPORT_FILE_OPTIONS = 7
|
2015-07-22 19:40:39 +00:00
|
|
|
SERIALISABLE_TYPE_SEED_CACHE = 8
|
2015-05-20 21:31:40 +00:00
|
|
|
SERIALISABLE_TYPE_HDD_IMPORT = 9
|
2015-06-03 21:05:13 +00:00
|
|
|
SERIALISABLE_TYPE_SERVER_TO_CLIENT_CONTENT_UPDATE_PACKAGE = 10
|
|
|
|
SERIALISABLE_TYPE_SERVER_TO_CLIENT_SERVICE_UPDATE_PACKAGE = 11
|
2015-06-17 20:01:41 +00:00
|
|
|
SERIALISABLE_TYPE_MANAGEMENT_CONTROLLER = 12
|
2015-06-24 22:10:14 +00:00
|
|
|
SERIALISABLE_TYPE_GUI_SESSION = 13
|
|
|
|
SERIALISABLE_TYPE_PREDICATE = 14
|
|
|
|
SERIALISABLE_TYPE_FILE_SEARCH_CONTEXT = 15
|
|
|
|
SERIALISABLE_TYPE_EXPORT_FOLDER = 16
|
2015-08-05 18:42:35 +00:00
|
|
|
SERIALISABLE_TYPE_THREAD_WATCHER_IMPORT = 17
|
2015-08-19 21:48:21 +00:00
|
|
|
SERIALISABLE_TYPE_PAGE_OF_IMAGES_IMPORT = 18
|
2015-09-09 22:04:39 +00:00
|
|
|
SERIALISABLE_TYPE_IMPORT_FOLDER = 19
|
2015-04-22 22:57:25 +00:00
|
|
|
|
|
|
|
SERIALISABLE_TYPES_TO_OBJECT_TYPES = {}
|
|
|
|
|
2015-06-03 21:05:13 +00:00
|
|
|
def CreateFromNetworkString( network_string ):
|
2015-05-13 20:22:39 +00:00
|
|
|
|
2015-06-03 21:05:13 +00:00
|
|
|
obj_string = lz4.loads( network_string )
|
|
|
|
|
|
|
|
return CreateFromString( obj_string )
|
|
|
|
|
|
|
|
def CreateFromString( obj_string ):
|
|
|
|
|
|
|
|
obj_tuple = json.loads( obj_string )
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
return CreateFromSerialisableTuple( obj_tuple )
|
2015-06-03 21:05:13 +00:00
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
def CreateFromSerialisableTuple( obj_tuple ):
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
if len( obj_tuple ) == 3:
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
( serialisable_type, version, serialisable_info ) = obj_tuple
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
obj = SERIALISABLE_TYPES_TO_OBJECT_TYPES[ serialisable_type ]()
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
( serialisable_type, name, version, serialisable_info ) = obj_tuple
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
obj = SERIALISABLE_TYPES_TO_OBJECT_TYPES[ serialisable_type ]( name )
|
|
|
|
|
2015-05-13 20:22:39 +00:00
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
obj.InitialiseFromSerialisableInfo( version, serialisable_info )
|
2015-05-13 20:22:39 +00:00
|
|
|
|
|
|
|
return obj
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
def DumpToNetworkString( obj ):
|
|
|
|
|
|
|
|
obj_string = DumpToString( obj )
|
|
|
|
|
|
|
|
return lz4.dumps( obj_string )
|
|
|
|
|
|
|
|
def DumpToString( obj ):
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
obj_tuple = GetSerialisableTuple( obj )
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
return json.dumps( obj_tuple )
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
def GetSerialisableTuple( obj ):
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
if isinstance( obj, SerialisableBaseNamed ):
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
return ( obj.SERIALISABLE_TYPE, obj.GetName(), obj.SERIALISABLE_VERSION, obj.GetSerialisableInfo() )
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
else:
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
return ( obj.SERIALISABLE_TYPE, obj.SERIALISABLE_VERSION, obj.GetSerialisableInfo() )
|
2015-06-03 21:05:13 +00:00
|
|
|
|
|
|
|
|
2015-04-22 22:57:25 +00:00
|
|
|
class SerialisableBase( object ):
|
|
|
|
|
|
|
|
SERIALISABLE_TYPE = SERIALISABLE_TYPE_BASE
|
2015-06-03 21:05:13 +00:00
|
|
|
SERIALISABLE_VERSION = 1
|
2015-04-22 22:57:25 +00:00
|
|
|
|
|
|
|
def _GetSerialisableInfo( self ):
|
|
|
|
|
|
|
|
raise NotImplementedError()
|
|
|
|
|
|
|
|
|
|
|
|
def _InitialiseFromSerialisableInfo( self, serialisable_info ):
|
|
|
|
|
|
|
|
raise NotImplementedError()
|
|
|
|
|
|
|
|
|
2015-07-22 19:40:39 +00:00
|
|
|
def _UpdateSerialisableInfo( self, version, old_serialisable_info ):
|
2015-04-22 22:57:25 +00:00
|
|
|
|
2015-07-22 19:40:39 +00:00
|
|
|
return old_serialisable_info
|
2015-04-22 22:57:25 +00:00
|
|
|
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
def GetSerialisableInfo( self ):
|
2015-04-22 22:57:25 +00:00
|
|
|
|
|
|
|
serialisable_info = self._GetSerialisableInfo()
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
return serialisable_info
|
2015-04-22 22:57:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
def GetTypeAndVersion( self ):
|
|
|
|
|
2015-06-03 21:05:13 +00:00
|
|
|
return ( self.SERIALISABLE_TYPE, self.SERIALISABLE_VERSION )
|
2015-05-13 20:22:39 +00:00
|
|
|
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
def InitialiseFromSerialisableInfo( self, version, serialisable_info ):
|
2015-04-22 22:57:25 +00:00
|
|
|
|
2015-07-22 19:40:39 +00:00
|
|
|
while version < self.SERIALISABLE_VERSION:
|
2015-04-22 22:57:25 +00:00
|
|
|
|
2015-07-22 19:40:39 +00:00
|
|
|
( version, serialisable_info ) = self._UpdateSerialisableInfo( version, serialisable_info )
|
2015-04-22 22:57:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
self._InitialiseFromSerialisableInfo( serialisable_info )
|
|
|
|
|
|
|
|
|
|
|
|
class SerialisableBaseNamed( SerialisableBase ):
|
|
|
|
|
|
|
|
SERIALISABLE_TYPE = SERIALISABLE_TYPE_BASE_NAMED
|
|
|
|
|
|
|
|
def __init__( self, name ):
|
|
|
|
|
|
|
|
SerialisableBase.__init__( self )
|
|
|
|
|
|
|
|
self._name = name
|
|
|
|
|
|
|
|
|
|
|
|
def GetName( self ): return self._name
|
|
|
|
|
|
|
|
def SetName( self, name ): self._name = name
|
|
|
|
|