def test_basics(self): def test(obj, dupe_obj): self.assertEqual(len(list(obj.items())), len(list(dupe_obj.items()))) for (key, value) in list(obj.items()): self.assertEqual(value, dupe_obj[key]) # d = HydrusSerialisable.SerialisableDictionary() d[1] = 2 d[3] = 'test1' d['test2'] = 4 d['test3'] = 5 d[6] = HydrusSerialisable.SerialisableDictionary( {i: 'test' + str(i) for i in range(20)}) d[ClientSearch.Predicate(ClientSearch.PREDICATE_TYPE_TAG, 'test pred 1')] = 56 d[ClientSearch.Predicate( ClientSearch.PREDICATE_TYPE_TAG, 'test pred 2')] = HydrusSerialisable.SerialisableList([ ClientSearch.Predicate(ClientSearch.PREDICATE_TYPE_TAG, 'test' + str(i)) for i in range(10) ]) self.assertEqual(len(list(d.keys())), 7) for (key, value) in list(d.items()): self.assertEqual(d[key], value) self._dump_and_load_and_test(d, test) # db = HydrusSerialisable.SerialisableBytesDictionary() db[HydrusData.GenerateKey()] = HydrusData.GenerateKey() db[HydrusData.GenerateKey()] = [ HydrusData.GenerateKey() for i in range(10) ] db[1] = HydrusData.GenerateKey() db[2] = [HydrusData.GenerateKey() for i in range(10)] self.assertEqual(len(list(db.keys())), 4) for (key, value) in list(db.items()): self.assertEqual(db[key], value) self._dump_and_load_and_test(db, test)
def __init__( self ): HydrusSerialisable.SerialisableBase.__init__( self ) self._column_list_types_to_statuses = HydrusSerialisable.SerialisableDictionary() # populate default values, or load them as needed when missing or whatever mate self._dirty = False
def DumpHydrusArgsToNetworkBytes(args): if not isinstance(args, HydrusSerialisable.SerialisableBase): args = HydrusSerialisable.SerialisableDictionary(args) for param_name in BYTE_PARAMS: if param_name in args: args[param_name] = args[param_name].hex() for param_name in JSON_BYTE_LIST_PARAMS: if param_name in args: args[param_name] = [item.hex() for item in args[param_name]] if 'account_types' in args: args['account_types'] = HydrusSerialisable.SerialisableList( args['account_types']) if 'account' in args: args[ 'account'] = HydrusNetwork.Account.GenerateSerialisableTupleFromAccount( args['account']) if 'accounts' in args: args['accounts'] = list( map(HydrusNetwork.Account.GenerateSerialisableTupleFromAccount, args['accounts'])) if 'service_keys_to_access_keys' in args: args['service_keys_to_access_keys'] = [ (service_key.hex(), access_key.hex()) for (service_key, access_key ) in list(args['service_keys_to_access_keys'].items()) ] if 'services' in args: args['services'] = [ service.ToSerialisableTuple() for service in args['services'] ] network_bytes = args.DumpToNetworkBytes() return network_bytes
def ParseNetworkBytesToParsedHydrusArgs(network_bytes): if len(network_bytes) == 0: return HydrusSerialisable.SerialisableDictionary() args = HydrusSerialisable.CreateFromNetworkBytes(network_bytes) if not isinstance(args, dict): raise HydrusExceptions.BadRequestException( 'The given parameter did not seem to be a JSON Object!') args = ParsedRequestArguments(args) for param_name in BYTE_PARAMS: if param_name in args: args[param_name] = bytes.fromhex(args[param_name]) for param_name in JSON_BYTE_LIST_PARAMS: if param_name in args: args[param_name] = [ bytes.fromhex(encoded_item) for encoded_item in args[param_name] ] # account_types should be a serialisable list, so it just works if 'account' in args: args[ 'account'] = HydrusNetwork.Account.GenerateAccountFromSerialisableTuple( args['account']) if 'accounts' in args: account_tuples = args['accounts'] args['accounts'] = [ HydrusNetwork.Account.GenerateAccountFromSerialisableTuple( account_tuple) for account_tuple in account_tuples ] if 'service_keys_to_access_keys' in args: args['service_keys_to_access_keys'] = { bytes.fromhex(encoded_service_key): bytes.fromhex(encoded_access_key) for (encoded_service_key, encoded_access_key) in args['service_keys_to_access_keys'] } if 'services' in args: service_tuples = args['services'] args['services'] = [ HydrusNetwork.GenerateServiceFromSerialisableTuple(service_tuple) for service_tuple in service_tuples ] return args
def ResetToDefaults( self ): self._column_list_types_to_statuses = HydrusSerialisable.SerialisableDictionary() self._dirty = True