Commit 3ca78783 authored by Denis Salem's avatar Denis Salem
Browse files

WIP: Documentation about entry's list getter. factorise code for for_entry_*,...

WIP: Documentation about entry's list getter. factorise code for for_entry_*, die() exit with -1 so VenC can be command chained
parent 10cc6be1
......@@ -3,6 +3,7 @@ categories: ''
tags: ''
chapter: 5.1.1
title: Accesseur de publications
variable_name: pif, paf, pouf
---VENC-BEGIN-PREVIEW---
---VENC-END-PREVIEW---
......@@ -32,6 +33,47 @@ Retourne l'heure de création de la publication.
## .:Escape:: .:GetEntryMinute:. ::EndEscape:.
Retourne la minute de création de la publication.
## .:Escape:: .:GetEntryDate:. ::EndEscape:.
Retourne la date de la publication formaté comme définit dans le fichier de configuration par le champ date_format.
## .:Escape:: .:GetEntryDateURL:. ::EndEscape:.
Retourne le liens vers le groupe d'archive dans lequel se trouve la publication.
## .:Escape:: .:GetEntryURL:. ::EndEscape:.
Retourne l'URL de la publication si VenC est configuré pour générer une page par publication.
sinon, le motif est ignoré et supprimé.
## .:Escape:: .:ForEntryAuthors::string::separator:. ::EndEscape:.
Retourne la liste des auteurs de la publication.
Le premier argument est une chaine de
caractère à formater avec la variable contextuelle __{value}__ contenant le nom de l'auteur courant.
Le second paramètre est une chaine de caractère servant de séparateur.
## .:Escape:: .:ForEntryTags::string::separator:. ::EndEscape:.
Retourne la liste des mots clefs de la publication.
Le premier argument est une chaine de
caractère à formater avec la variable contextuelle __{value}__ contenant le mot clef courant.
Le second paramètre est une chaine de caractère servant de séparateur.
## .:ForEntryMetadata::variable_name::{value}::,:.
Il est possible de définir des métadonnées sous la forme de listes. Qu'il est
Retourne la liste des mots clefs de la publication.
Le premier argument est une chaine de
caractère à formater avec la variable contextuelle __{value}__ contenant le mot clef courant.
Le second paramètre est une chaine de caractère servant de séparateur.
## .:Escape:: .:GetEntryMetadata::variable_name:. ::EndEscape:.
Il est possible de définir ses propres variable dans les métadonnées de la publication ou du template.
......@@ -53,7 +95,7 @@ De façon similaire, il est possible d'essayer d'accéder à une variable,
sans garantie que celle-ci existe. Si la variable existe, il est possible
alors de formater du texte pour y inclure notre variable.
Le formatage du texte se fait en utilisant des variables contextuelles propre à la fonction:
Il est possible d'utiliser des variables contextuelles propre à la fonction pour formater le texte:
- __{value}__ : La valeur de la variable qu'on référence.
- __{relative_origin}__ : Le chemin relatif de la racine du blog.
......
......@@ -317,7 +317,7 @@ class DataStore:
else:
optionals = {}
authors = [{"name":author["value"], "@type": "Person"} for author in entry.authors]
authors = [{"name":author, "@type": "Person"} for author in entry.authors]
if "publisher" in entry.schemadotorg.keys():
publisher = entry.schemadotorg["publisher"]
......@@ -712,6 +712,7 @@ class DataStore:
return self.html_categories_tree[key]
# TODO: NOT FINISHED YET
def for_entry_range(self, argv):
if len(argv) != 3:
raise PatternMissingArguments(expected=2,got=len(argv))
......@@ -745,44 +746,35 @@ class DataStore:
output += argv[2].replace("[index]}", '['+str(i)+']}').format(**entry.raw_metadata)
return output
def for_entry_tags(self, argv):
key = ''.join(argv)
entry = self.entries[self.requested_entry_index]
if not key in entry.html_tags.keys():
entry.html_tags[key] = merge(entry.tags, argv)
return entry.html_tags[key]
def for_entry_metadata(self, argv):
if len(argv) != 2:
raise PatternMissingArguments(expected=2,got=len(argv))
if len(argv) != 3:
raise PatternMissingArguments(expected=3,got=len(argv))
entry = self.entries[self.requested_entry_index]
key = ''.join(argv)
try:
l = getattr(entry, argv[0].strip()).split(',')
l = getattr(entry, argv[0].strip())
if type(l) != list:
raise GenericMessage(messages.entry_metadata_is_not_a_list.format(argv[0], entry.id))
except:
raise GenericMessage(messages.entry_has_no_metadata_like.format(argv[0]))
if not key in entry.html_for_metadata:
entry.html_for_metadata[key] = ''.join([
argv[1].format(**{"item": item.strip()}) for item in l
argv[1].format(**{"value": item.strip()}) for item in l
])
return entry.html_for_metadata[key]
def for_entry_authors(self, argv):
entry = self.entries[self.requested_entry_index]
key = ''.join(argv)
if not key in entry.html_authors.keys():
entry.html_authors[key] = merge(entry.authors, argv)
return self.for_entry_metadata(["authors"]+argv)
return entry.html_authors[key]
def for_entry_tags(self, argv):
return self.for_entry_metadata(["tags"]+argv)
""" TODO in 2.x.x: Access {count} and {weight} from LeavesForEntrycategories by taking benefit of preprocessing. """
# TODO in 2.x.x: Access {count} and {weight} from LeavesForEntrycategories by taking benefit of preprocessing.
def leaves_for_entry_categories(self, argv):
key = ''.join(argv)
entry = self.entries[self.requested_entry_index]
......
......@@ -124,14 +124,18 @@ class Entry:
die(messages.missing_mandatory_field_in_entry.format("title", self.id))
try:
self.authors = [ {"value":e} for e in list(metadata["authors"].split(",") if metadata["authors"] != str() else list()) ]
self.authors = [ e.strip() for e in metadata["authors"].split(",")] if type(metadata["authors"]) == str else metadata["authors"]
if type(self.authors) != list:
raise GenericMessage(messages.entry_metadata_is_not_a_list.format("authors", self.id))
except KeyError:
die(messages.missing_mandatory_field_in_entry.format("authors", self.id))
try:
self.tags = [ {"value":e} for e in list(metadata["tags"].split(",") if metadata["tags"] != str() else list())]
self.tags = [ e.strip() for e in metadata["tags"].split(",")] if type(metadata["tags"]) == str else metadata["tags"]
if type(self.tags) != list:
raise GenericMessage(messages.entry_metadata_is_not_a_list.format("tags", self.id))
except KeyError:
die(messages.missing_mandatory_field_in_entry.format("tags", self.id))
......
......@@ -115,4 +115,4 @@ class Messages:
entry_has_no_metadata_like = "Entry has no metadata identified by {0}."
blog_has_no_metadata_like = "Blog has no metadata identified by {0}."
invalid_range = "Invalid range {0}:{1}."
entry_metadata_is_not_a_list = "Metadata named \"{0}\" from entry {1} is not a list."
......@@ -113,3 +113,4 @@ class Messages:
entry_has_no_metadata_like = "La publication ne possède pas la métadonnée identifié par {0}."
blog_has_no_metadata_like = "Le blog ne possède pas la métadonnée identifié par {0}."
invalid_range = "Plage de nombres invalide {0}:{1}."
entry_metadata_is_not_a_list = "La métadonné \"{0}\" de la publication {1} n'est pas une liste."
......@@ -37,7 +37,6 @@ class PatternsMap():
"GetEntryDateURL" : datastore.get_entry_date_url,
"GetEntryURL" : datastore.get_entry_url,
"ForEntryAuthors" : datastore.for_entry_authors,
"ForEntryRange": datastore.for_entry_range,
"ForEntryTags" : datastore.for_entry_tags,
# Extra metadata getter
......
......@@ -37,7 +37,7 @@ def die(msg, color="RED", extra=""):
notify(msg, color)
if len(extra):
print(extra)
exit()
exit(-1)
# Being verborse is nice, with colours it's better
def notify(msg, color="GREEN"):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment