import re
from unicodedata import normalize
SCHEMA_SERVER = {
'oneOf': [
{
'type': 'object',
'properties': {
'host': {'type': 'string', 'default': 'http://localhost:8096'},
'username': {'type': 'string'},
'password': {'type': 'string'},
'return_host': {'type': 'string', 'enum': ['lan', 'wan']},
},
'required': ['username', 'password'],
'additionalProperties': False,
},
{
'type': 'object',
'properties': {
'host': {'type': 'string', 'default': 'http://localhost:8096'},
'username': {'type': 'string'},
'apikey': {'type': 'string'},
'return_host': {'type': 'string', 'enum': ['lan', 'wan']},
},
'required': ['username', 'apikey'],
'additionalProperties': False,
},
]
}
SCHEMA_SERVER_TAG = {'server': {**SCHEMA_SERVER}}
SORT_FIELDS = [
'community_rating',
'critic_rating',
'date_created',
'date_played',
'play_count',
'premiere_date',
'production_year',
'sort_name',
'random',
'revenue',
'runtime',
]
field_map = {
'media': {
'emby_id': 'id',
'emby_name': 'name',
'emby_fullname': 'fullname',
'emby_type': 'mtype',
'emby_created_date': 'created_date',
'emby_path': 'path',
'emby_filename': 'filename',
'emby_file_extension': 'file_extension',
'emby_watched': 'watched',
'emby_favorite': 'favorite',
'emby_playcount': 'playcount',
'emby_media_sources_raw': 'media_sources_raw',
'emby_format_3d': 'format_3d',
'emby_audio': 'audio',
'emby_quality': 'quality',
'emby_subtitles': 'subtitles',
'imdb_url': 'imdb_url',
'emby_download_url': 'download_url',
'emby_library_name': 'library_name',
'emby_page': 'page',
},
'series': {
'emby_series_year': 'series_year',
'emby_series_aired_date': 'series_aired_date',
'emby_series_id': 'series_id',
'emby_series_name': 'series_name',
'emby_series_photo': 'series_photo',
'emby_series_imdb_id': 'series_imdb_id',
'emby_series_tvdb_id': 'series_tvdb_id',
'emby_series_overview': 'series_overview',
'emby_series_page': 'series_page',
'imdb_id': 'series_imdb_id',
'tvdb_id': 'series_tvdb_id',
},
'season': {
'emby_season': 'season',
'emby_season_name': 'season_name',
'emby_season_id': 'season_id',
'emby_season_page': 'season_page',
'emby_season_photo': 'season_photo',
'emby_season_imdb_id': 'season_imdb_id',
'emby_season_tmdb_id': 'season_tmdb_id',
'emby_season_tvdb_id': 'season_tvdb_id',
},
'episode': {
'emby_episode': 'episode',
'emby_ep_name': 'ep_name',
'emby_ep_page': 'ep_page',
'emby_ep_id': 'ep_id',
'emby_ep_photo': 'ep_photo',
'emby_ep_imdb_id': 'ep_imdb_id',
'emby_ep_tmdb_id': 'ep_tmdb_id',
'emby_ep_tvdb_id': 'ep_tvdb_id',
'emby_ep_aired_date': 'ep_aired_date',
'emby_ep_overview': 'ep_overview',
},
'movie': {
'movie_name': 'movie_name',
'movie_year': 'movie_year',
'emby_movie_name': 'movie_name',
'emby_movie_id': 'movie_id',
'emby_movie_imdb_id': 'movie_imdb_id',
'emby_movie_tmdb_id': 'movie_tmdb_id',
'emby_movie_year': 'movie_year',
'emby_movie_aired_date': 'movie_aired_date',
'emby_movie_photo': 'movie_photo',
'emby_movie_page': 'movie_page',
'emby_movie_overview': 'movie_overview',
'imdb_id': 'movie_imdb_id',
'tmdb_id': 'movie_tmdb_id',
},
}
[docs]
def simplify_text(text: str) -> str:
"""Simplify text."""
if not isinstance(text, str):
return text
# Replace accented chars by their 'normal' counterparts
result = normalize('NFKD', text)
# Symbols that should be converted to white space
result = re.sub(r'[ \(\)\-_\[\]\.]+', ' ', result)
# Leftovers
result = re.sub(r'[^a-zA-Z0-9 ]', '', result)
# Replace multiple white spaces with one
result = ' '.join(result.split())
return None
[docs]
def get_field_map(**kwargs):
lazy_fields = field_map['media']
media_type = kwargs.get('media_type')
if not media_type:
media_type = kwargs.get('emby_type', '')
media_type = media_type.lower()
if media_type in field_map:
lazy_fields = {**lazy_fields, **field_map[media_type]}
else:
lazy_fields = {**lazy_fields, **field_map['movie']}
if media_type == 'episode':
lazy_fields = {**lazy_fields, **field_map['series'], **field_map['season']}
elif media_type == 'season':
lazy_fields = {**lazy_fields, **field_map['series']}
return lazy_fields