hydrus/hydrus/test/TestHydrusSerialisable.py

742 lines
37 KiB
Python
Raw Normal View History

2020-07-29 20:52:44 +00:00
import unittest
from hydrus.core import HydrusConstants as HC
from hydrus.core import HydrusData
from hydrus.core import HydrusSerialisable
2021-04-07 21:26:45 +00:00
from hydrus.core import HydrusTags
2020-07-29 20:52:44 +00:00
from hydrus.client import ClientApplicationCommand as CAC
2020-04-22 21:00:35 +00:00
from hydrus.client import ClientConstants as CC
from hydrus.client import ClientData
from hydrus.client import ClientDefaults
from hydrus.client import ClientDuplicates
2020-07-29 20:52:44 +00:00
from hydrus.client import ClientSearch
2020-04-22 21:00:35 +00:00
from hydrus.client.gui import ClientGUIShortcuts
from hydrus.client.importing import ClientImportSubscriptions
from hydrus.client.importing import ClientImportSubscriptionQuery
2021-06-30 21:27:35 +00:00
from hydrus.client.importing.options import ClientImportOptions
from hydrus.client.importing.options import FileImportOptions
from hydrus.client.importing.options import TagImportOptions
2020-05-20 21:36:02 +00:00
from hydrus.client.media import ClientMedia
from hydrus.client.media import ClientMediaManagers
from hydrus.client.media import ClientMediaResult
from hydrus.client.metadata import ClientTags
2020-07-29 20:52:44 +00:00
2020-04-22 21:00:35 +00:00
from hydrus.test import TestController as TC
2017-03-08 23:23:12 +00:00
2017-03-29 19:39:34 +00:00
class TestSerialisables( unittest.TestCase ):
2017-03-08 23:23:12 +00:00
def _dump_and_load_and_test( self, obj, test_func ):
serialisable_tuple = obj.GetSerialisableTuple()
self.assertIsInstance( serialisable_tuple, tuple )
if isinstance( obj, HydrusSerialisable.SerialisableBaseNamed ):
( serialisable_type, name, version, serialisable_info ) = serialisable_tuple
elif isinstance( obj, HydrusSerialisable.SerialisableBase ):
( serialisable_type, version, serialisable_info ) = serialisable_tuple
self.assertEqual( serialisable_type, obj.SERIALISABLE_TYPE )
self.assertEqual( version, obj.SERIALISABLE_VERSION )
dupe_obj = HydrusSerialisable.CreateFromSerialisableTuple( serialisable_tuple )
self.assertIsNot( obj, dupe_obj )
test_func( obj, dupe_obj )
#
json_string = obj.DumpToString()
self.assertIsInstance( json_string, str )
dupe_obj = HydrusSerialisable.CreateFromString( json_string )
self.assertIsNot( obj, dupe_obj )
test_func( obj, dupe_obj )
#
2019-01-09 22:59:03 +00:00
network_bytes = obj.DumpToNetworkBytes()
2017-03-08 23:23:12 +00:00
2019-01-09 22:59:03 +00:00
self.assertIsInstance( network_bytes, bytes )
2017-03-08 23:23:12 +00:00
2019-01-09 22:59:03 +00:00
dupe_obj = HydrusSerialisable.CreateFromNetworkBytes( network_bytes )
2017-03-08 23:23:12 +00:00
self.assertIsNot( obj, dupe_obj )
test_func( obj, dupe_obj )
def test_basics( self ):
2017-03-15 20:13:04 +00:00
def test( obj, dupe_obj ):
2019-01-09 22:59:03 +00:00
self.assertEqual( len( list(obj.items()) ), len( list(dupe_obj.items()) ) )
2017-03-15 20:13:04 +00:00
2019-01-09 22:59:03 +00:00
for ( key, value ) in list(obj.items()):
2017-03-15 20:13:04 +00:00
self.assertEqual( value, dupe_obj[ key ] )
#
2017-03-08 23:23:12 +00:00
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 ) } )
2020-03-11 21:52:11 +00:00
d[ ClientSearch.Predicate( ClientSearch.PREDICATE_TYPE_TAG, 'test pred 1' ) ] = 56
2017-03-08 23:23:12 +00:00
2020-03-11 21:52:11 +00:00
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 ) ] )
2017-03-08 23:23:12 +00:00
2019-01-09 22:59:03 +00:00
self.assertEqual( len( list(d.keys()) ), 7 )
2017-03-15 20:13:04 +00:00
2019-01-09 22:59:03 +00:00
for ( key, value ) in list(d.items()):
2017-03-15 20:13:04 +00:00
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 ) ]
2019-01-09 22:59:03 +00:00
self.assertEqual( len( list(db.keys()) ), 4 )
2017-03-15 20:13:04 +00:00
2019-01-09 22:59:03 +00:00
for ( key, value ) in list(db.items()):
2017-03-15 20:13:04 +00:00
self.assertEqual( db[ key ], value )
self._dump_and_load_and_test( db, test )
2017-04-12 21:46:46 +00:00
def test_SERIALISABLE_TYPE_APPLICATION_COMMAND( self ):
2017-03-15 20:13:04 +00:00
2017-03-08 23:23:12 +00:00
def test( obj, dupe_obj ):
2017-04-12 21:46:46 +00:00
self.assertEqual( obj.GetCommandType(), dupe_obj.GetCommandType() )
2017-03-08 23:23:12 +00:00
2021-08-25 21:59:05 +00:00
self.assertSequenceEqual( tuple( obj._data ), tuple( dupe_obj._data ) )
2017-03-08 23:23:12 +00:00
2017-04-12 21:46:46 +00:00
acs = []
2017-03-15 20:13:04 +00:00
2021-08-25 21:59:05 +00:00
acs.append( ( CAC.ApplicationCommand.STATICCreateSimpleCommand( CAC.SIMPLE_ARCHIVE_FILE ), 'archive file' ) )
acs.append( ( CAC.ApplicationCommand.STATICCreateSimpleCommand( CAC.SIMPLE_MEDIA_SEEK_DELTA, simple_data = ( -1, 2500 ) ), 'seek media (back 2.5 seconds)' ) )
acs.append( ( CAC.ApplicationCommand.STATICCreateSimpleCommand( CAC.SIMPLE_MEDIA_SEEK_DELTA, simple_data = ( 1, 800 ) ), 'seek media (forwards 800 milliseconds)' ) )
acs.append( ( CAC.ApplicationCommand( CAC.APPLICATION_COMMAND_TYPE_CONTENT, ( HydrusData.GenerateKey(), HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_FLIP, 'test' ) ), 'flip on/off mappings "test" for unknown service!' ) )
acs.append( ( CAC.ApplicationCommand( CAC.APPLICATION_COMMAND_TYPE_CONTENT, ( CC.DEFAULT_LOCAL_TAG_SERVICE_KEY, HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_FLIP, 'test' ) ), 'flip on/off mappings "test" for my tags' ) )
acs.append( ( CAC.ApplicationCommand( CAC.APPLICATION_COMMAND_TYPE_CONTENT, ( HydrusData.GenerateKey(), HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_SET, 0.4 ) ), 'set ratings uncertain rating, "0.4" for unknown service!' ) )
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
for ( ac, s ) in acs:
self._dump_and_load_and_test( ac, test )
self.assertEqual( ac.ToString(), s )
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
2022-12-14 22:22:11 +00:00
def test_SERIALISABLE_TYPE_DUPLICATE_CONTENT_MERGE_OPTIONS( self ):
2017-04-26 21:58:12 +00:00
def test( obj, dupe_obj ):
2022-12-14 22:22:11 +00:00
self.assertEqual( obj.GetTagServiceActions(), dupe_obj.GetTagServiceActions() )
self.assertEqual( obj.GetRatingServiceActions(), dupe_obj.GetRatingServiceActions() )
self.assertEqual( obj.GetSyncArchiveAction(), dupe_obj.GetSyncArchiveAction() )
self.assertEqual( obj.GetSyncURLsAction(), dupe_obj.GetSyncURLsAction() )
self.assertEqual( obj.GetSyncNotesAction(), dupe_obj.GetSyncNotesAction() )
self.assertEqual( obj.GetSyncNoteImportOptions().GetSerialisableTuple(), dupe_obj.GetSyncNoteImportOptions().GetSerialisableTuple() )
2017-04-26 21:58:12 +00:00
2022-12-14 22:22:11 +00:00
duplicate_content_merge_options_delete_and_move = ClientDuplicates.DuplicateContentMergeOptions()
duplicate_content_merge_options_delete_and_move.SetTagServiceActions( [ ( CC.DEFAULT_LOCAL_TAG_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_MOVE, HydrusTags.TagFilter() ) ] )
duplicate_content_merge_options_delete_and_move.SetRatingServiceActions( [ ( TC.LOCAL_RATING_LIKE_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_MOVE ), ( TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_MOVE ) ] )
duplicate_content_merge_options_copy = ClientDuplicates.DuplicateContentMergeOptions()
duplicate_content_merge_options_copy.SetTagServiceActions( [ ( CC.DEFAULT_LOCAL_TAG_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_COPY, HydrusTags.TagFilter() ) ] )
duplicate_content_merge_options_copy.SetRatingServiceActions( [ ( TC.LOCAL_RATING_LIKE_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_COPY ), ( TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_COPY ) ] )
duplicate_content_merge_options_merge = ClientDuplicates.DuplicateContentMergeOptions()
duplicate_content_merge_options_merge.SetTagServiceActions( [ ( CC.DEFAULT_LOCAL_TAG_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_TWO_WAY_MERGE, HydrusTags.TagFilter() ) ] )
duplicate_content_merge_options_merge.SetRatingServiceActions( [ ( TC.LOCAL_RATING_LIKE_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_TWO_WAY_MERGE ), ( TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY, HC.CONTENT_MERGE_ACTION_TWO_WAY_MERGE ) ] )
2017-04-26 21:58:12 +00:00
inbox = True
size = 40960
mime = HC.IMAGE_JPEG
width = 640
height = 480
duration = None
num_frames = None
2019-08-07 22:59:53 +00:00
has_audio = False
2017-04-26 21:58:12 +00:00
num_words = None
2021-04-28 21:43:16 +00:00
local_locations_manager = ClientMediaManagers.LocationsManager( { CC.LOCAL_FILE_SERVICE_KEY : 123, CC.COMBINED_LOCAL_FILE_SERVICE_KEY : 123 }, dict(), set(), set(), inbox )
trash_locations_manager = ClientMediaManagers.LocationsManager( { CC.TRASH_SERVICE_KEY : 123, CC.COMBINED_LOCAL_FILE_SERVICE_KEY : 12 }, dict(), set(), set(), inbox )
deleted_locations_manager = ClientMediaManagers.LocationsManager( dict(), { CC.LOCAL_FILE_SERVICE_KEY : 120, CC.COMBINED_LOCAL_FILE_SERVICE_KEY : 123 }, set(), set(), inbox )
2017-04-26 21:58:12 +00:00
# duplicate to generate proper dicts
2020-08-19 22:38:20 +00:00
one_tags_manager = ClientMediaManagers.TagsManager( { CC.DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC.CONTENT_STATUS_CURRENT : { 'one' } } }, { CC.DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC.CONTENT_STATUS_CURRENT : { 'one' } } } ).Duplicate()
two_tags_manager = ClientMediaManagers.TagsManager( { CC.DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC.CONTENT_STATUS_CURRENT : { 'two' } } }, { CC.DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC.CONTENT_STATUS_CURRENT : { 'two' } } } ).Duplicate()
substantial_tags_manager = ClientMediaManagers.TagsManager( { CC.DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC.CONTENT_STATUS_CURRENT : { 'test tag', 'series:namespaced test tag' } } }, { CC.DEFAULT_LOCAL_TAG_SERVICE_KEY : { HC.CONTENT_STATUS_CURRENT : { 'test tag', 'series:namespaced test tag' } } } ).Duplicate()
empty_tags_manager = ClientMediaManagers.TagsManager( {}, {} ).Duplicate()
2017-04-26 21:58:12 +00:00
2020-05-06 21:31:41 +00:00
one_ratings_manager = ClientMediaManagers.RatingsManager( { TC.LOCAL_RATING_LIKE_SERVICE_KEY : 1.0, TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY : 0.8 } )
two_ratings_manager = ClientMediaManagers.RatingsManager( { TC.LOCAL_RATING_LIKE_SERVICE_KEY : 0.0, TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY : 0.6 } )
substantial_ratings_manager = ClientMediaManagers.RatingsManager( { TC.LOCAL_RATING_LIKE_SERVICE_KEY : 1.0, TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY : 0.8 } )
empty_ratings_manager = ClientMediaManagers.RatingsManager( {} )
2017-04-26 21:58:12 +00:00
2020-05-06 21:31:41 +00:00
notes_manager = ClientMediaManagers.NotesManager( {} )
file_viewing_stats_manager = ClientMediaManagers.FileViewingStatsManager.STATICGenerateEmptyManager()
2018-12-05 22:35:30 +00:00
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
local_hash_has_values = HydrusData.GenerateKey()
2020-05-06 21:31:41 +00:00
file_info_manager = ClientMediaManagers.FileInfoManager( 1, local_hash_has_values, size, mime, width, height, duration, num_frames, has_audio, num_words )
2017-05-31 21:50:53 +00:00
2020-05-20 21:36:02 +00:00
media_result = ClientMediaResult.MediaResult( file_info_manager, substantial_tags_manager, local_locations_manager, substantial_ratings_manager, notes_manager, file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
local_media_has_values = ClientMedia.MediaSingleton( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
other_local_hash_has_values = HydrusData.GenerateKey()
2020-05-06 21:31:41 +00:00
file_info_manager = ClientMediaManagers.FileInfoManager( 2, other_local_hash_has_values, size, mime, width, height, duration, num_frames, has_audio, num_words )
2017-05-31 21:50:53 +00:00
2020-05-20 21:36:02 +00:00
media_result = ClientMediaResult.MediaResult( file_info_manager, substantial_tags_manager, local_locations_manager, substantial_ratings_manager, notes_manager, file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
other_local_media_has_values = ClientMedia.MediaSingleton( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
local_hash_empty = HydrusData.GenerateKey()
2020-05-06 21:31:41 +00:00
file_info_manager = ClientMediaManagers.FileInfoManager( 3, local_hash_empty, size, mime, width, height, duration, num_frames, has_audio, num_words )
2017-05-31 21:50:53 +00:00
2020-05-20 21:36:02 +00:00
media_result = ClientMediaResult.MediaResult( file_info_manager, empty_tags_manager, local_locations_manager, empty_ratings_manager, notes_manager, file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
local_media_empty = ClientMedia.MediaSingleton( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
trashed_hash_empty = HydrusData.GenerateKey()
2020-05-06 21:31:41 +00:00
file_info_manager = ClientMediaManagers.FileInfoManager( 4, trashed_hash_empty, size, mime, width, height, duration, num_frames, has_audio, num_words )
2017-05-31 21:50:53 +00:00
2020-05-20 21:36:02 +00:00
media_result = ClientMediaResult.MediaResult( file_info_manager, empty_tags_manager, trash_locations_manager, empty_ratings_manager, notes_manager, file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
trashed_media_empty = ClientMedia.MediaSingleton( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
deleted_hash_empty = HydrusData.GenerateKey()
2020-05-06 21:31:41 +00:00
file_info_manager = ClientMediaManagers.FileInfoManager( 5, deleted_hash_empty, size, mime, width, height, duration, num_frames, has_audio, num_words )
2017-05-31 21:50:53 +00:00
2020-05-20 21:36:02 +00:00
media_result = ClientMediaResult.MediaResult( file_info_manager, empty_tags_manager, deleted_locations_manager, empty_ratings_manager, notes_manager, file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
deleted_media_empty = ClientMedia.MediaSingleton( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
one_hash = HydrusData.GenerateKey()
2020-05-06 21:31:41 +00:00
file_info_manager = ClientMediaManagers.FileInfoManager( 6, one_hash, size, mime, width, height, duration, num_frames, has_audio, num_words )
2017-05-31 21:50:53 +00:00
2020-05-20 21:36:02 +00:00
media_result = ClientMediaResult.MediaResult( file_info_manager, one_tags_manager, local_locations_manager, one_ratings_manager, notes_manager, file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
one_media = ClientMedia.MediaSingleton( media_result )
2017-05-31 21:50:53 +00:00
#
2017-04-26 21:58:12 +00:00
two_hash = HydrusData.GenerateKey()
2020-05-06 21:31:41 +00:00
file_info_manager = ClientMediaManagers.FileInfoManager( 7, two_hash, size, mime, width, height, duration, num_frames, has_audio, num_words )
2017-05-31 21:50:53 +00:00
2020-05-20 21:36:02 +00:00
media_result = ClientMediaResult.MediaResult( file_info_manager, two_tags_manager, local_locations_manager, two_ratings_manager, notes_manager, file_viewing_stats_manager )
2017-04-26 21:58:12 +00:00
two_media = ClientMedia.MediaSingleton( media_result )
#
2022-12-14 22:22:11 +00:00
self._dump_and_load_and_test( duplicate_content_merge_options_delete_and_move, test )
self._dump_and_load_and_test( duplicate_content_merge_options_copy, test )
self._dump_and_load_and_test( duplicate_content_merge_options_merge, test )
2017-04-26 21:58:12 +00:00
#
def assertSCUEqual( one, two ):
2023-01-04 22:22:08 +00:00
self.maxDiff = None
2017-04-26 21:58:12 +00:00
self.assertEqual( TC.ConvertServiceKeysToContentUpdatesToComparable( one ), TC.ConvertServiceKeysToContentUpdatesToComparable( two ) )
2019-04-10 22:50:53 +00:00
file_deletion_reason = 'test delete'
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_delete_and_move.ProcessPairIntoContentUpdates( local_media_has_values, local_media_empty, delete_second = True, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2019-04-10 22:50:53 +00:00
scu[ CC.LOCAL_FILE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_FILES, HC.CONTENT_UPDATE_DELETE, { local_hash_empty }, reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_delete_and_move.ProcessPairIntoContentUpdates( local_media_has_values, trashed_media_empty, delete_second = True, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2021-04-28 21:43:16 +00:00
scu[ CC.COMBINED_LOCAL_FILE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_FILES, HC.CONTENT_UPDATE_DELETE, { trashed_hash_empty }, reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_delete_and_move.ProcessPairIntoContentUpdates( local_media_has_values, deleted_media_empty, delete_second = True, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
self.assertEqual( result, {} )
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_delete_and_move.ProcessPairIntoContentUpdates( local_media_has_values, other_local_media_has_values, delete_second = True, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2019-09-18 22:40:39 +00:00
scu[ CC.DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_DELETE, ( 'test tag', { other_local_hash_has_values } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_DELETE, ( 'series:namespaced test tag', { other_local_hash_has_values } ) ) ]
2017-04-26 21:58:12 +00:00
scu[ TC.LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( None, { other_local_hash_has_values } ) ) ]
scu[ TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( None, { other_local_hash_has_values } ) ) ]
2019-04-10 22:50:53 +00:00
scu[ CC.LOCAL_FILE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_FILES, HC.CONTENT_UPDATE_DELETE, { other_local_hash_has_values }, reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_delete_and_move.ProcessPairIntoContentUpdates( local_media_empty, other_local_media_has_values, delete_second = True, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2019-09-18 22:40:39 +00:00
scu[ CC.DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'test tag', { local_hash_empty } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'series:namespaced test tag', { local_hash_empty } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_DELETE, ( 'test tag', { other_local_hash_has_values } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_DELETE, ( 'series:namespaced test tag', { other_local_hash_has_values } ) ) ]
2017-04-26 21:58:12 +00:00
scu[ TC.LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 1.0, { local_hash_empty } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( None, { other_local_hash_has_values } ) ) ]
scu[ TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 0.8, { local_hash_empty } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( None, { other_local_hash_has_values } ) ) ]
2019-04-10 22:50:53 +00:00
scu[ CC.LOCAL_FILE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_FILES, HC.CONTENT_UPDATE_DELETE, { other_local_hash_has_values }, reason = file_deletion_reason ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
#
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_copy.ProcessPairIntoContentUpdates( local_media_has_values, local_media_empty, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
self.assertEqual( result, {} )
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_copy.ProcessPairIntoContentUpdates( local_media_empty, other_local_media_has_values, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2019-09-18 22:40:39 +00:00
scu[ CC.DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'test tag', { local_hash_empty } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'series:namespaced test tag', { local_hash_empty } ) ) ]
2017-04-26 21:58:12 +00:00
scu[ TC.LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 1.0, { local_hash_empty } ) ) ]
scu[ TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 0.8, { local_hash_empty } ) ) ]
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
#
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_merge.ProcessPairIntoContentUpdates( local_media_has_values, local_media_empty, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2019-09-18 22:40:39 +00:00
scu[ CC.DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'test tag', { local_hash_empty } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'series:namespaced test tag', { local_hash_empty } ) ) ]
2017-04-26 21:58:12 +00:00
scu[ TC.LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 1.0, { local_hash_empty } ) ) ]
scu[ TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 0.8, { local_hash_empty } ) ) ]
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_merge.ProcessPairIntoContentUpdates( local_media_empty, other_local_media_has_values, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2019-09-18 22:40:39 +00:00
scu[ CC.DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'test tag', { local_hash_empty } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'series:namespaced test tag', { local_hash_empty } ) ) ]
2017-04-26 21:58:12 +00:00
scu[ TC.LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 1.0, { local_hash_empty } ) ) ]
scu[ TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 0.8, { local_hash_empty } ) ) ]
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
#
2022-12-14 22:22:11 +00:00
result = duplicate_content_merge_options_merge.ProcessPairIntoContentUpdates( one_media, two_media, file_deletion_reason = file_deletion_reason )
2017-04-26 21:58:12 +00:00
scu = {}
2019-09-18 22:40:39 +00:00
scu[ CC.DEFAULT_LOCAL_TAG_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'one', { two_hash } ) ), HydrusData.ContentUpdate( HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_ADD, ( 'two', { one_hash } ) ) ]
2019-02-27 23:03:30 +00:00
scu[ TC.LOCAL_RATING_LIKE_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 1.0, { two_hash } ) ) ]
scu[ TC.LOCAL_RATING_NUMERICAL_SERVICE_KEY ] = [ HydrusData.ContentUpdate( HC.CONTENT_TYPE_RATINGS, HC.CONTENT_UPDATE_ADD, ( 0.8, { two_hash } ) ) ]
2017-04-26 21:58:12 +00:00
2018-11-07 23:09:40 +00:00
assertSCUEqual( result, scu )
2017-04-26 21:58:12 +00:00
2017-04-12 21:46:46 +00:00
def test_SERIALISABLE_TYPE_SHORTCUT( self ):
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
def test( obj, dupe_obj ):
2020-02-12 22:50:37 +00:00
self.assertEqual( dupe_obj.__hash__(), ( dupe_obj.shortcut_type, dupe_obj.shortcut_key, dupe_obj.shortcut_press_type, tuple( dupe_obj.modifiers ) ).__hash__() )
2017-04-12 21:46:46 +00:00
self.assertEqual( obj, dupe_obj )
shortcuts = []
2017-03-15 20:13:04 +00:00
2018-05-16 20:09:50 +00:00
shortcuts.append( ( ClientGUIShortcuts.Shortcut(), 'f7' ) )
2017-03-15 20:13:04 +00:00
2020-02-19 21:48:36 +00:00
shortcuts.append( ( ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_SPECIAL, ClientGUIShortcuts.SHORTCUT_KEY_SPECIAL_SPACE, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [] ), 'space' ) )
shortcuts.append( ( ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_CHARACTER, ord( 'a' ), ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] ), 'ctrl+a' ) )
shortcuts.append( ( ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_CHARACTER, ord( 'A' ), ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] ), 'ctrl+a' ) )
shortcuts.append( ( ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_SPECIAL, ClientGUIShortcuts.SHORTCUT_KEY_SPECIAL_HOME, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_ALT, ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] ), 'ctrl+alt+home' ) )
2017-04-12 21:46:46 +00:00
2020-02-19 21:48:36 +00:00
shortcuts.append( ( ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_MOUSE, ClientGUIShortcuts.SHORTCUT_MOUSE_LEFT, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [] ), 'left-click' ) )
shortcuts.append( ( ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_MOUSE, ClientGUIShortcuts.SHORTCUT_MOUSE_MIDDLE, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] ), 'ctrl+middle-click' ) )
shortcuts.append( ( ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_MOUSE, ClientGUIShortcuts.SHORTCUT_MOUSE_SCROLL_DOWN, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_ALT, ClientGUIShortcuts.SHORTCUT_MODIFIER_SHIFT ] ), 'alt+shift+scroll down' ) )
2017-04-12 21:46:46 +00:00
for ( shortcut, s ) in shortcuts:
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
self._dump_and_load_and_test( shortcut, test )
2020-11-11 22:20:16 +00:00
if HC.PLATFORM_MACOS:
s = s.replace( 'ctrl', 'command' )
2017-04-12 21:46:46 +00:00
self.assertEqual( shortcut.ToString(), s )
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
def test_SERIALISABLE_TYPE_SHORTCUT_SET( self ):
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
def test( obj, dupe_obj ):
for ( shortcut, command ) in obj:
2021-08-25 21:59:05 +00:00
self.assertEqual( dupe_obj.GetCommand( shortcut ), command )
2017-04-12 21:46:46 +00:00
default_shortcuts = ClientDefaults.GetDefaultShortcuts()
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
for shortcuts in default_shortcuts:
2017-03-15 20:13:04 +00:00
2017-04-12 21:46:46 +00:00
self._dump_and_load_and_test( shortcuts, test )
2017-03-15 20:13:04 +00:00
2017-03-08 23:23:12 +00:00
2021-08-25 21:59:05 +00:00
command_1 = CAC.ApplicationCommand.STATICCreateSimpleCommand( CAC.SIMPLE_ARCHIVE_FILE )
command_2 = CAC.ApplicationCommand( CAC.APPLICATION_COMMAND_TYPE_CONTENT, ( HydrusData.GenerateKey(), HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_FLIP, 'test' ) )
command_3 = CAC.ApplicationCommand( CAC.APPLICATION_COMMAND_TYPE_CONTENT, ( CC.DEFAULT_LOCAL_TAG_SERVICE_KEY, HC.CONTENT_TYPE_MAPPINGS, HC.CONTENT_UPDATE_FLIP, 'test' ) )
2017-04-12 21:46:46 +00:00
2020-02-19 21:48:36 +00:00
k_shortcut_1 = ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_SPECIAL, ClientGUIShortcuts.SHORTCUT_KEY_SPECIAL_SPACE, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [] )
k_shortcut_2 = ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_CHARACTER, ord( 'a' ), ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] )
k_shortcut_3 = ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_CHARACTER, ord( 'A' ), ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] )
k_shortcut_4 = ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_KEYBOARD_SPECIAL, ClientGUIShortcuts.SHORTCUT_KEY_SPECIAL_HOME, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_ALT, ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] )
2017-04-12 21:46:46 +00:00
2020-02-19 21:48:36 +00:00
m_shortcut_1 = ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_MOUSE, ClientGUIShortcuts.SHORTCUT_MOUSE_LEFT, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [] )
m_shortcut_2 = ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_MOUSE, ClientGUIShortcuts.SHORTCUT_MOUSE_MIDDLE, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_CTRL ] )
m_shortcut_3 = ClientGUIShortcuts.Shortcut( ClientGUIShortcuts.SHORTCUT_TYPE_MOUSE, ClientGUIShortcuts.SHORTCUT_MOUSE_SCROLL_DOWN, ClientGUIShortcuts.SHORTCUT_PRESS_TYPE_PRESS, [ ClientGUIShortcuts.SHORTCUT_MODIFIER_ALT, ClientGUIShortcuts.SHORTCUT_MODIFIER_SHIFT ] )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set = ClientGUIShortcuts.ShortcutSet( 'test' )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set.SetCommand( k_shortcut_1, command_1 )
shortcut_set.SetCommand( k_shortcut_2, command_2 )
shortcut_set.SetCommand( k_shortcut_3, command_2 )
shortcut_set.SetCommand( k_shortcut_4, command_3 )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set.SetCommand( m_shortcut_1, command_1 )
shortcut_set.SetCommand( m_shortcut_2, command_2 )
shortcut_set.SetCommand( m_shortcut_3, command_3 )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
self._dump_and_load_and_test( shortcut_set, test )
2017-04-12 21:46:46 +00:00
2021-08-25 21:59:05 +00:00
self.assertEqual( tuple( shortcut_set.GetCommand( k_shortcut_1 )._data ), tuple( command_1._data ) )
2017-04-12 21:46:46 +00:00
2019-06-05 19:42:39 +00:00
shortcut_set.SetCommand( k_shortcut_1, command_3 )
2017-04-12 21:46:46 +00:00
2021-08-25 21:59:05 +00:00
self.assertEqual( tuple( shortcut_set.GetCommand( k_shortcut_1 )._data ), tuple( command_3._data ) )
2017-04-12 21:46:46 +00:00
2017-03-29 19:39:34 +00:00
def test_SERIALISABLE_TYPE_SUBSCRIPTION( self ):
def test( obj, dupe_obj ):
self.assertEqual( obj.GetName(), dupe_obj.GetName() )
2018-09-05 20:52:32 +00:00
self.assertEqual( obj._gug_key_and_name, dupe_obj._gug_key_and_name )
2020-06-11 12:01:08 +00:00
self.assertEqual( len( obj._query_headers ), len( dupe_obj._query_headers ) )
2017-03-29 19:39:34 +00:00
self.assertEqual( obj._initial_file_limit, dupe_obj._initial_file_limit )
self.assertEqual( obj._periodic_file_limit, dupe_obj._periodic_file_limit )
self.assertEqual( obj._paused, dupe_obj._paused )
2017-09-13 20:50:41 +00:00
self.assertEqual( obj._file_import_options.GetSerialisableTuple(), dupe_obj._file_import_options.GetSerialisableTuple() )
2017-09-20 19:47:31 +00:00
self.assertEqual( obj._tag_import_options.GetSerialisableTuple(), dupe_obj._tag_import_options.GetSerialisableTuple() )
2017-03-29 19:39:34 +00:00
2017-11-08 22:07:12 +00:00
self.assertEqual( obj._no_work_until, dupe_obj._no_work_until )
2017-03-29 19:39:34 +00:00
2018-08-01 20:44:57 +00:00
sub = ClientImportSubscriptions.Subscription( 'test sub' )
2017-03-29 19:39:34 +00:00
self._dump_and_load_and_test( sub, test )
2018-09-05 20:52:32 +00:00
gug_key_and_name = ( HydrusData.GenerateKey(), 'muh test gug' )
2020-06-11 12:01:08 +00:00
query_headers = []
q = ClientImportSubscriptionQuery.SubscriptionQueryHeader()
q.SetQueryText( 'test query' )
query_headers.append( q )
q = ClientImportSubscriptionQuery.SubscriptionQueryHeader()
q.SetQueryText( 'test query 2' )
query_headers.append( q )
2018-05-16 20:09:50 +00:00
checker_options = ClientImportOptions.CheckerOptions()
2017-03-29 19:39:34 +00:00
initial_file_limit = 100
periodic_file_limit = 50
paused = False
2021-06-30 21:27:35 +00:00
file_import_options = FileImportOptions.FileImportOptions()
2018-06-27 19:27:05 +00:00
2021-06-30 21:27:35 +00:00
service_tag_import_options = TagImportOptions.ServiceTagImportOptions( get_tags = False, additional_tags = { 'test additional tag', 'and another' } )
2018-06-27 19:27:05 +00:00
2021-06-30 21:27:35 +00:00
tag_import_options = TagImportOptions.TagImportOptions( service_keys_to_service_tag_import_options = { HydrusData.GenerateKey() : service_tag_import_options } )
2017-03-29 19:39:34 +00:00
2017-11-08 22:07:12 +00:00
no_work_until = HydrusData.GetNow() - 86400 * 20
2017-03-29 19:39:34 +00:00
2020-04-22 21:00:35 +00:00
sub.SetTuple( gug_key_and_name, checker_options, initial_file_limit, periodic_file_limit, paused, file_import_options, tag_import_options, no_work_until )
2020-06-11 12:01:08 +00:00
sub.SetQueryHeaders( query_headers )
2017-03-29 19:39:34 +00:00
2018-09-05 20:52:32 +00:00
self.assertEqual( sub.GetGUGKeyAndName(), gug_key_and_name )
2017-09-20 19:47:31 +00:00
self.assertEqual( sub.GetTagImportOptions(), tag_import_options )
2020-06-11 12:01:08 +00:00
self.assertEqual( sub.GetQueryHeaders(), query_headers )
2017-03-29 19:39:34 +00:00
self.assertEqual( sub._paused, False )
sub.PauseResume()
self.assertEqual( sub._paused, True )
sub.PauseResume()
self.assertEqual( sub._paused, False )
self._dump_and_load_and_test( sub, test )
2018-04-25 22:07:52 +00:00
def test_SERIALISABLE_TYPE_TAG_FILTER( self ):
2017-05-24 20:28:24 +00:00
def test( obj, dupe_obj ):
self.assertEqual( obj._tag_slices_to_rules, dupe_obj._tag_slices_to_rules )
tags = set()
tags.add( 'title:test title' )
tags.add( 'series:neon genesis evangelion' )
tags.add( 'series:kill la kill' )
tags.add( 'smile' )
tags.add( 'blue eyes' )
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'smile', 'blue eyes', 'title:test title', 'series:neon genesis evangelion', 'series:kill la kill' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( '', HC.FILTER_BLACKLIST )
tag_filter.SetRule( ':', HC.FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), set() )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( '', HC.FILTER_BLACKLIST )
tag_filter.SetRule( ':', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'series:', HC.FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'series:neon genesis evangelion', 'series:kill la kill' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( '', HC.FILTER_BLACKLIST )
tag_filter.SetRule( ':', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'series:kill la kill', HC.FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'series:kill la kill' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( '', HC.FILTER_BLACKLIST )
tag_filter.SetRule( ':', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'smile', HC.FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'smile' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( ':', HC.FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'smile', 'blue eyes' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( ':', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'series:', HC.FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'smile', 'blue eyes', 'series:neon genesis evangelion', 'series:kill la kill' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( ':', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'series:kill la kill', HC.FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'smile', 'blue eyes', 'series:kill la kill' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( 'series:', HC.FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'smile', 'blue eyes', 'title:test title' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( 'series:', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'series:neon genesis evangelion', HC.FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'smile', 'blue eyes', 'title:test title', 'series:neon genesis evangelion' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( '', HC.FILTER_BLACKLIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'title:test title', 'series:neon genesis evangelion', 'series:kill la kill' } )
2017-05-24 20:28:24 +00:00
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2017-05-24 20:28:24 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( '', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'blue eyes', HC.FILTER_WHITELIST )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self._dump_and_load_and_test( tag_filter, test )
2017-05-24 20:28:24 +00:00
2018-04-25 22:07:52 +00:00
self.assertEqual( tag_filter.Filter( tags ), { 'title:test title', 'series:neon genesis evangelion', 'series:kill la kill', 'blue eyes' } )
2017-05-24 20:28:24 +00:00
2020-04-16 00:09:42 +00:00
# blacklist namespace test
blacklist_tags = { 'nintendo', 'studio:nintendo' }
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2020-04-16 00:09:42 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( 'nintendo', HC.FILTER_BLACKLIST )
2020-04-16 00:09:42 +00:00
self._dump_and_load_and_test( tag_filter, test )
self.assertEqual( tag_filter.Filter( blacklist_tags ), { 'studio:nintendo' } )
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2020-04-16 00:09:42 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( 'nintendo', HC.FILTER_BLACKLIST )
2020-04-16 00:09:42 +00:00
self._dump_and_load_and_test( tag_filter, test )
self.assertEqual( tag_filter.Filter( blacklist_tags, apply_unnamespaced_rules_to_namespaced_tags = True ), set() )
#
2021-04-07 21:26:45 +00:00
tag_filter = HydrusTags.TagFilter()
2020-04-16 00:09:42 +00:00
2021-04-07 21:26:45 +00:00
tag_filter.SetRule( 'nintendo', HC.FILTER_BLACKLIST )
tag_filter.SetRule( 'studio:nintendo', HC.FILTER_WHITELIST )
2020-04-16 00:09:42 +00:00
self._dump_and_load_and_test( tag_filter, test )
self.assertEqual( tag_filter.Filter( blacklist_tags, apply_unnamespaced_rules_to_namespaced_tags = True ), { 'studio:nintendo' } )
2017-05-24 20:28:24 +00:00