Skip to content

Commit

Permalink
Add a check-metadata command (#36)
Browse files Browse the repository at this point in the history
* add a check-metadata command

* add check-metadata in doc

---------

Co-authored-by: Clément <[email protected]>
  • Loading branch information
ClmntBcqt and Clément authored Jul 24, 2024
1 parent 1042e9d commit d262481
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 1 deletion.
1 change: 1 addition & 0 deletions content/pages/a_page.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
title Page1
slug page1
template_engine jinja2
description
---
{

Expand Down
63 changes: 63 additions & 0 deletions jssg/management/commands/check-metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
from django.core.management.base import BaseCommand
from django.conf import settings
from jssg.models import Page
from pathlib import Path

class MetadataStatus :

@classmethod
def get_metadata_status_for(cls, page) :
metadata_status = MetadataStatus()
metadata_status.missing = []
metadata_status.empty = []
for required_metadata in settings.JFME_CONTENT_REQUIRED_METADATA :
if required_metadata not in page.metadata :
metadata_status.missing.append(required_metadata)
elif page.metadata[required_metadata] == "" :
metadata_status.empty.append(required_metadata)
metadata_status.complete = (metadata_status.missing == []) and (metadata_status.empty == [])
if len(settings.JFME_CONTENT_REQUIRED_METADATA) > 0 :
metadata_status.progression = (len(settings.JFME_CONTENT_REQUIRED_METADATA) - len(metadata_status.missing) - len(metadata_status.empty)) * 100 / len(settings.JFME_CONTENT_REQUIRED_METADATA)
else :
metadata_status.progression = 100
return metadata_status

class Command(BaseCommand):
help = "Check if metadata in JFME_CONTENT_REQUIRED_METADATA setting are specified in pages."

def add_arguments(self, parser):
parser.add_argument(
"--verbose",
action = "store_true",
help="Show missing or empty metadata in each page."
)
parser.add_argument(
"content path",
nargs = "*",
type=str,
default=settings.JFME_PAGES_DIRS,
help="The paths where search the pages. Set to JFME_PAGES_DIRS by default."
)

def handle(self, *args, **options) :

if settings.JFME_CONTENT_REQUIRED_METADATA == [] :
self.stdout.write(self.style.WARNING(
"Warning : no metadata specified in JFME_CONTENT_REQUIRED_METADATA setting."
))

for page in Page.load_glob(path = list(map(lambda p : Path(p).absolute(), options["content path"])), all = True) :

metadata_status = MetadataStatus.get_metadata_status_for(page)

self.stdout.write("{:3.0f}% : {}".format(
metadata_status.progression,
page.path.relative_to(page.content_page_dir))
)

if options["verbosity"] > 1 or options["verbose"] :
if not metadata_status.complete :
for missing in metadata_status.missing :
self.stdout.write("\t- '%s' is missing" % missing)
for empty in metadata_status.empty :
self.stdout.write("\t- '%s' is empty" % empty)
2 changes: 1 addition & 1 deletion jssg/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
JFME_POSTS_DIRS = [path / "posts" for path in JFME_CONTENT_DIRS]
JFME_TEMPLATES_DIRS = [path / "templates" for path in JFME_CONTENT_DIRS]
JFME_STATIC_DIRS = [path / "static" for path in JFME_CONTENT_DIRS]

JFME_CONTENT_REQUIRED_METADATA = ["title", "slug", "lang", "description"]


# Application definition
Expand Down

0 comments on commit d262481

Please sign in to comment.