summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Luevano Alvarado <david@luevano.xyz>2022-04-18 22:39:11 -0600
committerDavid Luevano Alvarado <david@luevano.xyz>2022-04-18 22:39:11 -0600
commit9bfb9dd2e8fa187a36c4ef98a491b9c2944bbd11 (patch)
tree80dbee9bbf9e1c3c2c194c9a0a57275196f9ff6a
parente8ce49590ed5a73f72e45c8ae2e021ddcf3dbf12 (diff)
add meaningful error messages when missing mandatory metadatav0.6.1
-rw-r--r--README.md2
-rw-r--r--src/pyssg/page.py20
2 files changed, 16 insertions, 6 deletions
diff --git a/README.md b/README.md
index 722ada4..8a56246 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ Inspired (initially) by Roman Zolotarev's [`ssg5`](https://rgz.ee/bin/ssg5) and
- [x] Use [`configparser`](https://docs.python.org/3/library/configparser.html) instead of custom config handler.
- [ ] Migrate to YAML instead of INI, as it is way more flexible.
- [x] Avoid the program to freak out when there are directories created in advance.
-- [ ] Provide more meaningful error messages when you are missing mandatory tags in your `.md` files.
+- [x] Provide more meaningful error messages when you are missing mandatory metadata in your `*.md` files.
- [ ] More complex directory structure to support multiple subdomains and different types of pages.
- [ ] Add option/change to using an SQL database instead of the custom solution.
diff --git a/src/pyssg/page.py b/src/pyssg/page.py
index dd3881c..82a0431 100644
--- a/src/pyssg/page.py
+++ b/src/pyssg/page.py
@@ -1,3 +1,4 @@
+import os
import sys
from datetime import datetime, timezone
import logging
@@ -61,15 +62,24 @@ class Page:
return self.ctimestamp < other.ctimestamp
+ def __get_mandatory_meta(self, meta: str) -> str:
+ try:
+ log.debug('parsing required metadata "%s"', meta)
+ return self.meta[meta][0]
+ except KeyError:
+ log.error('failed to parse mandatory metadata "%s" from file "%s"',
+ meta, os.path.join(self.config.get('path', 'src'), self.name))
+ sys.exit(1)
+
+
# parses meta from self.meta, for og, it prioritizes,
# the actual og meta
def parse_metadata(self):
log.debug('parsing metadata for file "%s"', self.name)
- log.debug('parsing required metadata')
- self.title = self.meta['title'][0]
- self.author = self.meta['author'][0]
- self.summary = self.meta['summary'][0]
- self.lang = self.meta['lang'][0]
+ self.title = self.__get_mandatory_meta('title')
+ self.author = self.__get_mandatory_meta('author')
+ self.summary = self.__get_mandatory_meta('summary')
+ self.lang = self.__get_mandatory_meta('lang')
log.debug('parsing timestamp')
self.cdatetime = datetime.fromtimestamp(self.ctimestamp,