2014-04-23 20:56:12 +00:00
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
|
|
|
# dirs
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
if getattr( sys, 'frozen', False ):
|
2015-11-04 22:30:28 +00:00
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
RUNNING_FROM_FROZEN_BUILD = True
|
2015-11-04 22:30:28 +00:00
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
# we are in a pyinstaller frozen app
|
|
|
|
|
|
|
|
BASE_DIR = getattr( sys, '_MEIPASS', None )
|
2015-11-04 22:30:28 +00:00
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
if BASE_DIR is None:
|
2015-11-04 22:30:28 +00:00
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
raise Exception( 'It seems this hydrus is running from a frozen bundle, but there was no _MEIPASS variable under sys to define the bundle directory.' )
|
2015-11-04 22:30:28 +00:00
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
|
|
|
|
else:
|
|
|
|
|
2020-01-22 21:04:43 +00:00
|
|
|
# maybe this is better?
|
|
|
|
# os.path.dirname( __file__ )
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
RUNNING_FROM_FROZEN_BUILD = False
|
|
|
|
|
|
|
|
BASE_DIR = sys.path[0]
|
|
|
|
|
|
|
|
if BASE_DIR == '':
|
2015-11-04 22:30:28 +00:00
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
BASE_DIR = os.getcwd()
|
2015-11-04 22:30:28 +00:00
|
|
|
|
2014-04-23 20:56:12 +00:00
|
|
|
|
|
|
|
PLATFORM_WINDOWS = False
|
2019-11-20 23:10:46 +00:00
|
|
|
PLATFORM_MACOS = False
|
2014-04-23 20:56:12 +00:00
|
|
|
PLATFORM_LINUX = False
|
|
|
|
|
|
|
|
if sys.platform == 'win32': PLATFORM_WINDOWS = True
|
2019-11-20 23:10:46 +00:00
|
|
|
elif sys.platform == 'darwin': PLATFORM_MACOS = True
|
2019-01-09 22:59:03 +00:00
|
|
|
elif sys.platform == 'linux': PLATFORM_LINUX = True
|
2014-04-23 20:56:12 +00:00
|
|
|
|
2016-12-07 22:12:52 +00:00
|
|
|
RUNNING_FROM_SOURCE = sys.argv[0].endswith( '.py' ) or sys.argv[0].endswith( '.pyw' )
|
2019-11-20 23:10:46 +00:00
|
|
|
RUNNING_FROM_MACOS_APP = os.path.exists( os.path.join( BASE_DIR, 'running_from_app' ) )
|
2019-01-09 22:59:03 +00:00
|
|
|
|
|
|
|
BIN_DIR = os.path.join( BASE_DIR, 'bin' )
|
|
|
|
HELP_DIR = os.path.join( BASE_DIR, 'help' )
|
|
|
|
INCLUDE_DIR = os.path.join( BASE_DIR, 'include' )
|
|
|
|
STATIC_DIR = os.path.join( BASE_DIR, 'static' )
|
|
|
|
|
|
|
|
DEFAULT_DB_DIR = os.path.join( BASE_DIR, 'db' )
|
|
|
|
|
2019-11-20 23:10:46 +00:00
|
|
|
if PLATFORM_MACOS:
|
2019-01-09 22:59:03 +00:00
|
|
|
|
|
|
|
USERPATH_DB_DIR = os.path.join( os.path.expanduser( '~' ), 'Library', 'Hydrus' )
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
USERPATH_DB_DIR = os.path.join( os.path.expanduser( '~' ), 'Hydrus' )
|
|
|
|
|
|
|
|
|
|
|
|
LICENSE_PATH = os.path.join( BASE_DIR, 'license.txt' )
|
|
|
|
|
|
|
|
#
|
2016-12-07 22:12:52 +00:00
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
import sqlite3
|
|
|
|
import traceback
|
|
|
|
import yaml
|
|
|
|
|
2013-08-07 22:25:18 +00:00
|
|
|
options = {}
|
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
# Misc
|
|
|
|
|
2017-03-02 02:14:56 +00:00
|
|
|
NETWORK_VERSION = 18
|
2020-02-26 22:28:52 +00:00
|
|
|
SOFTWARE_VERSION = 386
|
2019-08-21 21:34:01 +00:00
|
|
|
CLIENT_API_VERSION = 11
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2019-03-27 22:01:02 +00:00
|
|
|
SERVER_THUMBNAIL_DIMENSIONS = ( 200, 200 )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
HYDRUS_KEY_LENGTH = 32
|
|
|
|
|
|
|
|
UPDATE_DURATION = 100000
|
2015-10-21 21:53:10 +00:00
|
|
|
READ_BLOCK_SIZE = 256 * 1024
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2013-12-04 22:44:16 +00:00
|
|
|
lifetimes = [ ( 'one month', 31 * 86400 ), ( 'three months', 3 * 31 * 86400 ), ( 'six months', 6 * 31 * 86400 ), ( 'one year', 12 * 31 * 86400 ), ( 'two years', 24 * 31 * 86400 ), ( 'five years', 60 * 31 * 86400 ), ( 'does not expire', None ) ]
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
# Enums
|
|
|
|
|
2017-03-02 02:14:56 +00:00
|
|
|
BANDWIDTH_TYPE_DATA = 0
|
|
|
|
BANDWIDTH_TYPE_REQUESTS = 1
|
|
|
|
|
|
|
|
bandwidth_type_string_lookup = {}
|
|
|
|
|
|
|
|
bandwidth_type_string_lookup[ BANDWIDTH_TYPE_DATA ] = 'data'
|
|
|
|
bandwidth_type_string_lookup[ BANDWIDTH_TYPE_REQUESTS ] = 'requests'
|
|
|
|
|
2017-04-26 21:58:12 +00:00
|
|
|
CONTENT_MERGE_ACTION_COPY = 0
|
|
|
|
CONTENT_MERGE_ACTION_MOVE = 1
|
|
|
|
CONTENT_MERGE_ACTION_TWO_WAY_MERGE = 2
|
|
|
|
|
|
|
|
content_merge_string_lookup = {}
|
|
|
|
|
|
|
|
content_merge_string_lookup[ CONTENT_MERGE_ACTION_COPY ] = 'copy from worse to better'
|
|
|
|
content_merge_string_lookup[ CONTENT_MERGE_ACTION_MOVE ] = 'move from worse to better'
|
|
|
|
content_merge_string_lookup[ CONTENT_MERGE_ACTION_TWO_WAY_MERGE ] = 'copy in both directions'
|
2017-03-29 19:39:34 +00:00
|
|
|
|
2017-03-02 02:14:56 +00:00
|
|
|
CONTENT_STATUS_CURRENT = 0
|
|
|
|
CONTENT_STATUS_PENDING = 1
|
|
|
|
CONTENT_STATUS_DELETED = 2
|
|
|
|
CONTENT_STATUS_PETITIONED = 3
|
|
|
|
|
2017-03-15 20:13:04 +00:00
|
|
|
content_status_string_lookup = {}
|
|
|
|
|
|
|
|
content_status_string_lookup[ CONTENT_STATUS_CURRENT ] = 'current'
|
|
|
|
content_status_string_lookup[ CONTENT_STATUS_PENDING ] = 'pending'
|
|
|
|
content_status_string_lookup[ CONTENT_STATUS_DELETED ] = 'deleted'
|
|
|
|
content_status_string_lookup[ CONTENT_STATUS_PETITIONED ] = 'petitioned'
|
|
|
|
|
2015-10-14 21:02:25 +00:00
|
|
|
CONTENT_TYPE_MAPPINGS = 0
|
|
|
|
CONTENT_TYPE_TAG_SIBLINGS = 1
|
|
|
|
CONTENT_TYPE_TAG_PARENTS = 2
|
|
|
|
CONTENT_TYPE_FILES = 3
|
|
|
|
CONTENT_TYPE_RATINGS = 4
|
|
|
|
CONTENT_TYPE_MAPPING = 5
|
2016-05-18 20:07:14 +00:00
|
|
|
CONTENT_TYPE_DIRECTORIES = 6
|
2016-09-21 19:54:04 +00:00
|
|
|
CONTENT_TYPE_URLS = 7
|
2016-11-02 21:09:14 +00:00
|
|
|
CONTENT_TYPE_VETO = 8
|
2017-03-02 02:14:56 +00:00
|
|
|
CONTENT_TYPE_ACCOUNTS = 9
|
|
|
|
CONTENT_TYPE_OPTIONS = 10
|
|
|
|
CONTENT_TYPE_SERVICES = 11
|
|
|
|
CONTENT_TYPE_UNKNOWN = 12
|
|
|
|
CONTENT_TYPE_ACCOUNT_TYPES = 13
|
2017-11-01 20:37:39 +00:00
|
|
|
CONTENT_TYPE_VARIABLE = 14
|
2018-01-31 22:58:15 +00:00
|
|
|
CONTENT_TYPE_HASH = 15
|
2018-02-07 23:40:33 +00:00
|
|
|
CONTENT_TYPE_TIMESTAMP = 16
|
|
|
|
CONTENT_TYPE_TITLE = 17
|
2018-03-07 22:48:29 +00:00
|
|
|
CONTENT_TYPE_NOTES = 18
|
2018-12-05 22:35:30 +00:00
|
|
|
CONTENT_TYPE_FILE_VIEWING_STATS = 19
|
2017-03-02 02:14:56 +00:00
|
|
|
|
|
|
|
content_type_string_lookup = {}
|
|
|
|
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_MAPPINGS ] = 'mappings'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_TAG_SIBLINGS ] = 'tag siblings'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_TAG_PARENTS ] = 'tag parents'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_FILES ] = 'files'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_RATINGS ] = 'ratings'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_MAPPING ] = 'mapping'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_DIRECTORIES ] = 'directories'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_URLS ] = 'urls'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_VETO ] = 'veto'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_ACCOUNTS ] = 'accounts'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_OPTIONS ] = 'options'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_SERVICES ] = 'services'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_UNKNOWN ] = 'unknown'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_ACCOUNT_TYPES ] = 'account types'
|
2018-02-07 23:40:33 +00:00
|
|
|
content_type_string_lookup[ CONTENT_TYPE_VARIABLE ] = 'variable'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_HASH ] = 'hash'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_TIMESTAMP ] = 'timestamp'
|
|
|
|
content_type_string_lookup[ CONTENT_TYPE_TITLE ] = 'title'
|
2018-03-07 22:48:29 +00:00
|
|
|
content_type_string_lookup[ CONTENT_TYPE_NOTES ] = 'notes'
|
2018-12-05 22:35:30 +00:00
|
|
|
content_type_string_lookup[ CONTENT_TYPE_FILE_VIEWING_STATS ] = 'file viewing stats'
|
2017-03-02 02:14:56 +00:00
|
|
|
|
|
|
|
REPOSITORY_CONTENT_TYPES = [ CONTENT_TYPE_FILES, CONTENT_TYPE_MAPPINGS, CONTENT_TYPE_TAG_PARENTS, CONTENT_TYPE_TAG_SIBLINGS ]
|
2013-06-12 22:53:31 +00:00
|
|
|
|
2013-04-10 18:10:37 +00:00
|
|
|
CONTENT_UPDATE_ADD = 0
|
|
|
|
CONTENT_UPDATE_DELETE = 1
|
2015-09-23 21:21:02 +00:00
|
|
|
CONTENT_UPDATE_PEND = 2
|
|
|
|
CONTENT_UPDATE_RESCIND_PEND = 3
|
2013-04-10 18:10:37 +00:00
|
|
|
CONTENT_UPDATE_PETITION = 4
|
|
|
|
CONTENT_UPDATE_RESCIND_PETITION = 5
|
|
|
|
CONTENT_UPDATE_EDIT_LOG = 6
|
|
|
|
CONTENT_UPDATE_ARCHIVE = 7
|
|
|
|
CONTENT_UPDATE_INBOX = 8
|
|
|
|
CONTENT_UPDATE_RATING = 9
|
2013-06-12 22:53:31 +00:00
|
|
|
CONTENT_UPDATE_DENY_PEND = 11
|
|
|
|
CONTENT_UPDATE_DENY_PETITION = 12
|
2013-11-20 21:12:21 +00:00
|
|
|
CONTENT_UPDATE_ADVANCED = 13
|
2015-07-08 21:45:38 +00:00
|
|
|
CONTENT_UPDATE_UNDELETE = 14
|
2017-04-12 21:46:46 +00:00
|
|
|
CONTENT_UPDATE_SET = 15
|
|
|
|
CONTENT_UPDATE_FLIP = 16
|
2019-09-05 00:05:32 +00:00
|
|
|
CONTENT_UPDATE_CLEAR_DELETE_RECORD = 17
|
2019-09-11 21:51:09 +00:00
|
|
|
CONTENT_UPDATE_INCREMENT = 18
|
|
|
|
CONTENT_UPDATE_DECREMENT = 19
|
2013-04-10 18:10:37 +00:00
|
|
|
|
2013-11-06 18:22:07 +00:00
|
|
|
content_update_string_lookup = {}
|
|
|
|
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_ADD ] = 'add'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_DELETE ] = 'delete'
|
2015-09-23 21:21:02 +00:00
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_PEND ] = 'pending'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_RESCIND_PEND ] = 'rescind pending'
|
2013-11-06 18:22:07 +00:00
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_PETITION ] = 'petition'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_RESCIND_PETITION ] = 'rescind petition'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_EDIT_LOG ] = 'edit log'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_ARCHIVE ] = 'archive'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_INBOX ] = 'inbox'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_RATING ] = 'rating'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_DENY_PEND ] = 'deny pend'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_DENY_PETITION ] = 'deny petition'
|
2015-07-08 21:45:38 +00:00
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_UNDELETE ] = 'undelete'
|
2017-04-12 21:46:46 +00:00
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_SET ] = 'set'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_FLIP ] = 'flip on/off'
|
2019-09-05 00:05:32 +00:00
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_CLEAR_DELETE_RECORD ] = 'clear deletion record'
|
2019-09-11 21:51:09 +00:00
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_INCREMENT ] = 'increment'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_DECREMENT ] = 'decrement'
|
2013-11-06 18:22:07 +00:00
|
|
|
|
2017-03-02 02:14:56 +00:00
|
|
|
DEFINITIONS_TYPE_HASHES = 0
|
|
|
|
DEFINITIONS_TYPE_TAGS = 1
|
|
|
|
|
2019-05-29 21:34:43 +00:00
|
|
|
DUPLICATE_POTENTIAL = 0
|
2019-05-22 22:35:06 +00:00
|
|
|
DUPLICATE_FALSE_POSITIVE = 1
|
2017-06-07 22:05:15 +00:00
|
|
|
DUPLICATE_SAME_QUALITY = 2
|
2017-01-11 22:31:30 +00:00
|
|
|
DUPLICATE_ALTERNATE = 3
|
2017-04-12 21:46:46 +00:00
|
|
|
DUPLICATE_BETTER = 4
|
|
|
|
DUPLICATE_SMALLER_BETTER = 5
|
|
|
|
DUPLICATE_LARGER_BETTER = 6
|
|
|
|
DUPLICATE_WORSE = 7
|
2019-06-19 22:08:48 +00:00
|
|
|
DUPLICATE_MEMBER = 8
|
|
|
|
DUPLICATE_KING = 9
|
2019-07-03 22:49:27 +00:00
|
|
|
DUPLICATE_CONFIRMED_ALTERNATE = 10
|
2017-01-11 22:31:30 +00:00
|
|
|
|
2017-05-31 21:50:53 +00:00
|
|
|
duplicate_type_string_lookup = {}
|
2017-04-26 21:58:12 +00:00
|
|
|
|
2019-05-29 21:34:43 +00:00
|
|
|
duplicate_type_string_lookup[ DUPLICATE_POTENTIAL ] = 'potential duplicates'
|
2019-05-22 22:35:06 +00:00
|
|
|
duplicate_type_string_lookup[ DUPLICATE_FALSE_POSITIVE ] = 'not related/false positive'
|
2017-06-07 22:05:15 +00:00
|
|
|
duplicate_type_string_lookup[ DUPLICATE_SAME_QUALITY ] = 'same quality'
|
2017-05-31 21:50:53 +00:00
|
|
|
duplicate_type_string_lookup[ DUPLICATE_ALTERNATE ] = 'alternates'
|
|
|
|
duplicate_type_string_lookup[ DUPLICATE_BETTER ] = 'this is better'
|
|
|
|
duplicate_type_string_lookup[ DUPLICATE_SMALLER_BETTER ] = 'smaller hash_id is better'
|
|
|
|
duplicate_type_string_lookup[ DUPLICATE_LARGER_BETTER ] = 'larger hash_id is better'
|
|
|
|
duplicate_type_string_lookup[ DUPLICATE_WORSE ] = 'this is worse'
|
2019-06-19 22:08:48 +00:00
|
|
|
duplicate_type_string_lookup[ DUPLICATE_MEMBER ] = 'duplicates'
|
|
|
|
duplicate_type_string_lookup[ DUPLICATE_KING ] = 'the best quality duplicate'
|
2019-07-03 22:49:27 +00:00
|
|
|
duplicate_type_string_lookup[ DUPLICATE_CONFIRMED_ALTERNATE ] = 'confirmed alternates'
|
2017-04-26 21:58:12 +00:00
|
|
|
|
2016-10-05 20:22:40 +00:00
|
|
|
ENCODING_RAW = 0
|
|
|
|
ENCODING_HEX = 1
|
|
|
|
ENCODING_BASE64 = 2
|
|
|
|
|
|
|
|
encoding_string_lookup = {}
|
|
|
|
|
|
|
|
encoding_string_lookup[ ENCODING_RAW ] = 'raw bytes'
|
|
|
|
encoding_string_lookup[ ENCODING_HEX ] = 'hexadecimal'
|
|
|
|
encoding_string_lookup[ ENCODING_BASE64 ] = 'base64'
|
|
|
|
|
2013-07-17 20:56:13 +00:00
|
|
|
IMPORT_FOLDER_TYPE_DELETE = 0
|
|
|
|
IMPORT_FOLDER_TYPE_SYNCHRONISE = 1
|
|
|
|
|
2015-05-20 21:31:40 +00:00
|
|
|
EXPORT_FOLDER_TYPE_REGULAR = 0
|
|
|
|
EXPORT_FOLDER_TYPE_SYNCHRONISE = 1
|
|
|
|
|
2017-01-11 22:31:30 +00:00
|
|
|
HAMMING_EXACT_MATCH = 0
|
|
|
|
HAMMING_VERY_SIMILAR = 2
|
|
|
|
HAMMING_SIMILAR = 4
|
|
|
|
HAMMING_SPECULATIVE = 8
|
|
|
|
|
2017-01-18 22:52:39 +00:00
|
|
|
hamming_string_lookup = {}
|
|
|
|
|
|
|
|
hamming_string_lookup[ HAMMING_EXACT_MATCH ] = 'exact match'
|
|
|
|
hamming_string_lookup[ HAMMING_VERY_SIMILAR ] = 'very similar'
|
|
|
|
hamming_string_lookup[ HAMMING_SIMILAR ] = 'similar'
|
|
|
|
hamming_string_lookup[ HAMMING_SPECULATIVE ] = 'speculative'
|
|
|
|
|
2015-09-02 23:16:09 +00:00
|
|
|
HYDRUS_CLIENT = 0
|
|
|
|
HYDRUS_SERVER = 1
|
|
|
|
HYDRUS_TEST = 2
|
|
|
|
|
2019-06-19 22:08:48 +00:00
|
|
|
MAINTENANCE_IDLE = 0
|
|
|
|
MAINTENANCE_SHUTDOWN = 1
|
|
|
|
MAINTENANCE_FORCED = 2
|
2019-09-25 21:34:18 +00:00
|
|
|
MAINTENANCE_ACTIVE = 3
|
2019-06-19 22:08:48 +00:00
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
GET_DATA = 0
|
|
|
|
POST_DATA = 1
|
|
|
|
POST_PETITIONS = 2
|
|
|
|
RESOLVE_PETITIONS = 3
|
|
|
|
MANAGE_USERS = 4
|
|
|
|
GENERAL_ADMIN = 5
|
|
|
|
EDIT_SERVICES = 6
|
2014-10-01 22:58:32 +00:00
|
|
|
UNKNOWN_PERMISSION = 7
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
CREATABLE_PERMISSIONS = [ GET_DATA, POST_DATA, POST_PETITIONS, RESOLVE_PETITIONS, MANAGE_USERS, GENERAL_ADMIN ]
|
|
|
|
ADMIN_PERMISSIONS = [ RESOLVE_PETITIONS, MANAGE_USERS, GENERAL_ADMIN, EDIT_SERVICES ]
|
|
|
|
|
|
|
|
permissions_string_lookup = {}
|
|
|
|
|
|
|
|
permissions_string_lookup[ GET_DATA ] = 'get data'
|
|
|
|
permissions_string_lookup[ POST_DATA ] = 'post data'
|
|
|
|
permissions_string_lookup[ POST_PETITIONS ] = 'post petitions'
|
|
|
|
permissions_string_lookup[ RESOLVE_PETITIONS ] = 'resolve petitions'
|
|
|
|
permissions_string_lookup[ MANAGE_USERS ] = 'manage users'
|
|
|
|
permissions_string_lookup[ GENERAL_ADMIN ] = 'general administration'
|
|
|
|
permissions_string_lookup[ EDIT_SERVICES ] = 'edit services'
|
2014-10-01 22:58:32 +00:00
|
|
|
permissions_string_lookup[ UNKNOWN_PERMISSION ] = 'unknown'
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2017-03-02 02:14:56 +00:00
|
|
|
# new permissions
|
|
|
|
|
|
|
|
PERMISSION_ACTION_PETITION = 0
|
|
|
|
PERMISSION_ACTION_CREATE = 1
|
|
|
|
PERMISSION_ACTION_OVERRULE = 2
|
|
|
|
|
|
|
|
permission_pair_string_lookup = {}
|
|
|
|
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_ACCOUNTS, None ) ] = 'cannot change accounts'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_ACCOUNTS, PERMISSION_ACTION_CREATE ) ] = 'can create accounts'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_ACCOUNTS, PERMISSION_ACTION_OVERRULE ) ] = 'can manage accounts completely'
|
|
|
|
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_ACCOUNT_TYPES, None ) ] = 'cannot change account types'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_ACCOUNT_TYPES, PERMISSION_ACTION_OVERRULE ) ] = 'can manage account types completely'
|
|
|
|
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_SERVICES, None ) ] = 'cannot change services'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_SERVICES, PERMISSION_ACTION_OVERRULE ) ] = 'can manage services completely'
|
|
|
|
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_FILES, None ) ] = 'can only download files'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_FILES, PERMISSION_ACTION_PETITION ) ] = 'can petition to remove existing files'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_FILES, PERMISSION_ACTION_CREATE ) ] = 'can upload new files and petition existing ones'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_FILES, PERMISSION_ACTION_OVERRULE ) ] = 'can upload and delete files and process petitions'
|
|
|
|
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_MAPPINGS, None ) ] = 'can only download mappings'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_MAPPINGS, PERMISSION_ACTION_PETITION ) ] = 'can petition to remove existing mappings'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_MAPPINGS, PERMISSION_ACTION_CREATE ) ] = 'can upload new mappings and petition existing ones'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_MAPPINGS, PERMISSION_ACTION_OVERRULE ) ] = 'can upload and delete mappings and process petitions'
|
|
|
|
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_TAG_PARENTS, None ) ] = 'can only download tag parents'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_TAG_PARENTS, PERMISSION_ACTION_PETITION ) ] = 'can petition to add or remove tag parents'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_TAG_PARENTS, PERMISSION_ACTION_OVERRULE ) ] = 'can upload and delete tag parents and process petitions'
|
|
|
|
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_TAG_SIBLINGS, None ) ] = 'can only download tag siblings'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_TAG_SIBLINGS, PERMISSION_ACTION_PETITION ) ] = 'can petition to add or remove tag siblings'
|
|
|
|
permission_pair_string_lookup[ ( CONTENT_TYPE_TAG_SIBLINGS, PERMISSION_ACTION_OVERRULE ) ] = 'can upload and delete tag siblings and process petitions'
|
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
TAG_REPOSITORY = 0
|
|
|
|
FILE_REPOSITORY = 1
|
2016-12-21 22:30:54 +00:00
|
|
|
LOCAL_FILE_DOMAIN = 2
|
2013-02-19 00:11:43 +00:00
|
|
|
MESSAGE_DEPOT = 3
|
|
|
|
LOCAL_TAG = 5
|
|
|
|
LOCAL_RATING_NUMERICAL = 6
|
|
|
|
LOCAL_RATING_LIKE = 7
|
|
|
|
RATING_NUMERICAL_REPOSITORY = 8
|
|
|
|
RATING_LIKE_REPOSITORY = 9
|
2013-05-29 20:19:54 +00:00
|
|
|
COMBINED_TAG = 10
|
|
|
|
COMBINED_FILE = 11
|
2014-05-14 20:46:38 +00:00
|
|
|
LOCAL_BOORU = 12
|
2016-01-20 23:57:33 +00:00
|
|
|
IPFS = 13
|
2016-12-21 22:30:54 +00:00
|
|
|
LOCAL_FILE_TRASH_DOMAIN = 14
|
|
|
|
COMBINED_LOCAL_FILE = 15
|
2017-10-25 21:45:15 +00:00
|
|
|
TEST_SERVICE = 16
|
2018-03-07 22:48:29 +00:00
|
|
|
LOCAL_NOTES = 17
|
2019-01-30 22:14:54 +00:00
|
|
|
CLIENT_API_SERVICE = 18
|
2013-02-19 00:11:43 +00:00
|
|
|
SERVER_ADMIN = 99
|
|
|
|
NULL_SERVICE = 100
|
|
|
|
|
|
|
|
service_string_lookup = {}
|
|
|
|
|
|
|
|
service_string_lookup[ TAG_REPOSITORY ] = 'hydrus tag repository'
|
|
|
|
service_string_lookup[ FILE_REPOSITORY ] = 'hydrus file repository'
|
2017-03-08 23:23:12 +00:00
|
|
|
service_string_lookup[ LOCAL_FILE_DOMAIN ] = 'local file domain'
|
|
|
|
service_string_lookup[ LOCAL_FILE_TRASH_DOMAIN ] = 'local trash file domain'
|
|
|
|
service_string_lookup[ COMBINED_LOCAL_FILE ] = 'virtual combined local file service'
|
2013-02-19 00:11:43 +00:00
|
|
|
service_string_lookup[ MESSAGE_DEPOT ] = 'hydrus message depot'
|
2013-10-02 22:06:06 +00:00
|
|
|
service_string_lookup[ LOCAL_TAG ] = 'local tag service'
|
|
|
|
service_string_lookup[ LOCAL_RATING_NUMERICAL ] = 'local numerical rating service'
|
|
|
|
service_string_lookup[ LOCAL_RATING_LIKE ] = 'local like/dislike rating service'
|
|
|
|
service_string_lookup[ RATING_NUMERICAL_REPOSITORY ] = 'hydrus numerical rating repository'
|
|
|
|
service_string_lookup[ RATING_LIKE_REPOSITORY ] = 'hydrus like/dislike rating repository'
|
|
|
|
service_string_lookup[ COMBINED_TAG ] = 'virtual combined tag service'
|
|
|
|
service_string_lookup[ COMBINED_FILE ] = 'virtual combined file service'
|
2019-01-30 22:14:54 +00:00
|
|
|
service_string_lookup[ LOCAL_BOORU ] = 'client local booru'
|
|
|
|
service_string_lookup[ CLIENT_API_SERVICE ] = 'client api'
|
2016-01-20 23:57:33 +00:00
|
|
|
service_string_lookup[ IPFS ] = 'ipfs daemon'
|
2017-10-25 21:45:15 +00:00
|
|
|
service_string_lookup[ TEST_SERVICE ] = 'test service'
|
2018-03-07 22:48:29 +00:00
|
|
|
service_string_lookup[ LOCAL_NOTES ] = 'local file notes service'
|
2017-03-02 02:14:56 +00:00
|
|
|
service_string_lookup[ SERVER_ADMIN ] = 'hydrus server administration service'
|
2013-10-02 22:06:06 +00:00
|
|
|
service_string_lookup[ NULL_SERVICE ] = 'null service'
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2017-03-15 20:13:04 +00:00
|
|
|
LOCAL_FILE_SERVICES = ( LOCAL_FILE_DOMAIN, LOCAL_FILE_TRASH_DOMAIN, COMBINED_LOCAL_FILE )
|
|
|
|
LOCAL_TAG_SERVICES = ( LOCAL_TAG, )
|
|
|
|
|
2019-01-30 22:14:54 +00:00
|
|
|
LOCAL_SERVICES = LOCAL_FILE_SERVICES + LOCAL_TAG_SERVICES + ( LOCAL_RATING_LIKE, LOCAL_RATING_NUMERICAL, LOCAL_BOORU, LOCAL_NOTES, CLIENT_API_SERVICE )
|
2017-03-15 20:13:04 +00:00
|
|
|
|
|
|
|
RATINGS_SERVICES = ( LOCAL_RATING_LIKE, LOCAL_RATING_NUMERICAL, RATING_LIKE_REPOSITORY, RATING_NUMERICAL_REPOSITORY )
|
|
|
|
REPOSITORIES = ( TAG_REPOSITORY, FILE_REPOSITORY, RATING_LIKE_REPOSITORY, RATING_NUMERICAL_REPOSITORY )
|
|
|
|
RESTRICTED_SERVICES = REPOSITORIES + ( SERVER_ADMIN, MESSAGE_DEPOT )
|
|
|
|
REMOTE_SERVICES = RESTRICTED_SERVICES + ( IPFS, )
|
|
|
|
FILE_SERVICES = LOCAL_FILE_SERVICES + ( FILE_REPOSITORY, IPFS )
|
|
|
|
TAG_SERVICES = ( LOCAL_TAG, TAG_REPOSITORY )
|
2019-09-18 22:40:39 +00:00
|
|
|
ADDREMOVABLE_SERVICES = ( LOCAL_TAG, LOCAL_RATING_LIKE, LOCAL_RATING_NUMERICAL, FILE_REPOSITORY, TAG_REPOSITORY, SERVER_ADMIN, IPFS )
|
|
|
|
MUST_HAVE_AT_LEAST_ONE_SERVICES = ( LOCAL_TAG, )
|
|
|
|
NONEDITABLE_SERVICES = ( LOCAL_FILE_DOMAIN, LOCAL_FILE_TRASH_DOMAIN, COMBINED_FILE, COMBINED_TAG, COMBINED_LOCAL_FILE )
|
2017-03-15 20:13:04 +00:00
|
|
|
AUTOCOMPLETE_CACHE_SPECIFIC_FILE_SERVICES = ( LOCAL_FILE_DOMAIN, LOCAL_FILE_TRASH_DOMAIN, COMBINED_LOCAL_FILE, FILE_REPOSITORY )
|
|
|
|
ALL_SERVICES = REMOTE_SERVICES + LOCAL_SERVICES + ( COMBINED_FILE, COMBINED_TAG )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2016-12-21 22:30:54 +00:00
|
|
|
SERVICES_WITH_THUMBNAILS = [ FILE_REPOSITORY, LOCAL_FILE_DOMAIN ]
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
DELETE_FILES_PETITION = 0
|
|
|
|
DELETE_TAG_PETITION = 1
|
|
|
|
|
|
|
|
BAN = 0
|
|
|
|
SUPERBAN = 1
|
|
|
|
CHANGE_ACCOUNT_TYPE = 2
|
2014-10-01 22:58:32 +00:00
|
|
|
ADD_TO_EXPIRES = 3
|
|
|
|
SET_EXPIRES = 4
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
SCORE_PETITION = 0
|
|
|
|
|
|
|
|
SERVICE_INFO_NUM_FILES = 0
|
|
|
|
SERVICE_INFO_NUM_INBOX = 1
|
|
|
|
SERVICE_INFO_NUM_LOCAL = 2
|
|
|
|
SERVICE_INFO_NUM_MAPPINGS = 3
|
|
|
|
SERVICE_INFO_NUM_DELETED_MAPPINGS = 4
|
|
|
|
SERVICE_INFO_NUM_DELETED_FILES = 5
|
|
|
|
SERVICE_INFO_NUM_THUMBNAILS = 6
|
|
|
|
SERVICE_INFO_NUM_THUMBNAILS_LOCAL = 7
|
|
|
|
SERVICE_INFO_TOTAL_SIZE = 8
|
|
|
|
SERVICE_INFO_NUM_NAMESPACES = 9
|
|
|
|
SERVICE_INFO_NUM_TAGS = 10
|
|
|
|
SERVICE_INFO_NUM_PENDING = 11
|
|
|
|
SERVICE_INFO_NUM_CONVERSATIONS = 12
|
|
|
|
SERVICE_INFO_NUM_UNREAD = 13
|
|
|
|
SERVICE_INFO_NUM_DRAFTS = 14
|
2013-05-29 20:19:54 +00:00
|
|
|
SERVICE_INFO_NUM_PENDING_MAPPINGS = 15
|
|
|
|
SERVICE_INFO_NUM_PETITIONED_MAPPINGS = 16
|
|
|
|
SERVICE_INFO_NUM_PENDING_FILES = 15
|
|
|
|
SERVICE_INFO_NUM_PETITIONED_FILES = 16
|
2013-06-12 22:53:31 +00:00
|
|
|
SERVICE_INFO_NUM_PENDING_TAG_SIBLINGS = 17
|
|
|
|
SERVICE_INFO_NUM_PETITIONED_TAG_SIBLINGS = 18
|
|
|
|
SERVICE_INFO_NUM_PENDING_TAG_PARENTS = 19
|
|
|
|
SERVICE_INFO_NUM_PETITIONED_TAG_PARENTS = 20
|
2014-05-14 20:46:38 +00:00
|
|
|
SERVICE_INFO_NUM_SHARES = 21
|
2017-03-08 23:23:12 +00:00
|
|
|
SERVICE_INFO_NUM_VIEWABLE_FILES = 22
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2017-03-02 02:14:56 +00:00
|
|
|
SERVICE_UPDATE_DELETE_PENDING = 0
|
|
|
|
SERVICE_UPDATE_RESET = 1
|
2013-04-10 18:10:37 +00:00
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
ADD = 0
|
|
|
|
DELETE = 1
|
|
|
|
EDIT = 2
|
2014-02-12 23:09:38 +00:00
|
|
|
SET = 3
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
APPROVE = 0
|
|
|
|
DENY = 1
|
|
|
|
|
|
|
|
GET = 0
|
|
|
|
POST = 1
|
|
|
|
OPTIONS = 2
|
|
|
|
|
2016-10-05 20:22:40 +00:00
|
|
|
query_type_string_lookup = {}
|
|
|
|
|
|
|
|
query_type_string_lookup[ GET ] = 'GET'
|
|
|
|
query_type_string_lookup[ POST ] = 'POST'
|
|
|
|
query_type_string_lookup[ OPTIONS ] = 'OPTIONS'
|
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
APPLICATION_HYDRUS_CLIENT_COLLECTION = 0
|
|
|
|
IMAGE_JPEG = 1
|
|
|
|
IMAGE_PNG = 2
|
|
|
|
IMAGE_GIF = 3
|
|
|
|
IMAGE_BMP = 4
|
|
|
|
APPLICATION_FLASH = 5
|
|
|
|
APPLICATION_YAML = 6
|
|
|
|
IMAGE_ICON = 7
|
|
|
|
TEXT_HTML = 8
|
|
|
|
VIDEO_FLV = 9
|
2013-03-15 02:38:12 +00:00
|
|
|
APPLICATION_PDF = 10
|
2013-05-01 17:21:53 +00:00
|
|
|
APPLICATION_ZIP = 11
|
|
|
|
APPLICATION_HYDRUS_ENCRYPTED_ZIP = 12
|
2013-07-10 20:25:57 +00:00
|
|
|
AUDIO_MP3 = 13
|
|
|
|
VIDEO_MP4 = 14
|
2013-07-17 20:56:13 +00:00
|
|
|
AUDIO_OGG = 15
|
|
|
|
AUDIO_FLAC = 16
|
2013-08-14 20:21:49 +00:00
|
|
|
AUDIO_WMA = 17
|
|
|
|
VIDEO_WMV = 18
|
|
|
|
UNDETERMINED_WM = 19
|
2014-04-30 21:31:40 +00:00
|
|
|
VIDEO_MKV = 20
|
|
|
|
VIDEO_WEBM = 21
|
2015-06-03 21:05:13 +00:00
|
|
|
APPLICATION_JSON = 22
|
2017-06-28 20:23:21 +00:00
|
|
|
IMAGE_APNG = 23
|
2016-02-24 21:42:54 +00:00
|
|
|
UNDETERMINED_PNG = 24
|
2016-08-17 20:07:22 +00:00
|
|
|
VIDEO_MPEG = 25
|
2016-09-07 20:01:05 +00:00
|
|
|
VIDEO_MOV = 26
|
2016-10-19 20:02:56 +00:00
|
|
|
VIDEO_AVI = 27
|
2017-03-02 02:14:56 +00:00
|
|
|
APPLICATION_HYDRUS_UPDATE_DEFINITIONS = 28
|
|
|
|
APPLICATION_HYDRUS_UPDATE_CONTENT = 29
|
2017-05-31 21:50:53 +00:00
|
|
|
TEXT_PLAIN = 30
|
2017-10-04 17:51:58 +00:00
|
|
|
APPLICATION_RAR = 31
|
|
|
|
APPLICATION_7Z = 32
|
2019-03-06 23:06:22 +00:00
|
|
|
IMAGE_WEBP = 33
|
|
|
|
IMAGE_TIFF = 34
|
2019-03-20 21:22:10 +00:00
|
|
|
APPLICATION_PSD = 35
|
2020-01-02 03:05:35 +00:00
|
|
|
AUDIO_M4A = 36
|
2020-01-16 02:08:23 +00:00
|
|
|
VIDEO_REALMEDIA = 37
|
|
|
|
AUDIO_REALMEDIA = 38
|
|
|
|
AUDIO_TRUEAUDIO = 39
|
|
|
|
GENERAL_AUDIO = 40
|
|
|
|
GENERAL_IMAGE = 41
|
|
|
|
GENERAL_VIDEO = 42
|
|
|
|
GENERAL_APPLICATION = 43
|
2020-01-22 21:04:43 +00:00
|
|
|
GENERAL_ANIMATION = 44
|
2013-02-19 00:11:43 +00:00
|
|
|
APPLICATION_OCTET_STREAM = 100
|
|
|
|
APPLICATION_UNKNOWN = 101
|
|
|
|
|
2020-01-22 21:04:43 +00:00
|
|
|
GENERAL_FILETYPES = { GENERAL_APPLICATION, GENERAL_AUDIO, GENERAL_IMAGE, GENERAL_VIDEO, GENERAL_ANIMATION }
|
2020-01-16 02:08:23 +00:00
|
|
|
|
|
|
|
SEARCHABLE_MIMES = { IMAGE_JPEG, IMAGE_PNG, IMAGE_APNG, IMAGE_GIF, IMAGE_WEBP, IMAGE_TIFF, IMAGE_ICON, APPLICATION_FLASH, VIDEO_AVI, VIDEO_FLV, VIDEO_MOV, VIDEO_MP4, VIDEO_MKV, VIDEO_REALMEDIA, VIDEO_WEBM, VIDEO_MPEG, APPLICATION_PSD, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z, AUDIO_M4A, AUDIO_MP3, AUDIO_REALMEDIA, AUDIO_OGG, AUDIO_FLAC, AUDIO_TRUEAUDIO, AUDIO_WMA, VIDEO_WMV }
|
|
|
|
|
2020-01-22 21:04:43 +00:00
|
|
|
STORABLE_MIMES = set( SEARCHABLE_MIMES ).union( { APPLICATION_HYDRUS_UPDATE_CONTENT, APPLICATION_HYDRUS_UPDATE_DEFINITIONS } )
|
|
|
|
|
|
|
|
ALLOWED_MIMES = set( STORABLE_MIMES ).union( { IMAGE_BMP } )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2017-10-18 19:41:25 +00:00
|
|
|
DECOMPRESSION_BOMB_IMAGES = ( IMAGE_JPEG, IMAGE_PNG )
|
|
|
|
|
2020-01-22 21:04:43 +00:00
|
|
|
IMAGES = ( IMAGE_JPEG, IMAGE_PNG, IMAGE_BMP, IMAGE_WEBP, IMAGE_TIFF, IMAGE_ICON )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2020-01-22 21:04:43 +00:00
|
|
|
ANIMATIONS = ( IMAGE_GIF, IMAGE_APNG )
|
2013-07-10 20:25:57 +00:00
|
|
|
|
2020-01-16 02:08:23 +00:00
|
|
|
AUDIO = ( AUDIO_M4A, AUDIO_MP3, AUDIO_OGG, AUDIO_FLAC, AUDIO_WMA, AUDIO_REALMEDIA, AUDIO_TRUEAUDIO )
|
2013-07-10 20:25:57 +00:00
|
|
|
|
2020-01-16 02:08:23 +00:00
|
|
|
VIDEO = ( VIDEO_AVI, VIDEO_FLV, VIDEO_MOV, VIDEO_MP4, VIDEO_WMV, VIDEO_MKV, VIDEO_REALMEDIA, VIDEO_WEBM, VIDEO_MPEG )
|
2015-06-17 20:01:41 +00:00
|
|
|
|
2019-03-20 21:22:10 +00:00
|
|
|
APPLICATIONS = ( APPLICATION_FLASH, APPLICATION_PSD, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z )
|
2013-03-15 02:38:12 +00:00
|
|
|
|
2020-01-16 02:08:23 +00:00
|
|
|
general_mimetypes_to_mime_groups = {}
|
|
|
|
|
|
|
|
general_mimetypes_to_mime_groups[ GENERAL_APPLICATION ] = APPLICATIONS
|
|
|
|
general_mimetypes_to_mime_groups[ GENERAL_AUDIO ] = AUDIO
|
|
|
|
general_mimetypes_to_mime_groups[ GENERAL_IMAGE ] = IMAGES
|
|
|
|
general_mimetypes_to_mime_groups[ GENERAL_VIDEO ] = VIDEO
|
2020-01-22 21:04:43 +00:00
|
|
|
general_mimetypes_to_mime_groups[ GENERAL_ANIMATION ] = ANIMATIONS
|
|
|
|
|
|
|
|
mimes_to_general_mimetypes = {}
|
|
|
|
|
|
|
|
for ( general_mime_type, mimes_in_type ) in general_mimetypes_to_mime_groups.items():
|
|
|
|
|
|
|
|
for mime in mimes_in_type:
|
|
|
|
|
|
|
|
mimes_to_general_mimetypes[ mime ] = general_mime_type
|
|
|
|
|
|
|
|
|
2020-01-16 02:08:23 +00:00
|
|
|
|
2019-08-07 22:59:53 +00:00
|
|
|
MIMES_THAT_DEFINITELY_HAVE_AUDIO = tuple( [ APPLICATION_FLASH ] + list( AUDIO ) )
|
|
|
|
MIMES_THAT_MAY_HAVE_AUDIO = tuple( list( MIMES_THAT_DEFINITELY_HAVE_AUDIO ) + list( VIDEO ) )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2017-10-04 17:51:58 +00:00
|
|
|
ARCHIVES = ( APPLICATION_ZIP, APPLICATION_HYDRUS_ENCRYPTED_ZIP, APPLICATION_RAR, APPLICATION_7Z )
|
2013-05-01 17:21:53 +00:00
|
|
|
|
2020-01-16 02:08:23 +00:00
|
|
|
MIMES_WITH_THUMBNAILS = ( APPLICATION_FLASH, IMAGE_JPEG, IMAGE_PNG, IMAGE_APNG, IMAGE_GIF, IMAGE_BMP, IMAGE_WEBP, IMAGE_TIFF, IMAGE_ICON, VIDEO_AVI, VIDEO_FLV, VIDEO_MOV, VIDEO_MP4, VIDEO_WMV, VIDEO_MKV, VIDEO_REALMEDIA, VIDEO_WEBM, VIDEO_MPEG )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2018-05-09 20:23:00 +00:00
|
|
|
HYDRUS_UPDATE_FILES = ( APPLICATION_HYDRUS_UPDATE_DEFINITIONS, APPLICATION_HYDRUS_UPDATE_CONTENT )
|
|
|
|
|
2019-05-15 20:35:00 +00:00
|
|
|
MIMES_WE_CAN_PHASH = ( IMAGE_JPEG, IMAGE_PNG, IMAGE_WEBP, IMAGE_TIFF, IMAGE_ICON )
|
2013-07-10 20:25:57 +00:00
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup = {}
|
|
|
|
|
|
|
|
mime_enum_lookup[ 'collection' ] = APPLICATION_HYDRUS_CLIENT_COLLECTION
|
|
|
|
mime_enum_lookup[ 'image/jpe' ] = IMAGE_JPEG
|
|
|
|
mime_enum_lookup[ 'image/jpeg' ] = IMAGE_JPEG
|
|
|
|
mime_enum_lookup[ 'image/jpg' ] = IMAGE_JPEG
|
2013-07-17 20:56:13 +00:00
|
|
|
mime_enum_lookup[ 'image/x-png' ] = IMAGE_PNG
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'image/png' ] = IMAGE_PNG
|
2017-06-28 20:23:21 +00:00
|
|
|
mime_enum_lookup[ 'image/apng' ] = IMAGE_APNG
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'image/gif' ] = IMAGE_GIF
|
|
|
|
mime_enum_lookup[ 'image/bmp' ] = IMAGE_BMP
|
2019-03-06 23:06:22 +00:00
|
|
|
mime_enum_lookup[ 'image/webp' ] = IMAGE_WEBP
|
|
|
|
mime_enum_lookup[ 'image/tiff' ] = IMAGE_TIFF
|
2019-05-15 20:35:00 +00:00
|
|
|
mime_enum_lookup[ 'image/x-icon' ] = IMAGE_ICON
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'image/vnd.microsoft.icon' ] = IMAGE_ICON
|
2019-05-15 20:35:00 +00:00
|
|
|
mime_enum_lookup[ 'image' ] = IMAGES
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'application/x-shockwave-flash' ] = APPLICATION_FLASH
|
2019-03-20 21:22:10 +00:00
|
|
|
mime_enum_lookup[ 'application/x-photoshop' ] = APPLICATION_PSD
|
|
|
|
mime_enum_lookup[ 'image/vnd.adobe.photoshop' ] = APPLICATION_PSD
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'application/octet-stream' ] = APPLICATION_OCTET_STREAM
|
|
|
|
mime_enum_lookup[ 'application/x-yaml' ] = APPLICATION_YAML
|
2013-07-17 20:56:13 +00:00
|
|
|
mime_enum_lookup[ 'PDF document' ] = APPLICATION_PDF
|
2013-03-15 02:38:12 +00:00
|
|
|
mime_enum_lookup[ 'application/pdf' ] = APPLICATION_PDF
|
2013-05-01 17:21:53 +00:00
|
|
|
mime_enum_lookup[ 'application/zip' ] = APPLICATION_ZIP
|
2017-10-04 17:51:58 +00:00
|
|
|
mime_enum_lookup[ 'application/vnd.rar' ] = APPLICATION_RAR
|
|
|
|
mime_enum_lookup[ 'application/x-7z-compressed' ] = APPLICATION_7Z
|
2015-06-03 21:05:13 +00:00
|
|
|
mime_enum_lookup[ 'application/json' ] = APPLICATION_JSON
|
2013-05-01 17:21:53 +00:00
|
|
|
mime_enum_lookup[ 'application/hydrus-encrypted-zip' ] = APPLICATION_HYDRUS_ENCRYPTED_ZIP
|
2017-03-02 02:14:56 +00:00
|
|
|
mime_enum_lookup[ 'application/hydrus-update-content' ] = APPLICATION_HYDRUS_UPDATE_CONTENT
|
|
|
|
mime_enum_lookup[ 'application/hydrus-update-definitions' ] = APPLICATION_HYDRUS_UPDATE_DEFINITIONS
|
2013-03-15 02:38:12 +00:00
|
|
|
mime_enum_lookup[ 'application' ] = APPLICATIONS
|
2020-01-02 03:05:35 +00:00
|
|
|
mime_enum_lookup[ 'audio/mp4' ] = AUDIO_M4A
|
2013-07-10 20:25:57 +00:00
|
|
|
mime_enum_lookup[ 'audio/mp3' ] = AUDIO_MP3
|
2013-07-17 20:56:13 +00:00
|
|
|
mime_enum_lookup[ 'audio/ogg' ] = AUDIO_OGG
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_enum_lookup[ 'audio/vnd.rn-realaudio' ] = AUDIO_REALMEDIA
|
|
|
|
mime_enum_lookup[ 'audio/x-tta' ] = AUDIO_TRUEAUDIO
|
2013-07-17 20:56:13 +00:00
|
|
|
mime_enum_lookup[ 'audio/flac' ] = AUDIO_FLAC
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_enum_lookup[ 'audio/x-ms-wma' ] = AUDIO_WMA
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'text/html' ] = TEXT_HTML
|
2017-05-31 21:50:53 +00:00
|
|
|
mime_enum_lookup[ 'text/plain' ] = TEXT_PLAIN
|
2016-10-19 20:02:56 +00:00
|
|
|
mime_enum_lookup[ 'video/x-msvideo' ] = VIDEO_AVI
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'video/x-flv' ] = VIDEO_FLV
|
2016-09-07 20:01:05 +00:00
|
|
|
mime_enum_lookup[ 'video/quicktime' ] = VIDEO_MOV
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_enum_lookup[ 'video/mp4' ] = VIDEO_MP4
|
2016-08-17 20:07:22 +00:00
|
|
|
mime_enum_lookup[ 'video/mpeg' ] = VIDEO_MPEG
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_enum_lookup[ 'video/x-ms-wmv' ] = VIDEO_WMV
|
2014-04-30 21:31:40 +00:00
|
|
|
mime_enum_lookup[ 'video/x-matroska' ] = VIDEO_MKV
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_enum_lookup[ 'video/vnd.rn-realvideo' ] = VIDEO_REALMEDIA
|
|
|
|
mime_enum_lookup[ 'application/vnd.rn-realmedia' ] = VIDEO_REALMEDIA
|
2014-04-30 21:31:40 +00:00
|
|
|
mime_enum_lookup[ 'video/webm' ] = VIDEO_WEBM
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_enum_lookup[ 'video' ] = VIDEO
|
2020-02-19 21:48:36 +00:00
|
|
|
mime_enum_lookup[ 'unknown filetype' ] = APPLICATION_UNKNOWN
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
mime_string_lookup = {}
|
|
|
|
|
|
|
|
mime_string_lookup[ APPLICATION_HYDRUS_CLIENT_COLLECTION ] = 'collection'
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_string_lookup[ IMAGE_JPEG ] = 'jpeg'
|
|
|
|
mime_string_lookup[ IMAGE_PNG ] = 'png'
|
|
|
|
mime_string_lookup[ IMAGE_APNG ] = 'apng'
|
|
|
|
mime_string_lookup[ IMAGE_GIF ] = 'gif'
|
|
|
|
mime_string_lookup[ IMAGE_BMP ] = 'bmp'
|
|
|
|
mime_string_lookup[ IMAGE_WEBP ] = 'webp'
|
|
|
|
mime_string_lookup[ IMAGE_TIFF ] = 'tiff'
|
|
|
|
mime_string_lookup[ IMAGE_ICON ] = 'icon'
|
|
|
|
mime_string_lookup[ APPLICATION_FLASH ] = 'flash'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_string_lookup[ APPLICATION_OCTET_STREAM ] = 'application/octet-stream'
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_string_lookup[ APPLICATION_YAML ] = 'yaml'
|
|
|
|
mime_string_lookup[ APPLICATION_JSON ] = 'json'
|
|
|
|
mime_string_lookup[ APPLICATION_PDF ] = 'pdf'
|
|
|
|
mime_string_lookup[ APPLICATION_PSD ] = 'photoshop psd'
|
|
|
|
mime_string_lookup[ APPLICATION_ZIP ] = 'zip'
|
|
|
|
mime_string_lookup[ APPLICATION_RAR ] = 'rar'
|
|
|
|
mime_string_lookup[ APPLICATION_7Z ] = '7z'
|
2013-05-01 17:21:53 +00:00
|
|
|
mime_string_lookup[ APPLICATION_HYDRUS_ENCRYPTED_ZIP ] = 'application/hydrus-encrypted-zip'
|
2017-03-02 02:14:56 +00:00
|
|
|
mime_string_lookup[ APPLICATION_HYDRUS_UPDATE_CONTENT ] = 'application/hydrus-update-content'
|
|
|
|
mime_string_lookup[ APPLICATION_HYDRUS_UPDATE_DEFINITIONS ] = 'application/hydrus-update-definitions'
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_string_lookup[ AUDIO_M4A ] = 'm4a'
|
|
|
|
mime_string_lookup[ AUDIO_MP3 ] = 'mp3'
|
|
|
|
mime_string_lookup[ AUDIO_OGG ] = 'ogg'
|
|
|
|
mime_string_lookup[ AUDIO_FLAC ] = 'flac'
|
|
|
|
mime_string_lookup[ AUDIO_REALMEDIA ] = 'realaudio'
|
|
|
|
mime_string_lookup[ AUDIO_TRUEAUDIO ] = 'tta'
|
|
|
|
mime_string_lookup[ AUDIO_WMA ] = 'wma'
|
|
|
|
mime_string_lookup[ TEXT_HTML ] = 'html'
|
|
|
|
mime_string_lookup[ TEXT_PLAIN ] = 'plaintext'
|
|
|
|
mime_string_lookup[ VIDEO_AVI ] = 'avi'
|
|
|
|
mime_string_lookup[ VIDEO_FLV ] = 'flv'
|
|
|
|
mime_string_lookup[ VIDEO_MOV ] = 'quicktime'
|
|
|
|
mime_string_lookup[ VIDEO_MP4 ] = 'mp4'
|
|
|
|
mime_string_lookup[ VIDEO_MPEG ] = 'mpeg'
|
|
|
|
mime_string_lookup[ VIDEO_WMV ] = 'wmv'
|
|
|
|
mime_string_lookup[ VIDEO_MKV ] = 'matroska'
|
|
|
|
mime_string_lookup[ VIDEO_REALMEDIA ] = 'realvideo'
|
|
|
|
mime_string_lookup[ VIDEO_WEBM ] = 'webm'
|
|
|
|
mime_string_lookup[ UNDETERMINED_WM ] = 'wma or wmv'
|
|
|
|
mime_string_lookup[ APPLICATION_UNKNOWN ] = 'unknown filetype'
|
|
|
|
mime_string_lookup[ GENERAL_APPLICATION ] = 'application'
|
|
|
|
mime_string_lookup[ GENERAL_AUDIO ] = 'audio'
|
|
|
|
mime_string_lookup[ GENERAL_IMAGE ] = 'image'
|
|
|
|
mime_string_lookup[ GENERAL_VIDEO ] = 'video'
|
2020-01-22 21:04:43 +00:00
|
|
|
mime_string_lookup[ GENERAL_ANIMATION ] = 'animation'
|
2020-01-16 02:08:23 +00:00
|
|
|
|
|
|
|
mime_mimetype_string_lookup = {}
|
|
|
|
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_HYDRUS_CLIENT_COLLECTION ] = 'collection'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_JPEG ] = 'image/jpg'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_PNG ] = 'image/png'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_APNG ] = 'image/apng'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_GIF ] = 'image/gif'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_BMP ] = 'image/bmp'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_WEBP ] = 'image/webp'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_TIFF ] = 'image/tiff'
|
|
|
|
mime_mimetype_string_lookup[ IMAGE_ICON ] = 'image/x-icon'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_FLASH ] = 'application/x-shockwave-flash'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_OCTET_STREAM ] = 'application/octet-stream'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_YAML ] = 'application/x-yaml'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_JSON ] = 'application/json'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_PDF ] = 'application/pdf'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_PSD ] = 'application/x-photoshop'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_ZIP ] = 'application/zip'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_RAR ] = 'application/vnd.rar'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_7Z ] = 'application/x-7z-compressed'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_HYDRUS_ENCRYPTED_ZIP ] = 'application/hydrus-encrypted-zip'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_HYDRUS_UPDATE_CONTENT ] = 'application/hydrus-update-content'
|
|
|
|
mime_mimetype_string_lookup[ APPLICATION_HYDRUS_UPDATE_DEFINITIONS ] = 'application/hydrus-update-definitions'
|
|
|
|
mime_mimetype_string_lookup[ AUDIO_M4A ] = 'audio/mp4'
|
|
|
|
mime_mimetype_string_lookup[ AUDIO_MP3 ] = 'audio/mp3'
|
|
|
|
mime_mimetype_string_lookup[ AUDIO_OGG ] = 'audio/ogg'
|
|
|
|
mime_mimetype_string_lookup[ AUDIO_FLAC ] = 'audio/flac'
|
|
|
|
mime_mimetype_string_lookup[ AUDIO_REALMEDIA ] = 'audio/vnd.rn-realaudio'
|
|
|
|
mime_mimetype_string_lookup[ AUDIO_TRUEAUDIO ] = 'audio/x-tta'
|
|
|
|
mime_mimetype_string_lookup[ AUDIO_WMA ] = 'audio/x-ms-wma'
|
|
|
|
mime_mimetype_string_lookup[ TEXT_HTML ] = 'text/html'
|
|
|
|
mime_mimetype_string_lookup[ TEXT_PLAIN ] = 'text/plain'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_AVI ] = 'video/x-msvideo'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_FLV ] = 'video/x-flv'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_MOV ] = 'video/quicktime'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_MP4 ] = 'video/mp4'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_MPEG ] = 'video/mpeg'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_WMV ] = 'video/x-ms-wmv'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_MKV ] = 'video/x-matroska'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_REALMEDIA ] = 'video/vnd.rn-realvideo'
|
|
|
|
mime_mimetype_string_lookup[ VIDEO_WEBM ] = 'video/webm'
|
|
|
|
mime_mimetype_string_lookup[ UNDETERMINED_WM ] = 'audio/x-ms-wma or video/x-ms-wmv'
|
2020-02-19 21:48:36 +00:00
|
|
|
mime_mimetype_string_lookup[ APPLICATION_UNKNOWN ] = 'unknown filetype'
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_mimetype_string_lookup[ GENERAL_APPLICATION ] = 'application'
|
|
|
|
mime_mimetype_string_lookup[ GENERAL_AUDIO ] = 'audio'
|
|
|
|
mime_mimetype_string_lookup[ GENERAL_IMAGE ] = 'image'
|
|
|
|
mime_mimetype_string_lookup[ GENERAL_VIDEO ] = 'video'
|
2020-01-22 21:04:43 +00:00
|
|
|
mime_mimetype_string_lookup[ GENERAL_ANIMATION ] = 'animation'
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
mime_ext_lookup = {}
|
|
|
|
|
|
|
|
mime_ext_lookup[ APPLICATION_HYDRUS_CLIENT_COLLECTION ] = '.collection'
|
|
|
|
mime_ext_lookup[ IMAGE_JPEG ] = '.jpg'
|
|
|
|
mime_ext_lookup[ IMAGE_PNG ] = '.png'
|
2017-06-28 20:23:21 +00:00
|
|
|
mime_ext_lookup[ IMAGE_APNG ] = '.png'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_ext_lookup[ IMAGE_GIF ] = '.gif'
|
|
|
|
mime_ext_lookup[ IMAGE_BMP ] = '.bmp'
|
2019-03-06 23:06:22 +00:00
|
|
|
mime_ext_lookup[ IMAGE_WEBP ] = '.webp'
|
|
|
|
mime_ext_lookup[ IMAGE_TIFF ] = '.tiff'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_ext_lookup[ IMAGE_ICON ] = '.ico'
|
|
|
|
mime_ext_lookup[ APPLICATION_FLASH ] = '.swf'
|
|
|
|
mime_ext_lookup[ APPLICATION_OCTET_STREAM ] = '.bin'
|
|
|
|
mime_ext_lookup[ APPLICATION_YAML ] = '.yaml'
|
2015-06-03 21:05:13 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_JSON ] = '.json'
|
2013-03-15 02:38:12 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_PDF ] = '.pdf'
|
2019-03-20 21:22:10 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_PSD ] = '.psd'
|
2013-05-01 17:21:53 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_ZIP ] = '.zip'
|
2017-10-04 17:51:58 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_RAR ] = '.rar'
|
|
|
|
mime_ext_lookup[ APPLICATION_7Z ] = '.7z'
|
2013-05-01 17:21:53 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_HYDRUS_ENCRYPTED_ZIP ] = '.zip.encrypted'
|
2017-03-02 02:14:56 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_HYDRUS_UPDATE_CONTENT ] = ''
|
|
|
|
mime_ext_lookup[ APPLICATION_HYDRUS_UPDATE_DEFINITIONS ] = ''
|
2020-01-02 03:05:35 +00:00
|
|
|
mime_ext_lookup[ AUDIO_M4A ] = '.m4a'
|
2013-07-10 20:25:57 +00:00
|
|
|
mime_ext_lookup[ AUDIO_MP3 ] = '.mp3'
|
2013-07-17 20:56:13 +00:00
|
|
|
mime_ext_lookup[ AUDIO_OGG ] = '.ogg'
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_ext_lookup[ AUDIO_REALMEDIA ] = '.ra'
|
2013-07-17 20:56:13 +00:00
|
|
|
mime_ext_lookup[ AUDIO_FLAC ] = '.flac'
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_ext_lookup[ AUDIO_TRUEAUDIO ] = '.tta'
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_ext_lookup[ AUDIO_WMA ] = '.wma'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_ext_lookup[ TEXT_HTML ] = '.html'
|
2017-05-31 21:50:53 +00:00
|
|
|
mime_ext_lookup[ TEXT_PLAIN ] = '.txt'
|
2016-10-19 20:02:56 +00:00
|
|
|
mime_ext_lookup[ VIDEO_AVI ] = '.avi'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_ext_lookup[ VIDEO_FLV ] = '.flv'
|
2016-09-07 20:01:05 +00:00
|
|
|
mime_ext_lookup[ VIDEO_MOV ] = '.mov'
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_ext_lookup[ VIDEO_MP4 ] = '.mp4'
|
2016-08-17 20:07:22 +00:00
|
|
|
mime_ext_lookup[ VIDEO_MPEG ] = '.mpeg'
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_ext_lookup[ VIDEO_WMV ] = '.wmv'
|
2014-04-30 21:31:40 +00:00
|
|
|
mime_ext_lookup[ VIDEO_MKV ] = '.mkv'
|
2020-01-16 02:08:23 +00:00
|
|
|
mime_ext_lookup[ VIDEO_REALMEDIA ] = '.rm'
|
2014-04-30 21:31:40 +00:00
|
|
|
mime_ext_lookup[ VIDEO_WEBM ] = '.webm'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_UNKNOWN ] = ''
|
|
|
|
#mime_ext_lookup[ 'application/x-rar-compressed' ] = '.rar'
|
|
|
|
|
|
|
|
ALLOWED_MIME_EXTENSIONS = [ mime_ext_lookup[ mime ] for mime in ALLOWED_MIMES ]
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
PREDICATE_TYPE_TAG = 0
|
|
|
|
PREDICATE_TYPE_NAMESPACE = 1
|
|
|
|
PREDICATE_TYPE_PARENT = 2
|
|
|
|
PREDICATE_TYPE_WILDCARD = 3
|
|
|
|
PREDICATE_TYPE_SYSTEM_EVERYTHING = 4
|
|
|
|
PREDICATE_TYPE_SYSTEM_INBOX = 5
|
|
|
|
PREDICATE_TYPE_SYSTEM_ARCHIVE = 6
|
|
|
|
PREDICATE_TYPE_SYSTEM_UNTAGGED = 7
|
|
|
|
PREDICATE_TYPE_SYSTEM_NUM_TAGS = 8
|
|
|
|
PREDICATE_TYPE_SYSTEM_LIMIT = 9
|
|
|
|
PREDICATE_TYPE_SYSTEM_SIZE = 10
|
|
|
|
PREDICATE_TYPE_SYSTEM_AGE = 11
|
|
|
|
PREDICATE_TYPE_SYSTEM_HASH = 12
|
|
|
|
PREDICATE_TYPE_SYSTEM_WIDTH = 13
|
|
|
|
PREDICATE_TYPE_SYSTEM_HEIGHT = 14
|
|
|
|
PREDICATE_TYPE_SYSTEM_RATIO = 15
|
|
|
|
PREDICATE_TYPE_SYSTEM_DURATION = 16
|
|
|
|
PREDICATE_TYPE_SYSTEM_MIME = 17
|
|
|
|
PREDICATE_TYPE_SYSTEM_RATING = 18
|
|
|
|
PREDICATE_TYPE_SYSTEM_SIMILAR_TO = 19
|
|
|
|
PREDICATE_TYPE_SYSTEM_LOCAL = 20
|
|
|
|
PREDICATE_TYPE_SYSTEM_NOT_LOCAL = 21
|
|
|
|
PREDICATE_TYPE_SYSTEM_NUM_WORDS = 22
|
|
|
|
PREDICATE_TYPE_SYSTEM_FILE_SERVICE = 23
|
|
|
|
PREDICATE_TYPE_SYSTEM_NUM_PIXELS = 24
|
|
|
|
PREDICATE_TYPE_SYSTEM_DIMENSIONS = 25
|
2019-07-24 21:39:02 +00:00
|
|
|
PREDICATE_TYPE_SYSTEM_FILE_RELATIONSHIPS_COUNT = 26
|
2017-06-21 21:15:59 +00:00
|
|
|
PREDICATE_TYPE_SYSTEM_TAG_AS_NUMBER = 27
|
2018-03-28 21:55:58 +00:00
|
|
|
PREDICATE_TYPE_SYSTEM_KNOWN_URLS = 28
|
2018-12-12 22:15:46 +00:00
|
|
|
PREDICATE_TYPE_SYSTEM_FILE_VIEWING_STATS = 29
|
2019-03-27 22:01:02 +00:00
|
|
|
PREDICATE_TYPE_OR_CONTAINER = 30
|
2019-07-17 22:10:19 +00:00
|
|
|
PREDICATE_TYPE_LABEL = 31
|
2019-07-24 21:39:02 +00:00
|
|
|
PREDICATE_TYPE_SYSTEM_FILE_RELATIONSHIPS_KING = 32
|
|
|
|
PREDICATE_TYPE_SYSTEM_FILE_RELATIONSHIPS = 33
|
2019-08-07 22:59:53 +00:00
|
|
|
PREDICATE_TYPE_SYSTEM_HAS_AUDIO = 34
|
2019-10-02 23:38:59 +00:00
|
|
|
PREDICATE_TYPE_SYSTEM_MODIFIED_TIME = 35
|
2015-06-24 22:10:14 +00:00
|
|
|
|
2019-10-02 23:38:59 +00:00
|
|
|
SYSTEM_PREDICATES = [ PREDICATE_TYPE_SYSTEM_EVERYTHING, PREDICATE_TYPE_SYSTEM_INBOX, PREDICATE_TYPE_SYSTEM_ARCHIVE, PREDICATE_TYPE_SYSTEM_UNTAGGED, PREDICATE_TYPE_SYSTEM_NUM_TAGS, PREDICATE_TYPE_SYSTEM_LIMIT, PREDICATE_TYPE_SYSTEM_SIZE, PREDICATE_TYPE_SYSTEM_AGE, PREDICATE_TYPE_SYSTEM_MODIFIED_TIME, PREDICATE_TYPE_SYSTEM_HASH, PREDICATE_TYPE_SYSTEM_WIDTH, PREDICATE_TYPE_SYSTEM_HEIGHT, PREDICATE_TYPE_SYSTEM_RATIO, PREDICATE_TYPE_SYSTEM_DURATION, PREDICATE_TYPE_SYSTEM_HAS_AUDIO, PREDICATE_TYPE_SYSTEM_MIME, PREDICATE_TYPE_SYSTEM_RATING, PREDICATE_TYPE_SYSTEM_SIMILAR_TO, PREDICATE_TYPE_SYSTEM_LOCAL, PREDICATE_TYPE_SYSTEM_NOT_LOCAL, PREDICATE_TYPE_SYSTEM_NUM_WORDS, PREDICATE_TYPE_SYSTEM_FILE_SERVICE, PREDICATE_TYPE_SYSTEM_NUM_PIXELS, PREDICATE_TYPE_SYSTEM_DIMENSIONS, PREDICATE_TYPE_SYSTEM_TAG_AS_NUMBER, PREDICATE_TYPE_SYSTEM_FILE_RELATIONSHIPS, PREDICATE_TYPE_SYSTEM_FILE_RELATIONSHIPS_COUNT, PREDICATE_TYPE_SYSTEM_FILE_RELATIONSHIPS_KING, PREDICATE_TYPE_SYSTEM_KNOWN_URLS, PREDICATE_TYPE_SYSTEM_FILE_VIEWING_STATS ]
|
2013-03-27 20:02:51 +00:00
|
|
|
|
2014-02-12 23:09:38 +00:00
|
|
|
SITE_TYPE_DEVIANT_ART = 0
|
|
|
|
SITE_TYPE_GIPHY = 1
|
|
|
|
SITE_TYPE_PIXIV = 2
|
|
|
|
SITE_TYPE_BOORU = 3
|
|
|
|
SITE_TYPE_TUMBLR = 4
|
|
|
|
SITE_TYPE_HENTAI_FOUNDRY = 5
|
|
|
|
SITE_TYPE_NEWGROUNDS = 6
|
2015-10-07 21:56:22 +00:00
|
|
|
SITE_TYPE_NEWGROUNDS_MOVIES = 7
|
|
|
|
SITE_TYPE_NEWGROUNDS_GAMES = 8
|
|
|
|
SITE_TYPE_HENTAI_FOUNDRY_ARTIST = 9
|
|
|
|
SITE_TYPE_HENTAI_FOUNDRY_ARTIST_PICTURES = 10
|
|
|
|
SITE_TYPE_HENTAI_FOUNDRY_ARTIST_SCRAPS = 11
|
|
|
|
SITE_TYPE_HENTAI_FOUNDRY_TAGS = 12
|
|
|
|
SITE_TYPE_PIXIV_ARTIST_ID = 13
|
|
|
|
SITE_TYPE_PIXIV_TAG = 14
|
2015-10-14 21:02:25 +00:00
|
|
|
SITE_TYPE_DEFAULT = 15
|
2018-05-23 21:05:06 +00:00
|
|
|
SITE_TYPE_WATCHER = 16
|
2013-04-10 18:10:37 +00:00
|
|
|
|
2014-09-03 20:26:49 +00:00
|
|
|
site_type_string_lookup = {}
|
|
|
|
|
2015-10-14 21:02:25 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_DEFAULT ] = 'default'
|
2014-09-03 20:26:49 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_BOORU ] = 'booru'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_DEVIANT_ART ] = 'deviant art'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_GIPHY ] = 'giphy'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_HENTAI_FOUNDRY ] = 'hentai foundry'
|
2015-10-07 21:56:22 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_HENTAI_FOUNDRY_ARTIST ] = 'hentai foundry artist'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_HENTAI_FOUNDRY_ARTIST_PICTURES ] = 'hentai foundry artist pictures'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_HENTAI_FOUNDRY_ARTIST_SCRAPS ] = 'hentai foundry artist scraps'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_HENTAI_FOUNDRY_TAGS ] = 'hentai foundry tags'
|
2014-09-03 20:26:49 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_NEWGROUNDS ] = 'newgrounds'
|
2015-10-07 21:56:22 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_NEWGROUNDS_GAMES ] = 'newgrounds games'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_NEWGROUNDS_MOVIES ] = 'newgrounds movies'
|
2014-09-03 20:26:49 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_PIXIV ] = 'pixiv'
|
2015-10-07 21:56:22 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_PIXIV_ARTIST_ID ] = 'pixiv artist id'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_PIXIV_TAG ] = 'pixiv tag'
|
2014-09-03 20:26:49 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_TUMBLR ] = 'tumblr'
|
2018-05-23 21:05:06 +00:00
|
|
|
site_type_string_lookup[ SITE_TYPE_WATCHER ] = 'watcher'
|
2014-09-03 20:26:49 +00:00
|
|
|
|
2018-02-07 23:40:33 +00:00
|
|
|
TIMESTAMP_TYPE_SOURCE = 0
|
|
|
|
|
|
|
|
TIMEZONE_GMT = 0
|
|
|
|
TIMEZONE_LOCAL = 1
|
|
|
|
TIMEZONE_OFFSET = 2
|
|
|
|
|
2017-11-29 21:48:23 +00:00
|
|
|
URL_TYPE_POST = 0
|
|
|
|
URL_TYPE_API = 1
|
|
|
|
URL_TYPE_FILE = 2
|
|
|
|
URL_TYPE_GALLERY = 3
|
2017-12-13 22:33:07 +00:00
|
|
|
URL_TYPE_WATCHABLE = 4
|
2018-01-17 22:52:10 +00:00
|
|
|
URL_TYPE_UNKNOWN = 5
|
2018-06-06 21:27:02 +00:00
|
|
|
URL_TYPE_NEXT = 6
|
|
|
|
URL_TYPE_DESIRED = 7
|
|
|
|
URL_TYPE_SOURCE = 8
|
2017-11-29 21:48:23 +00:00
|
|
|
|
|
|
|
url_type_string_lookup = {}
|
|
|
|
|
|
|
|
url_type_string_lookup[ URL_TYPE_POST ] = 'post url'
|
|
|
|
url_type_string_lookup[ URL_TYPE_API ] = 'api url'
|
|
|
|
url_type_string_lookup[ URL_TYPE_FILE ] = 'file url'
|
|
|
|
url_type_string_lookup[ URL_TYPE_GALLERY ] = 'gallery url'
|
2017-12-13 22:33:07 +00:00
|
|
|
url_type_string_lookup[ URL_TYPE_WATCHABLE ] = 'watchable url'
|
2018-01-17 22:52:10 +00:00
|
|
|
url_type_string_lookup[ URL_TYPE_UNKNOWN ] = 'unknown url'
|
2018-06-06 21:27:02 +00:00
|
|
|
url_type_string_lookup[ URL_TYPE_NEXT ] = 'next page url'
|
|
|
|
url_type_string_lookup[ URL_TYPE_DESIRED ] = 'downloadable/pursuable url'
|
|
|
|
url_type_string_lookup[ URL_TYPE_SOURCE ] = 'associable/source url'
|
2017-11-29 21:48:23 +00:00
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
# default options
|
|
|
|
|
|
|
|
DEFAULT_SERVER_ADMIN_PORT = 45870
|
|
|
|
DEFAULT_SERVICE_PORT = 45871
|
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
SERVER_ADMIN_KEY = b'server admin'
|
2013-10-02 22:06:06 +00:00
|
|
|
|
2013-11-27 18:27:11 +00:00
|
|
|
def construct_python_tuple( self, node ): return tuple( self.construct_sequence( node ) )
|
2019-01-09 22:59:03 +00:00
|
|
|
def represent_python_tuple( self, data ): return self.represent_sequence( 'tag:yaml.org,2002:python/tuple', data )
|
2013-11-27 18:27:11 +00:00
|
|
|
|
2019-01-09 22:59:03 +00:00
|
|
|
yaml.SafeLoader.add_constructor( 'tag:yaml.org,2002:python/tuple', construct_python_tuple )
|
2014-02-12 23:09:38 +00:00
|
|
|
yaml.SafeDumper.add_representer( tuple, represent_python_tuple )
|
|
|
|
|
|
|
|
# for some reason, sqlite doesn't parse to int before this, despite the column affinity
|
|
|
|
# it gives the register_converter function a bytestring :/
|
|
|
|
def integer_boolean_to_bool( integer_boolean ): return bool( int( integer_boolean ) )
|
2013-11-27 18:27:11 +00:00
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
# sqlite mod
|
|
|
|
|
|
|
|
sqlite3.register_adapter( dict, yaml.safe_dump )
|
2013-03-15 02:38:12 +00:00
|
|
|
sqlite3.register_adapter( list, yaml.safe_dump )
|
2014-02-12 23:09:38 +00:00
|
|
|
sqlite3.register_adapter( tuple, yaml.safe_dump )
|
|
|
|
sqlite3.register_adapter( bool, int )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
sqlite3.register_converter( 'INTEGER_BOOLEAN', integer_boolean_to_bool )
|
2016-12-07 22:12:52 +00:00
|
|
|
sqlite3.register_converter( 'TEXT_YAML', yaml.safe_load )
|