Move alpha beta converter tags to resource file

This commit is contained in:
Joakim Soderlund 2017-11-18 23:38:15 +01:00
parent 307b96d3f1
commit f7f6f43886
3 changed files with 182 additions and 139 deletions

View file

@ -22,6 +22,7 @@ Alpha to beta converter for story meta.
# #
import json
from copy import deepcopy from copy import deepcopy
from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple
from urllib.parse import quote_plus as urlquote from urllib.parse import quote_plus as urlquote
@ -33,8 +34,9 @@ from jmespath.parser import ParsedResult
from fimfarchive.flavors import MetaFormat from fimfarchive.flavors import MetaFormat
from fimfarchive.stories import Story from fimfarchive.stories import Story
from fimfarchive.utils import ResourceLoader
from .base import Converter from ..base import Converter
__all__ = ( __all__ = (
@ -42,147 +44,14 @@ __all__ = (
) )
load = ResourceLoader(__package__)
HOST = 'https://www.fimfiction.net' HOST = 'https://www.fimfiction.net'
TAGS = json.loads(load('tags.json'))
EPOCH = arrow.get(0).isoformat() EPOCH = arrow.get(0).isoformat()
TAGS = {
'2nd Person': {
'id': 225,
'name': 'Second Person',
'old_id': 'g:second_person',
'type': 'content',
'url': 'https://www.fimfiction.net/tag/second-person',
},
'Adventure': {
'id': 226,
'name': 'Adventure',
'old_id': 'g:adventure',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/adventure',
},
'Alternate Universe': {
'id': 240,
'name': 'Alternate Universe',
'old_id': 'g:alternate_universe',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/alternate-universe',
},
'Anthro': {
'id': 227,
'name': 'Anthro',
'old_id': 'g:anthro',
'type': 'content',
'url': 'https://www.fimfiction.net/tag/anthro',
},
'Comedy': {
'id': 228,
'name': 'Comedy',
'old_id': 'g:comedy',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/comedy',
},
'Crossover': {
'id': 229,
'name': 'Crossover',
'old_id': 'g:crossover',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/crossover',
},
'Dark': {
'id': 122,
'name': 'Dark',
'old_id': 'g:dark',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/dark',
},
'Drama': {
'id': 230,
'name': 'Drama',
'old_id': 'g:drama',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/drama',
},
'Equestria Girls': {
'id': 123,
'name': 'Equestria Girls',
'old_id': 'g:equestria_girls',
'type': 'series',
'url': 'https://www.fimfiction.net/tag/equestria-girls',
},
'Horror': {
'id': 231,
'name': 'Horror',
'old_id': 'g:horror',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/horror',
},
'Human': {
'id': 232,
'name': 'Human',
'old_id': 'g:human',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/human',
},
'Mystery': {
'id': 233,
'name': 'Mystery',
'old_id': 'g:mystery',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/mystery',
},
'Random': {
'id': 234,
'name': 'Random',
'old_id': 'g:random',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/random',
},
'Romance': {
'id': 120,
'name': 'Romance',
'old_id': 'g:romance',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/romance',
},
'Sad': {
'id': 235,
'name': 'Sad',
'old_id': 'g:sad',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/sad',
},
'Sci-Fi': {
'id': 236,
'name': 'Science Fiction',
'old_id': 'g:scifi',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/scifi',
},
'Slice of Life': {
'id': 237,
'name': 'Slice of Life',
'old_id': 'g:slice_of_life',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/slice-of-life',
},
'Thriller': {
'id': 238,
'name': 'Thriller',
'old_id': 'g:thriller',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/thriller',
},
'Tragedy': {
'id': 239,
'name': 'Tragedy',
'old_id': 'g:tragedy',
'type': 'genre',
'url': 'https://www.fimfiction.net/tag/tragedy',
},
}
class Handler(Iterable[Tuple[str, Any]]): class Handler(Iterable[Tuple[str, Any]]):
""" """
Maps story meta to another style. Maps story meta to another style.

View file

@ -0,0 +1,135 @@
{
"2nd Person": {
"id": 225,
"name": "Second Person",
"old_id": "g:second_person",
"type": "content",
"url": "https://www.fimfiction.net/tag/second-person"
},
"Adventure": {
"id": 226,
"name": "Adventure",
"old_id": "g:adventure",
"type": "genre",
"url": "https://www.fimfiction.net/tag/adventure"
},
"Alternate Universe": {
"id": 240,
"name": "Alternate Universe",
"old_id": "g:alternate_universe",
"type": "genre",
"url": "https://www.fimfiction.net/tag/alternate-universe"
},
"Anthro": {
"id": 227,
"name": "Anthro",
"old_id": "g:anthro",
"type": "content",
"url": "https://www.fimfiction.net/tag/anthro"
},
"Comedy": {
"id": 228,
"name": "Comedy",
"old_id": "g:comedy",
"type": "genre",
"url": "https://www.fimfiction.net/tag/comedy"
},
"Crossover": {
"id": 229,
"name": "Crossover",
"old_id": "g:crossover",
"type": "genre",
"url": "https://www.fimfiction.net/tag/crossover"
},
"Dark": {
"id": 122,
"name": "Dark",
"old_id": "g:dark",
"type": "genre",
"url": "https://www.fimfiction.net/tag/dark"
},
"Drama": {
"id": 230,
"name": "Drama",
"old_id": "g:drama",
"type": "genre",
"url": "https://www.fimfiction.net/tag/drama"
},
"Equestria Girls": {
"id": 123,
"name": "Equestria Girls",
"old_id": "g:equestria_girls",
"type": "series",
"url": "https://www.fimfiction.net/tag/equestria-girls"
},
"Horror": {
"id": 231,
"name": "Horror",
"old_id": "g:horror",
"type": "genre",
"url": "https://www.fimfiction.net/tag/horror"
},
"Human": {
"id": 232,
"name": "Human",
"old_id": "g:human",
"type": "genre",
"url": "https://www.fimfiction.net/tag/human"
},
"Mystery": {
"id": 233,
"name": "Mystery",
"old_id": "g:mystery",
"type": "genre",
"url": "https://www.fimfiction.net/tag/mystery"
},
"Random": {
"id": 234,
"name": "Random",
"old_id": "g:random",
"type": "genre",
"url": "https://www.fimfiction.net/tag/random"
},
"Romance": {
"id": 120,
"name": "Romance",
"old_id": "g:romance",
"type": "genre",
"url": "https://www.fimfiction.net/tag/romance"
},
"Sad": {
"id": 235,
"name": "Sad",
"old_id": "g:sad",
"type": "genre",
"url": "https://www.fimfiction.net/tag/sad"
},
"Sci-Fi": {
"id": 236,
"name": "Science Fiction",
"old_id": "g:scifi",
"type": "genre",
"url": "https://www.fimfiction.net/tag/scifi"
},
"Slice of Life": {
"id": 237,
"name": "Slice of Life",
"old_id": "g:slice_of_life",
"type": "genre",
"url": "https://www.fimfiction.net/tag/slice-of-life"
},
"Thriller": {
"id": 238,
"name": "Thriller",
"old_id": "g:thriller",
"type": "genre",
"url": "https://www.fimfiction.net/tag/thriller"
},
"Tragedy": {
"id": 239,
"name": "Tragedy",
"old_id": "g:tragedy",
"type": "genre",
"url": "https://www.fimfiction.net/tag/tragedy"
}
}

View file

@ -25,7 +25,8 @@ Various utilities.
import json import json
import os import os
import shutil import shutil
from typing import Any, Dict, Optional, Type, TypeVar from typing import Any, Dict, Optional, Type, TypeVar, Union
from pkg_resources import resource_string
from fimfarchive.flavors import Flavor from fimfarchive.flavors import Flavor
from fimfarchive.stories import Story from fimfarchive.stories import Story
@ -126,3 +127,41 @@ def find_flavor(story: Story, flavor: Type[F]) -> Optional[F]:
return current return current
return None return None
class ResourceLoader:
"""
Loads resources from a package.
"""
def __init__(self, package: str, binary: bool = False) -> None:
"""
Constructor.
Args:
package: The package to load from.
binary: Set to return binary data.
"""
self.package = package
self.binary = binary
def __call__(self, name: str, binary: bool = None) -> Union[str, bytes]:
"""
Loads a package resource.
Args:
name: The name of the resource to load.
binary: Set to return binary data.
Returns:
A resource as string or bytes.
"""
if binary is None:
binary = self.binary
data = resource_string(self.package, name)
if binary:
return data
else:
return data.decode()