I updated my venv, and made the serious mistake of not backing up my db beforehand. instead, I just copied the venv itself in case it doesn't work so I can revert. when booting after the venv update, I got this very scary looking error
v627, 2025-06-29 22:34:18: hydrus client started
v627, 2025-06-29 22:34:19: booting controller…
v627, 2025-06-29 22:34:19: booting db…
v627, 2025-06-29 22:34:19: checking database
v627, 2025-06-29 22:34:19: An object in a list could not load. It has been discarded from the list. More may also have failed to load, but to stop error spam, they will go silently. Your client may be running on code versions behind its database. Depending on the severity of this error, you may need to rollback to a previous backup. If you have no backup, you may want to kill your hydrus process now to stop the cleansed list ever being saved back to the db.
v627, 2025-06-29 22:34:19:
================ Exception ================
SerialisationException: Could not initialise this object of type File Search Predicate!
================ Traceback ================
Traceback (most recent call last):
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 340, in InitialiseFromSerialisableInfo
self._InitialiseFromSerialisableInfo( serialisable_info )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/home/user1/hydrus/hydrus git/hydrus/client/search/ClientSearchPredicate.py", line 638, in _InitialiseFromSerialisableInfo
self._value = tuple( sorted( HydrusSerialisable.CreateFromSerialisableTuple( serialisable_or_predicates ), key = lambda p: HydrusText.HumanTextSortKey( p.ToString() ) ) )
~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user1/hydrus/hydrus git/hydrus/client/search/ClientSearchPredicate.py", line 638, in <lambda>
self._value = tuple( sorted( HydrusSerialisable.CreateFromSerialisableTuple( serialisable_or_predicates ), key = lambda p: HydrusText.HumanTextSortKey( p.ToString() ) ) )
~~~~~~~~~~^^
File "/home/user1/hydrus/hydrus git/hydrus/client/search/ClientSearchPredicate.py", line 1953, in ToString
service = CG.client_controller.services_manager.GetService( service_key )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'GetService'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 683, in _InitialiseFromSerialisableInfo
obj = ConvertMetaSerialisableTupleToObject( meta_tuple )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 383, in ConvertMetaSerialisableTupleToObject
obj = CreateFromSerialisableTuple( serialisable )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 196, in CreateFromSerialisableTuple
obj.InitialiseFromSerialisableInfo( version, serialisable_info, raise_error_on_future_version = raise_error_on_future_version )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 350, in InitialiseFromSerialisableInfo
raise HydrusExceptions.SerialisationException( 'Could not initialise this object of type {}!'.format( self.SERIALISABLE_NAME ) )
hydrus.core.HydrusExceptions.SerialisationException: Could not initialise this object of type File Search Predicate!
================== Stack ==================
File "/usr/lib64/python3.13/threading.py", line 1012, in _bootstrap
self._bootstrap_inner()
File "/usr/lib64/python3.13/threading.py", line 1041, in _bootstrap_inner
self.run()
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusThreading.py", line 450, in run
callable( *args, **kwargs )
File "/home/user1/hydrus/hydrus git/hydrus/client/ClientController.py", line 2482, in THREADBootEverything
self.InitModel()
[Expand Post]
File "/home/user1/hydrus/hydrus git/hydrus/client/ClientController.py", line 1194, in InitModel
HydrusController.HydrusController.InitModel( self )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusController.py", line 606, in InitModel
self._InitDB()
File "/home/user1/hydrus/hydrus git/hydrus/client/ClientController.py", line 225, in _InitDB
self.db = ClientDB.DB( self, self.db_dir, 'client' )
File "/home/user1/hydrus/hydrus git/hydrus/client/db/ClientDB.py", line 254, in __init__
super().__init__( controller, db_dir, db_name )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusDB.py", line 440, in __init__
self._RepairDB( version )
File "/home/user1/hydrus/hydrus git/hydrus/client/db/ClientDB.py", line 6208, in _RepairDB
new_options = self.modules_serialisable.GetJSONDump( HydrusSerialisable.SERIALISABLE_TYPE_CLIENT_OPTIONS )
File "/home/user1/hydrus/hydrus git/hydrus/client/db/ClientDBSerialisable.py", line 340, in GetJSONDump
obj = HydrusSerialisable.CreateFromSerialisableTuple( ( dump_type, version, serialisable_info ) )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 196, in CreateFromSerialisableTuple
obj.InitialiseFromSerialisableInfo( version, serialisable_info, raise_error_on_future_version = raise_error_on_future_version )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 340, in InitialiseFromSerialisableInfo
self._InitialiseFromSerialisableInfo( serialisable_info )
File "/home/user1/hydrus/hydrus git/hydrus/client/ClientOptions.py", line 855, in _InitialiseFromSerialisableInfo
loaded_dictionary = HydrusSerialisable.CreateFromSerialisableTuple( serialisable_info )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 196, in CreateFromSerialisableTuple
obj.InitialiseFromSerialisableInfo( version, serialisable_info, raise_error_on_future_version = raise_error_on_future_version )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 340, in InitialiseFromSerialisableInfo
self._InitialiseFromSerialisableInfo( serialisable_info )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 486, in _InitialiseFromSerialisableInfo
value = ConvertMetaSerialisableTupleToObject( meta_value )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 383, in ConvertMetaSerialisableTupleToObject
obj = CreateFromSerialisableTuple( serialisable )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 196, in CreateFromSerialisableTuple
obj.InitialiseFromSerialisableInfo( version, serialisable_info, raise_error_on_future_version = raise_error_on_future_version )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 340, in InitialiseFromSerialisableInfo
self._InitialiseFromSerialisableInfo( serialisable_info )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 486, in _InitialiseFromSerialisableInfo
value = ConvertMetaSerialisableTupleToObject( meta_value )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 383, in ConvertMetaSerialisableTupleToObject
obj = CreateFromSerialisableTuple( serialisable )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 196, in CreateFromSerialisableTuple
obj.InitialiseFromSerialisableInfo( version, serialisable_info, raise_error_on_future_version = raise_error_on_future_version )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 340, in InitialiseFromSerialisableInfo
self._InitialiseFromSerialisableInfo( serialisable_info )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusSerialisable.py", line 690, in _InitialiseFromSerialisableInfo
HydrusData.ShowException( e )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusData.py", line 369, in PrintException
PrintExceptionTuple( etype, value, tb, do_wait = do_wait )
File "/home/user1/hydrus/hydrus git/hydrus/core/HydrusData.py", line 400, in PrintExceptionTuple
stack_list = traceback.format_stack()
=================== End ===================
I can't post the whole thing because it's too long, but I didn't notice the part way at the top about how I should kill the Hydrus Client process until about 30 seconds later. I did as soon as I noticed but it probably got saved. I then restored the old venv, but the same error occured. I then made a new venv with safer versions (I hoped anyway) and I tried one more time, and I didn't get the error this time.
I booted Hydrus... everything looks fine. my files are all here, and I don't see anything broken. my session is even still intact.
anyway Dev, how fucked am I? I see that the error is about a search predicate, which doesn't sound very dangerous, but I don't know how Hydrus works internally, so I don't know how dangerous this might be.
also sidenote, I never thought an error this bad could happen from a venv update. I didn't update Hydrus itself. it was already on 627. I only updated the venv. needless to say, I'm not doing that again without a backup. looks like even a venv update isn't safe