summaryrefslogtreecommitdiffstatshomepage
path: root/docs/_examples
diff options
context:
space:
mode:
Diffstat (limited to 'docs/_examples')
-rw-r--r--docs/_examples/example_scraper.json8
-rw-r--r--docs/_examples/example_scraper.py37
-rw-r--r--docs/_examples/example_transformer.py21
3 files changed, 66 insertions, 0 deletions
diff --git a/docs/_examples/example_scraper.json b/docs/_examples/example_scraper.json
new file mode 100644
index 0000000..9efe126
--- /dev/null
+++ b/docs/_examples/example_scraper.json
@@ -0,0 +1,8 @@
+{
+ "title": "This is a Title",
+ "tags": {
+ "artists": ["Alan Smithee", "Noah Ward"],
+ "characters": ["A", "B", "C"],
+ "misc": ["horror", "sci-fi"]
+ }
+}
diff --git a/docs/_examples/example_scraper.py b/docs/_examples/example_scraper.py
new file mode 100644
index 0000000..d00c292
--- /dev/null
+++ b/docs/_examples/example_scraper.py
@@ -0,0 +1,37 @@
+import json
+
+from hircine.scraper import Scraper
+from hircine.scraper.types import Artist, Character, Tag, Title
+from hircine.scraper.utils import open_archive_file, parse_dict
+
+
+class MyScraper(Scraper):
+ name = "Example scraper"
+ source = "example"
+
+ def __init__(self, comic):
+ super().__init__(comic)
+
+ self.data = self.load()
+
+ if self.data:
+ self.is_available = True
+
+ def load(self):
+ try:
+ with open_archive_file(self.comic.archive, "metadata.json") as jif:
+ return json.load(jif)
+ except Exception:
+ return {}
+
+ def scrape(self):
+ parsers = {
+ "title": Title,
+ "tags": {
+ "artists": Artist,
+ "misc": Tag.from_string,
+ "characters": Character,
+ },
+ }
+
+ yield from parse_dict(parsers, self.data)
diff --git a/docs/_examples/example_transformer.py b/docs/_examples/example_transformer.py
new file mode 100644
index 0000000..6e443ae
--- /dev/null
+++ b/docs/_examples/example_transformer.py
@@ -0,0 +1,21 @@
+from hircine.plugins import transformer
+from hircine.scraper.types import Artist, Tag
+
+
+@transformer
+def transform(generator, info):
+ for item in generator:
+ # Ignore the "Drama" tag when scraping from mangadex
+ if info.source == "mangadex":
+ match item:
+ case Tag(tag="Drama"):
+ continue
+
+ # convert all Artist names to lowercase
+ match item:
+ case Artist(name):
+ yield Artist(name.lower())
+ continue
+
+ # other items are not modified
+ yield item