Merge branch 'AutoImprint' into develop
This commit is contained in:
commit
bd69aecd97
130
comicapi/data/publishers.json
Normal file
130
comicapi/data/publishers.json
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
{
|
||||||
|
"Marvel":{
|
||||||
|
"marvel comics": "",
|
||||||
|
"aircel comics": "Aircel Comics",
|
||||||
|
"aircel": "Aircel Comics",
|
||||||
|
"atlas comics": "Atlas Comics",
|
||||||
|
"atlas": "Atlas Comics",
|
||||||
|
"crossgen comics": "CrossGen comics",
|
||||||
|
"crossgen": "CrossGen comics",
|
||||||
|
"curtis magazines": "Curtis Magazines",
|
||||||
|
"disney books group": "Disney Books Group",
|
||||||
|
"disney books": "Disney Books Group",
|
||||||
|
"disney kingdoms": "Disney Kingdoms",
|
||||||
|
"epic comics group": "Epic Comics",
|
||||||
|
"epic comics": "Epic Comics",
|
||||||
|
"epic": "Epic Comics",
|
||||||
|
"eternity comics": "Eternity Comics",
|
||||||
|
"humorama": "Humorama",
|
||||||
|
"icon comics": "Icon Comics",
|
||||||
|
"infinite comics": "Infinite Comics",
|
||||||
|
"malibu comics": "Malibu Comics",
|
||||||
|
"malibu": "Malibu Comics",
|
||||||
|
"marvel 2099": "Marvel 2099",
|
||||||
|
"marvel absurd": "Marvel Absurd",
|
||||||
|
"marvel adventures": "Marvel Adventures",
|
||||||
|
"marvel age": "Marvel Age",
|
||||||
|
"marvel books": "Marvel Books",
|
||||||
|
"marvel comics 2": "Marvel Comics 2",
|
||||||
|
"marvel digital comics unlimited": "Marvel Unlimited",
|
||||||
|
"marvel edge": "Marvel Edge",
|
||||||
|
"marvel frontier": "Marvel Frontier",
|
||||||
|
"marvel illustrated": "Marvel Illustrated",
|
||||||
|
"marvel knights": "Marvel Knights",
|
||||||
|
"marvel magazine group": "Marvel Magazine Group",
|
||||||
|
"marvel mangaverse": "Marvel Mangaverse",
|
||||||
|
"marvel monsters group": "Marvel Monsters Group",
|
||||||
|
"marvel music": "Marvel Music",
|
||||||
|
"marvel next": "Marvel Next",
|
||||||
|
"marvel noir": "Marvel Noir",
|
||||||
|
"marvel press": "Marvel Press",
|
||||||
|
"marvel uk": "Marvel UK",
|
||||||
|
"marvel unlimited": "Marvel Unlimited",
|
||||||
|
"max": "MAX",
|
||||||
|
"mc2": "Marvel Comics 2",
|
||||||
|
"new universe": "New Universe",
|
||||||
|
"non-pareil publishing corp.": "Non-Pareil Publishing Corp.",
|
||||||
|
"paramount comics": "Paramount Comics",
|
||||||
|
"power comics": "Power Comics",
|
||||||
|
"razorline": "Razorline",
|
||||||
|
"star comics": "Star Comics",
|
||||||
|
"timely comics": "Timely Comics",
|
||||||
|
"timely": "Timely Comics",
|
||||||
|
"tsunami": "Tsunami",
|
||||||
|
"ultimate comics": "Ultimate Comics",
|
||||||
|
"ultimate marvel": "Ultimate Marvel",
|
||||||
|
"vital publications, inc.": "Vital Publications, Inc."
|
||||||
|
},
|
||||||
|
|
||||||
|
"DC Comics":{
|
||||||
|
"dc_comics": "",
|
||||||
|
"dc": "",
|
||||||
|
"dccomics": "",
|
||||||
|
"!mpact comics": "Impact Comics",
|
||||||
|
"all star dc": "All-Star",
|
||||||
|
"all star": "All-Star",
|
||||||
|
"all-star dc": "All-Star",
|
||||||
|
"all-star": "All-Star",
|
||||||
|
"america's best comics": "America's Best Comics",
|
||||||
|
"black label": "DC Black Label",
|
||||||
|
"cliffhanger": "Cliffhanger",
|
||||||
|
"cmx manga": "CMX Manga",
|
||||||
|
"dc black label": "DC Black Label",
|
||||||
|
"dc focus": "DC Focus",
|
||||||
|
"dc ink": "DC Ink",
|
||||||
|
"dc zoom": "DC Zoom",
|
||||||
|
"earth m": "Earth M",
|
||||||
|
"earth one": "Earth One",
|
||||||
|
"earth-m": "Earth M",
|
||||||
|
"elseworlds": "Elseworlds",
|
||||||
|
"eo": "Earth One",
|
||||||
|
"first wave": "First Wave",
|
||||||
|
"focus": "DC Focus",
|
||||||
|
"helix": "Helix",
|
||||||
|
"homage comics": "Homage Comics",
|
||||||
|
"impact comics": "Impact Comics",
|
||||||
|
"impact! comics": "Impact Comics",
|
||||||
|
"johnny dc": "Johnny DC",
|
||||||
|
"mad": "Mad",
|
||||||
|
"minx": "Minx",
|
||||||
|
"paradox press": "Paradox Press",
|
||||||
|
"piranha press": "Piranha Press",
|
||||||
|
"sandman universe": "Sandman Universe",
|
||||||
|
"tangent comics": "Tangent Comics",
|
||||||
|
"tsr": "TSR",
|
||||||
|
"vertigo": "Vertigo",
|
||||||
|
"wildstorm productions": "WildStorm Productions",
|
||||||
|
"wildstorm signature": "WildStorm Productions",
|
||||||
|
"wildstorm": "WildStorm Productions",
|
||||||
|
"wonder comics": "Wonder Comics",
|
||||||
|
"young animal": "Young Animal",
|
||||||
|
"zuda comics": "Zuda Comics",
|
||||||
|
"zuda": "Zuda Comics"
|
||||||
|
},
|
||||||
|
|
||||||
|
"Dark Horse Comics":{
|
||||||
|
"berger books": "Berger Books",
|
||||||
|
"comics' greatest world": "Dark Horse Heroes",
|
||||||
|
"dark horse digital": "Dark Horse Digital",
|
||||||
|
"dark horse heroes": "Dark Horse Heroes",
|
||||||
|
"dark horse manga": "Dark Horse Manga",
|
||||||
|
"dh deluxe": "DH Deluxe",
|
||||||
|
"dh press": "DH Press",
|
||||||
|
"kitchen sink books": "Kitchen Sink Books",
|
||||||
|
"legend": "Legend",
|
||||||
|
"m press": "M Press",
|
||||||
|
"maverick": "Maverick"
|
||||||
|
},
|
||||||
|
|
||||||
|
"Archie Comics":{
|
||||||
|
"archie action": "Archie Action",
|
||||||
|
"archie adventure Series": "Archie Adventure Series",
|
||||||
|
"archie horror": "Archie Horror",
|
||||||
|
"dark circle Comics": "Dark Circle Comics",
|
||||||
|
"dark circle": "Dark Circle Comics",
|
||||||
|
"mighty comics Group": "Mighty Comics Group",
|
||||||
|
"radio comics": "Mighty Comics Group",
|
||||||
|
"red circle Comics": "Dark Circle Comics",
|
||||||
|
"red circle": "Dark Circle Comics"
|
||||||
|
}
|
||||||
|
}
|
@ -339,6 +339,24 @@ class GenericMetadata:
|
|||||||
|
|
||||||
return outstr
|
return outstr
|
||||||
|
|
||||||
|
def fix_publisher(self) -> None:
|
||||||
|
if self.publisher is None:
|
||||||
|
return
|
||||||
|
if self.imprint is None:
|
||||||
|
self.imprint = ""
|
||||||
|
|
||||||
|
imprint, publisher = utils.get_publisher(self.publisher)
|
||||||
|
|
||||||
|
self.publisher = publisher
|
||||||
|
|
||||||
|
if self.imprint.lower() in publisher.lower():
|
||||||
|
self.imprint = None
|
||||||
|
|
||||||
|
if self.imprint is None or self.imprint == "":
|
||||||
|
self.imprint = imprint
|
||||||
|
elif self.imprint.lower() in imprint.lower():
|
||||||
|
self.imprint = imprint
|
||||||
|
|
||||||
|
|
||||||
md_test = GenericMetadata()
|
md_test = GenericMetadata()
|
||||||
|
|
||||||
|
@ -14,9 +14,11 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import json
|
||||||
import locale
|
import locale
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import pathlib
|
||||||
import platform
|
import platform
|
||||||
import re
|
import re
|
||||||
import unicodedata
|
import unicodedata
|
||||||
@ -221,3 +223,56 @@ def get_language(string: Optional[str]) -> Optional[str]:
|
|||||||
except:
|
except:
|
||||||
return None
|
return None
|
||||||
return lang
|
return lang
|
||||||
|
|
||||||
|
|
||||||
|
def get_publisher(publisher: str) -> tuple[str, str]:
|
||||||
|
if publisher is None:
|
||||||
|
return ("", "")
|
||||||
|
imprint = ""
|
||||||
|
|
||||||
|
for pub in publishers.values():
|
||||||
|
imprint, publisher, ok = pub[publisher]
|
||||||
|
if ok:
|
||||||
|
break
|
||||||
|
|
||||||
|
return (imprint, publisher)
|
||||||
|
|
||||||
|
|
||||||
|
def update_publishers(new_publishers: dict[str, dict[str, str]]) -> None:
|
||||||
|
for publisher in new_publishers:
|
||||||
|
if publisher in publishers:
|
||||||
|
publishers[publisher].update(new_publishers[publisher])
|
||||||
|
else:
|
||||||
|
publishers[publisher] = ImprintDict(publisher, new_publishers[publisher])
|
||||||
|
|
||||||
|
|
||||||
|
class ImprintDict(dict):
|
||||||
|
"""
|
||||||
|
ImprintDict takes a publisher and a dict or mapping of lowercased
|
||||||
|
imprint names to the proper imprint name. Retreiving a value from an
|
||||||
|
ImprintDict returns a tuple of (imprint, publisher, keyExists).
|
||||||
|
if the key does not exist the key is returned as the publisher unchanged
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, publisher, mapping=(), **kwargs):
|
||||||
|
super().__init__(mapping, **kwargs)
|
||||||
|
self.publisher = publisher
|
||||||
|
|
||||||
|
def __missing__(self, key: str) -> None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def __getitem__(self, k: str) -> tuple[str, str, bool]:
|
||||||
|
item = super().__getitem__(k.casefold())
|
||||||
|
if k.casefold() == self.publisher.casefold():
|
||||||
|
return ("", self.publisher, True)
|
||||||
|
if item is None:
|
||||||
|
return ("", k, False)
|
||||||
|
else:
|
||||||
|
return (item, self.publisher, True)
|
||||||
|
|
||||||
|
|
||||||
|
publishers: dict[str, ImprintDict] = {}
|
||||||
|
|
||||||
|
|
||||||
|
def load_publishers() -> None:
|
||||||
|
update_publishers(json.loads((pathlib.Path(__file__).parent / "data" / "publishers.json").read_text("utf-8")))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user