2014-04-23 20:56:12 +00:00
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
|
|
|
|
# dirs
|
|
|
|
|
|
|
|
BASE_DIR = sys.path[0]
|
|
|
|
|
|
|
|
BIN_DIR = BASE_DIR + os.path.sep + 'bin'
|
|
|
|
DB_DIR = BASE_DIR + os.path.sep + 'db'
|
2014-11-12 23:33:13 +00:00
|
|
|
CLIENT_ARCHIVES_DIR = DB_DIR + os.path.sep + 'client_archives'
|
2014-04-23 20:56:12 +00:00
|
|
|
CLIENT_FILES_DIR = DB_DIR + os.path.sep + 'client_files'
|
|
|
|
SERVER_FILES_DIR = DB_DIR + os.path.sep + 'server_files'
|
|
|
|
CLIENT_THUMBNAILS_DIR = DB_DIR + os.path.sep + 'client_thumbnails'
|
|
|
|
SERVER_THUMBNAILS_DIR = DB_DIR + os.path.sep + 'server_thumbnails'
|
|
|
|
SERVER_MESSAGES_DIR = DB_DIR + os.path.sep + 'server_messages'
|
|
|
|
CLIENT_UPDATES_DIR = DB_DIR + os.path.sep + 'client_updates'
|
|
|
|
SERVER_UPDATES_DIR = DB_DIR + os.path.sep + 'server_updates'
|
|
|
|
LOGS_DIR = BASE_DIR + os.path.sep + 'logs'
|
|
|
|
STATIC_DIR = BASE_DIR + os.path.sep + 'static'
|
|
|
|
|
|
|
|
#
|
|
|
|
|
|
|
|
PLATFORM_WINDOWS = False
|
|
|
|
PLATFORM_OSX = False
|
|
|
|
PLATFORM_LINUX = False
|
|
|
|
|
|
|
|
if sys.platform == 'win32': PLATFORM_WINDOWS = True
|
|
|
|
elif sys.platform == 'darwin': PLATFORM_OSX = True
|
|
|
|
elif sys.platform == 'linux2': PLATFORM_LINUX = True
|
|
|
|
|
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
|
|
|
|
|
2015-06-24 22:10:14 +00:00
|
|
|
NETWORK_VERSION = 17
|
2015-09-02 23:16:09 +00:00
|
|
|
SOFTWARE_VERSION = 172
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
UNSCALED_THUMBNAIL_DIMENSIONS = ( 200, 200 )
|
|
|
|
|
|
|
|
HYDRUS_KEY_LENGTH = 32
|
|
|
|
|
|
|
|
UPDATE_DURATION = 100000
|
|
|
|
|
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
|
|
|
|
|
2013-06-12 22:53:31 +00:00
|
|
|
CONTENT_DATA_TYPE_MAPPINGS = 0
|
|
|
|
CONTENT_DATA_TYPE_TAG_SIBLINGS = 1
|
|
|
|
CONTENT_DATA_TYPE_TAG_PARENTS = 2
|
|
|
|
CONTENT_DATA_TYPE_FILES = 3
|
|
|
|
CONTENT_DATA_TYPE_RATINGS = 4
|
|
|
|
|
2013-04-10 18:10:37 +00:00
|
|
|
CONTENT_UPDATE_ADD = 0
|
|
|
|
CONTENT_UPDATE_DELETE = 1
|
|
|
|
CONTENT_UPDATE_PENDING = 2
|
|
|
|
CONTENT_UPDATE_RESCIND_PENDING = 3
|
|
|
|
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
|
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'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_PENDING ] = 'pending'
|
|
|
|
content_update_string_lookup[ CONTENT_UPDATE_RESCIND_PENDING ] = 'rescind pending'
|
|
|
|
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'
|
2013-11-06 18:22:07 +00:00
|
|
|
|
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
|
|
|
|
|
2015-09-02 23:16:09 +00:00
|
|
|
HYDRUS_CLIENT = 0
|
|
|
|
HYDRUS_SERVER = 1
|
|
|
|
HYDRUS_TEST = 2
|
|
|
|
|
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
|
|
|
|
|
|
|
TAG_REPOSITORY = 0
|
|
|
|
FILE_REPOSITORY = 1
|
|
|
|
LOCAL_FILE = 2
|
|
|
|
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
|
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'
|
|
|
|
service_string_lookup[ LOCAL_FILE ] = 'hydrus local file service'
|
|
|
|
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'
|
2014-05-14 20:46:38 +00:00
|
|
|
service_string_lookup[ LOCAL_BOORU ] = 'hydrus local booru'
|
2013-02-19 00:11:43 +00:00
|
|
|
service_string_lookup[ SERVER_ADMIN ] = 'hydrus server administration'
|
2013-10-02 22:06:06 +00:00
|
|
|
service_string_lookup[ NULL_SERVICE ] = 'null service'
|
2013-02-19 00:11:43 +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 ]
|
2013-06-12 22:53:31 +00:00
|
|
|
RESTRICTED_SERVICES = ( REPOSITORIES ) + [ SERVER_ADMIN, MESSAGE_DEPOT ]
|
2013-02-19 00:11:43 +00:00
|
|
|
REMOTE_SERVICES = list( RESTRICTED_SERVICES )
|
2014-11-12 23:33:13 +00:00
|
|
|
TAG_SERVICES = [ LOCAL_TAG, TAG_REPOSITORY ]
|
2014-08-27 22:15:22 +00:00
|
|
|
LOCAL_SERVICES = [ LOCAL_FILE, LOCAL_TAG, LOCAL_RATING_LIKE, LOCAL_RATING_NUMERICAL, LOCAL_BOORU, COMBINED_FILE, COMBINED_TAG ]
|
2014-11-12 23:33:13 +00:00
|
|
|
NONEDITABLE_SERVICES = [ LOCAL_BOORU, LOCAL_FILE, LOCAL_TAG ]
|
2014-05-14 20:46:38 +00:00
|
|
|
ALL_SERVICES = list( REMOTE_SERVICES ) + list( LOCAL_SERVICES )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
SERVICES_WITH_THUMBNAILS = [ FILE_REPOSITORY, LOCAL_FILE ]
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
CURRENT = 0
|
|
|
|
PENDING = 1
|
|
|
|
DELETED = 2
|
|
|
|
PETITIONED = 3
|
2013-05-29 20:19:54 +00:00
|
|
|
DELETED_PENDING = 4
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
HIGH_PRIORITY = 0
|
|
|
|
LOW_PRIORITY = 2
|
|
|
|
|
|
|
|
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
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2013-04-10 18:10:37 +00:00
|
|
|
SERVICE_UPDATE_ACCOUNT = 0
|
|
|
|
SERVICE_UPDATE_DELETE_PENDING = 1
|
|
|
|
SERVICE_UPDATE_ERROR = 2
|
2014-03-05 22:44:02 +00:00
|
|
|
SERVICE_UPDATE_BEGIN_END = 3
|
2013-04-10 18:10:37 +00:00
|
|
|
SERVICE_UPDATE_RESET = 4
|
|
|
|
SERVICE_UPDATE_REQUEST_MADE = 5
|
|
|
|
SERVICE_UPDATE_LAST_CHECK = 6
|
2013-06-12 22:53:31 +00:00
|
|
|
SERVICE_UPDATE_NEWS = 7
|
2014-03-05 22:44:02 +00:00
|
|
|
SERVICE_UPDATE_NEXT_DOWNLOAD_TIMESTAMP = 8
|
|
|
|
SERVICE_UPDATE_NEXT_PROCESSING_TIMESTAMP = 9
|
2015-06-03 21:05:13 +00:00
|
|
|
SERVICE_UPDATE_SUBINDEX_COUNT = 10
|
2015-07-15 20:28:26 +00:00
|
|
|
SERVICE_UPDATE_PAUSE = 11
|
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
|
|
|
|
|
|
|
|
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
|
2013-02-19 00:11:43 +00:00
|
|
|
APPLICATION_OCTET_STREAM = 100
|
|
|
|
APPLICATION_UNKNOWN = 101
|
|
|
|
|
2014-04-30 21:31:40 +00:00
|
|
|
ALLOWED_MIMES = ( IMAGE_JPEG, IMAGE_PNG, IMAGE_GIF, IMAGE_BMP, APPLICATION_FLASH, VIDEO_FLV, VIDEO_MP4, VIDEO_MKV, VIDEO_WEBM, APPLICATION_PDF, AUDIO_MP3, AUDIO_OGG, AUDIO_FLAC, AUDIO_WMA, VIDEO_WMV )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
IMAGES = ( IMAGE_JPEG, IMAGE_PNG, IMAGE_GIF, IMAGE_BMP )
|
|
|
|
|
2013-08-14 20:21:49 +00:00
|
|
|
AUDIO = ( AUDIO_MP3, AUDIO_OGG, AUDIO_FLAC, AUDIO_WMA )
|
2013-07-10 20:25:57 +00:00
|
|
|
|
2014-04-30 21:31:40 +00:00
|
|
|
VIDEO = ( VIDEO_FLV, VIDEO_MP4, VIDEO_WMV, VIDEO_MKV, VIDEO_WEBM )
|
2013-07-10 20:25:57 +00:00
|
|
|
|
2015-08-19 21:48:21 +00:00
|
|
|
NATIVE_VIDEO = ( VIDEO_FLV, VIDEO_MP4, VIDEO_WMV, VIDEO_MKV, VIDEO_WEBM )
|
2015-06-17 20:01:41 +00:00
|
|
|
|
2013-05-01 17:21:53 +00:00
|
|
|
APPLICATIONS = ( APPLICATION_FLASH, APPLICATION_PDF, APPLICATION_ZIP )
|
2013-03-15 02:38:12 +00:00
|
|
|
|
2013-08-14 20:21:49 +00:00
|
|
|
NOISY_MIMES = tuple( [ APPLICATION_FLASH ] + list( AUDIO ) + list( VIDEO ) )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2013-05-01 17:21:53 +00:00
|
|
|
ARCHIVES = ( APPLICATION_ZIP, APPLICATION_HYDRUS_ENCRYPTED_ZIP )
|
|
|
|
|
2014-06-25 20:37:06 +00:00
|
|
|
MIMES_WITH_THUMBNAILS = ( IMAGE_JPEG, IMAGE_PNG, IMAGE_GIF, IMAGE_BMP, VIDEO_WEBM, VIDEO_FLV, VIDEO_MP4, VIDEO_WMV, VIDEO_MKV, VIDEO_WEBM )
|
2013-02-19 00:11:43 +00:00
|
|
|
|
2013-07-10 20:25:57 +00:00
|
|
|
# mp3 header is complicated
|
|
|
|
|
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
|
|
|
|
mime_enum_lookup[ 'image/gif' ] = IMAGE_GIF
|
|
|
|
mime_enum_lookup[ 'image/bmp' ] = IMAGE_BMP
|
|
|
|
mime_enum_lookup[ 'image' ] = IMAGES
|
|
|
|
mime_enum_lookup[ 'image/vnd.microsoft.icon' ] = IMAGE_ICON
|
|
|
|
mime_enum_lookup[ 'application/x-shockwave-flash' ] = APPLICATION_FLASH
|
|
|
|
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
|
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
|
2013-03-15 02:38:12 +00:00
|
|
|
mime_enum_lookup[ 'application' ] = APPLICATIONS
|
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
|
|
|
|
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
|
|
|
|
mime_enum_lookup[ 'video/x-flv' ] = VIDEO_FLV
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_enum_lookup[ 'video/mp4' ] = VIDEO_MP4
|
|
|
|
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
|
|
|
|
mime_enum_lookup[ 'video/webm' ] = VIDEO_WEBM
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_enum_lookup[ 'video' ] = VIDEO
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_enum_lookup[ 'unknown mime' ] = APPLICATION_UNKNOWN
|
|
|
|
|
|
|
|
mime_string_lookup = {}
|
|
|
|
|
|
|
|
mime_string_lookup[ APPLICATION_HYDRUS_CLIENT_COLLECTION ] = 'collection'
|
|
|
|
mime_string_lookup[ IMAGE_JPEG ] = 'image/jpg'
|
|
|
|
mime_string_lookup[ IMAGE_PNG ] = 'image/png'
|
|
|
|
mime_string_lookup[ IMAGE_GIF ] = 'image/gif'
|
|
|
|
mime_string_lookup[ IMAGE_BMP ] = 'image/bmp'
|
|
|
|
mime_string_lookup[ IMAGES ] = 'image'
|
|
|
|
mime_string_lookup[ IMAGE_ICON ] = 'image/vnd.microsoft.icon'
|
|
|
|
mime_string_lookup[ APPLICATION_FLASH ] = 'application/x-shockwave-flash'
|
|
|
|
mime_string_lookup[ APPLICATION_OCTET_STREAM ] = 'application/octet-stream'
|
|
|
|
mime_string_lookup[ APPLICATION_YAML ] = 'application/x-yaml'
|
2015-06-03 21:05:13 +00:00
|
|
|
mime_string_lookup[ APPLICATION_JSON ] = 'application/json'
|
2013-03-15 02:38:12 +00:00
|
|
|
mime_string_lookup[ APPLICATION_PDF ] = 'application/pdf'
|
2013-05-01 17:21:53 +00:00
|
|
|
mime_string_lookup[ APPLICATION_ZIP ] = 'application/zip'
|
|
|
|
mime_string_lookup[ APPLICATION_HYDRUS_ENCRYPTED_ZIP ] = 'application/hydrus-encrypted-zip'
|
2013-03-15 02:38:12 +00:00
|
|
|
mime_string_lookup[ APPLICATIONS ] = 'application'
|
2013-07-10 20:25:57 +00:00
|
|
|
mime_string_lookup[ AUDIO_MP3 ] = 'audio/mp3'
|
2013-07-17 20:56:13 +00:00
|
|
|
mime_string_lookup[ AUDIO_OGG ] = 'audio/ogg'
|
|
|
|
mime_string_lookup[ AUDIO_FLAC ] = 'audio/flac'
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_string_lookup[ AUDIO_WMA ] = 'audio/x-ms-wma'
|
2013-07-24 20:26:00 +00:00
|
|
|
mime_string_lookup[ AUDIO ] = 'audio'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_string_lookup[ TEXT_HTML ] = 'text/html'
|
|
|
|
mime_string_lookup[ VIDEO_FLV ] = 'video/x-flv'
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_string_lookup[ VIDEO_MP4 ] = 'video/mp4'
|
|
|
|
mime_string_lookup[ VIDEO_WMV ] = 'video/x-ms-wmv'
|
2014-04-30 21:31:40 +00:00
|
|
|
mime_string_lookup[ VIDEO_MKV ] = 'video/x-matroska'
|
|
|
|
mime_string_lookup[ VIDEO_WEBM ] = 'video/webm'
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_string_lookup[ VIDEO ] = 'video'
|
|
|
|
mime_string_lookup[ UNDETERMINED_WM ] = 'audio/x-ms-wma or video/x-ms-wmv'
|
2013-02-19 00:11:43 +00:00
|
|
|
mime_string_lookup[ APPLICATION_UNKNOWN ] = 'unknown mime'
|
|
|
|
|
|
|
|
mime_ext_lookup = {}
|
|
|
|
|
|
|
|
mime_ext_lookup[ APPLICATION_HYDRUS_CLIENT_COLLECTION ] = '.collection'
|
|
|
|
mime_ext_lookup[ IMAGE_JPEG ] = '.jpg'
|
|
|
|
mime_ext_lookup[ IMAGE_PNG ] = '.png'
|
|
|
|
mime_ext_lookup[ IMAGE_GIF ] = '.gif'
|
|
|
|
mime_ext_lookup[ IMAGE_BMP ] = '.bmp'
|
|
|
|
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'
|
2013-05-01 17:21:53 +00:00
|
|
|
mime_ext_lookup[ APPLICATION_ZIP ] = '.zip'
|
|
|
|
mime_ext_lookup[ APPLICATION_HYDRUS_ENCRYPTED_ZIP ] = '.zip.encrypted'
|
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'
|
|
|
|
mime_ext_lookup[ AUDIO_FLAC ] = '.flac'
|
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'
|
|
|
|
mime_ext_lookup[ VIDEO_FLV ] = '.flv'
|
2013-08-14 20:21:49 +00:00
|
|
|
mime_ext_lookup[ VIDEO_MP4 ] = '.mp4'
|
|
|
|
mime_ext_lookup[ VIDEO_WMV ] = '.wmv'
|
2014-04-30 21:31:40 +00:00
|
|
|
mime_ext_lookup[ VIDEO_MKV ] = '.mkv'
|
|
|
|
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
|
|
|
|
|
|
|
|
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_HASH, PREDICATE_TYPE_SYSTEM_WIDTH, PREDICATE_TYPE_SYSTEM_HEIGHT, PREDICATE_TYPE_SYSTEM_RATIO, PREDICATE_TYPE_SYSTEM_DURATION, 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 ]
|
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
|
2013-04-10 18:10:37 +00:00
|
|
|
|
2014-09-03 20:26:49 +00:00
|
|
|
site_type_string_lookup = {}
|
|
|
|
|
|
|
|
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'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_NEWGROUNDS ] = 'newgrounds'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_PIXIV ] = 'pixiv'
|
|
|
|
site_type_string_lookup[ SITE_TYPE_TUMBLR ] = 'tumblr'
|
|
|
|
|
2013-02-19 00:11:43 +00:00
|
|
|
# request checking
|
|
|
|
|
|
|
|
BANDWIDTH_CONSUMING_REQUESTS = set()
|
|
|
|
|
2015-06-17 20:01:41 +00:00
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( LOCAL_BOORU, GET, 'gallery' ) )
|
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( LOCAL_BOORU, GET, 'page' ) )
|
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( LOCAL_BOORU, GET, 'file' ) )
|
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( LOCAL_BOORU, GET, 'thumbnail' ) )
|
2015-06-03 21:05:13 +00:00
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( TAG_REPOSITORY, GET, 'content_update_package' ) )
|
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( TAG_REPOSITORY, GET, 'service_update_package' ) )
|
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( TAG_REPOSITORY, POST, 'content_update_package' ) )
|
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( FILE_REPOSITORY, GET, 'content_update_package' ) )
|
2013-02-19 00:11:43 +00:00
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( FILE_REPOSITORY, GET, 'file' ) )
|
2015-06-03 21:05:13 +00:00
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( FILE_REPOSITORY, GET, 'service_update_package' ) )
|
2013-02-19 00:11:43 +00:00
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( FILE_REPOSITORY, GET, 'thumbnail' ) )
|
2015-06-03 21:05:13 +00:00
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( FILE_REPOSITORY, POST, 'content_update_package' ) )
|
2013-02-19 00:11:43 +00:00
|
|
|
BANDWIDTH_CONSUMING_REQUESTS.add( ( FILE_REPOSITORY, POST, 'file' ) )
|
|
|
|
|
|
|
|
# default options
|
|
|
|
|
|
|
|
DEFAULT_LOCAL_FILE_PORT = 45865
|
2014-07-16 20:50:18 +00:00
|
|
|
DEFAULT_LOCAL_BOORU_PORT = 45866
|
2013-02-19 00:11:43 +00:00
|
|
|
DEFAULT_SERVER_ADMIN_PORT = 45870
|
|
|
|
DEFAULT_SERVICE_PORT = 45871
|
|
|
|
|
|
|
|
DEFAULT_OPTIONS = {}
|
|
|
|
|
|
|
|
DEFAULT_OPTIONS[ SERVER_ADMIN ] = {}
|
|
|
|
DEFAULT_OPTIONS[ SERVER_ADMIN ][ 'max_monthly_data' ] = None
|
|
|
|
DEFAULT_OPTIONS[ SERVER_ADMIN ][ 'max_storage' ] = None
|
|
|
|
DEFAULT_OPTIONS[ SERVER_ADMIN ][ 'message' ] = 'hydrus server administration service'
|
2013-11-06 18:22:07 +00:00
|
|
|
DEFAULT_OPTIONS[ SERVER_ADMIN ][ 'upnp' ] = None
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
DEFAULT_OPTIONS[ FILE_REPOSITORY ] = {}
|
|
|
|
DEFAULT_OPTIONS[ FILE_REPOSITORY ][ 'max_monthly_data' ] = None
|
|
|
|
DEFAULT_OPTIONS[ FILE_REPOSITORY ][ 'max_storage' ] = None
|
|
|
|
DEFAULT_OPTIONS[ FILE_REPOSITORY ][ 'log_uploader_ips' ] = False
|
|
|
|
DEFAULT_OPTIONS[ FILE_REPOSITORY ][ 'message' ] = 'hydrus file repository'
|
2013-11-06 18:22:07 +00:00
|
|
|
DEFAULT_OPTIONS[ FILE_REPOSITORY ][ 'upnp' ] = None
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
DEFAULT_OPTIONS[ TAG_REPOSITORY ] = {}
|
|
|
|
DEFAULT_OPTIONS[ TAG_REPOSITORY ][ 'max_monthly_data' ] = None
|
|
|
|
DEFAULT_OPTIONS[ TAG_REPOSITORY ][ 'message' ] = 'hydrus tag repository'
|
2013-11-06 18:22:07 +00:00
|
|
|
DEFAULT_OPTIONS[ TAG_REPOSITORY ][ 'upnp' ] = None
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
DEFAULT_OPTIONS[ MESSAGE_DEPOT ] = {}
|
|
|
|
DEFAULT_OPTIONS[ MESSAGE_DEPOT ][ 'max_monthly_data' ] = None
|
|
|
|
DEFAULT_OPTIONS[ MESSAGE_DEPOT ][ 'max_storage' ] = None
|
|
|
|
DEFAULT_OPTIONS[ MESSAGE_DEPOT ][ 'message' ] = 'hydrus message depot'
|
2013-11-06 18:22:07 +00:00
|
|
|
DEFAULT_OPTIONS[ MESSAGE_DEPOT ][ 'upnp' ] = None
|
2013-02-19 00:11:43 +00:00
|
|
|
|
|
|
|
# Hydrus pubsub
|
|
|
|
|
2014-08-13 22:18:12 +00:00
|
|
|
SERVER_ADMIN_KEY = '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 ) )
|
|
|
|
def represent_python_tuple( self, data ): return self.represent_sequence( u'tag:yaml.org,2002:python/tuple', data )
|
|
|
|
|
|
|
|
yaml.SafeLoader.add_constructor( u'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( 'BLOB_BYTES', str )
|
|
|
|
sqlite3.register_converter( 'INTEGER_BOOLEAN', integer_boolean_to_bool )
|
2014-02-12 23:09:38 +00:00
|
|
|
sqlite3.register_converter( 'TEXT_YAML', yaml.safe_load )
|