Commit 989a3d72 authored by Denis Salem's avatar Denis Salem

wip on PEP naming convention

parent 74dbc6d4
......@@ -34,15 +34,15 @@ from VenC.datastore.theme import themes_descriptor
from VenC.datastore.theme import Theme
from VenC.helpers import die
from VenC.helpers import notify
from VenC.helpers import RmTreeErrorHandler
from VenC.helpers import rm_tree_error_handler
from VenC.l10n import Messages
from VenC.pattern.processor import MergeBatches
from VenC.pattern.processor import merge_batches
from VenC.pattern.processor import Processor
from VenC.pattern.processor import PreProcessor
from VenC.pattern.codeHighlight import CodeHighlight
from VenC.threads.mainThread import MainThread
from VenC.threads.datesThread import DatesThread
from VenC.threads.categoriesThread import CategoriesThread
from VenC.pattern.code_highlight import CodeHighlight
from VenC.threads.main_thread import MainThread
from VenC.threads.dates_thread import DatesThread
from VenC.threads.categories_thread import CategoriesThread
non_contextual_patterns_name_datastore = [
# General entry data
......@@ -112,7 +112,7 @@ def export_blog(argv=list()):
else:
theme_folder = os.path.expanduser("~")+"/.local/share/VenC/themes/"+argv[0]+"/"
for param in rhemes_descriptor[argv[0]].keys():
for param in themes_descriptor[argv[0]].keys():
if param[0] != "_": # marker to detect field names we do not want to replace
datastore.blog_configuration[param] = themes_descriptor[argv[0]][param]
......@@ -135,79 +135,79 @@ def export_blog(argv=list()):
processor.blacklist.append(pattern_name)
# List of patterns where we want to remove <p></p> tag
processor.cleanAfterAndBefore.append("CodeHighlight")
processor.clean_after_and_before.append("CodeHighlight")
notify(messages.pre_process)
# Now we want to perform first parsing pass on entries and chunk
for entry in datastore.get_entries():
# Every chunks are preprocessed again because of contextual patterns
entry.content = PreProcessor(MergeBatches(processor.BatchProcess(entry.content, not entry.doNotUseMarkdown)))
entry.content = PreProcessor(merge_batches(processor.batch_process(entry.content, not entry.do_not_use_markdown)))
entry.htmlWrapper = deepcopy(theme.entry)
entry.htmlWrapper.above = PreProcessor(MergeBatches(processor.BatchProcess(entry.htmlWrapper.above, not entry.doNotUseMarkdown)))
entry.htmlWrapper.below = PreProcessor(MergeBatches(processor.BatchProcess(entry.htmlWrapper.below, not entry.doNotUseMarkdown)))
entry.html_wrapper = deepcopy(theme.entry)
entry.html_wrapper.above = PreProcessor(mergeBatches(processor.batch_process(entry.html_wrapper.above, not entry.do_not_use_markdown)))
entry.html_wrapper.below = PreProcessor(mergeBatches(processor.batch_process(entry.html_wrapper.below, not entry.do_not_use_markdown)))
entry.rssWrapper = deepcopy(theme.rssEntry)
entry.rssWrapper.above = PreProcessor(MergeBatches(processor.BatchProcess(entry.rssWrapper.above, not entry.doNotUseMarkdown)))
entry.rssWrapper.below = PreProcessor(MergeBatches(processor.BatchProcess(entry.rssWrapper.below, not entry.doNotUseMarkdown)))
entry.rss_wrapper = deepcopy(theme.rssEntry)
entry.rss_wrapper.above = PreProcessor(merge_batches(processor.batch_process(entry.rss_wrapper.above, not entry.do_not_use_markdown)))
entry.rss_wrapper.below = PreProcessor(merge_batches(processor.batch_process(entry.rss_wrapper.below, not entry.do_not_use_markdown)))
theme.header = PreProcessor(MergeBatches(processor.BatchProcess(theme.header)))
theme.footer = PreProcessor(MergeBatches( processor.BatchProcess(theme.footer)))
theme.rssHeader = PreProcessor(MergeBatches(processor.BatchProcess(theme.rssHeader)))
theme.rssFooter = PreProcessor(MergeBatches(processor.BatchProcess(theme.rssFooter)))
theme.header = PreProcessor(merge_batches(processor.batch_process(theme.header)))
theme.footer = PreProcessor(merge_batches(processor.batch_process(theme.footer)))
theme.rssHeader = PreProcessor(merge_batches(processor.batch_process(theme.rss_header)))
theme.rssFooter = PreProcessor(merge_batches(processor.batch_process(theme.rss_footer)))
# cleaning directory
shutil.rmtree("blog", ignore_errors=False, onerror=RmTreeErrorHandler)
shutil.rmtree("blog", ignore_errors=False, onerror=rm_tree_error_handler)
os.makedirs("blog")
# Starting second pass and exporting
thread = MainThread(Messages.exportMainThread, datastore, theme)
thread = MainThread(Messages.export_main_thread, datastore, theme)
thread.Do()
thread = DatesThread(Messages.exportArchives, datastore, theme)
thread = DatesThread(Messages.export_archives, datastore, theme)
thread.Do()
thread = CategoriesThread(Messages.exportCategories, datastore, theme)
thread = CategoriesThread(Messages.export_categories, datastore, theme)
thread.Do()
# Copy assets and extra files
#codeHighlight.ExportStyleSheets()
CopyRecursively("extra/","blog/")
CopyRecursively("theme/assets/","blog/")
copy_recursively("extra/","blog/")
copy_recursively("theme/assets/","blog/")
def CopyRecursively(src, dest):
def copy_recursively(src, dest):
for filename in os.listdir(src):
try:
shutil.copytree(src+filename, dest+filename)
except shutil.Error as e:
Notify(Messages.directoryNotCopied % e, "YELLOW")
notify(Messages.directory_not_copied % e, "YELLOW")
except OSError as e:
if e.errno == errno.ENOTDIR:
shutil.copy(src+filename, dest+filename)
else:
Notify(Messages.directoryNotCopied % e, "YELLOW")
notify(Messages.directory_not_copied % e, "YELLOW")
def EditAndExport(argv):
blogConfiguration = GetBlogConfiguration()
def edit_and_export(argv):
blog_configuration = get_blog_configuration()
if len(argv) != 1:
Die(Messages.missingParams.format("--edit-and-export"))
die(Messages.missing_params.format("--edit-and-export"))
try:
proc = subprocess.Popen([blogConfiguration["textEditor"], argv[0]])
proc = subprocess.Popen([blog_configuration["textEditor"], argv[0]])
while proc.poll() == None:
pass
except TypeError:
Die(Messages.unknownTextEditor.format(blogConfiguration["textEditor"]))
die(Messages.unknown_text_editor.format(blog_configuration["textEditor"]))
except:
raise
ExportBlog()
export_blog()
......@@ -26,7 +26,7 @@ import shutil
from VenC.l10n import Messages
MsgFormat = {
msg_format = {
"END" : '\033[0m',
"GREEN" : '\033[92m',
"RED" : '\033[91m',
......@@ -38,33 +38,33 @@ errors=list()
# Some data printed out may exceed few lines so
# it's nicer to highlight specific part of the output
def HighlightValue(text, value, color="RED"):
def highlight_value(text, value, color="RED"):
return text.replace(
value,
MsgFormat[color]+value+MsgFormat["END"]
)
# Terminate nicely with notification
def Die(msg,color="RED"):
def die(msg,color="RED"):
Notify(msg, color)
exit()
# Being verborse is nice, with colours it's better
def Notify(msg, color="GREEN"):
def notify(msg, color="GREEN"):
print(GetFormattedMessage(msg, color))
# Take care of setting up colours in printed out message
def GetFormattedMessage(msg, color="GREEN"):
return MsgFormat[color]+"\033[1mVenC: \033[0m"+MsgFormat[color]+msg+MsgFormat["END"]
def get_formatted_message(msg, color="GREEN"):
return msg_format[color]+"\033[1mVenC: \033[0m"+msg_format[color]+msg+msg_format["END"]
def OrderableStrToInt(string):
def orderable_str_to_int(string):
try:
return int(string)
except:
return -1
def MergeDictionnaries(current,public):
def merge_dictionnaries(current, public):
d = current.copy()
d.update(public)
return d
......@@ -77,39 +77,39 @@ def GetFormattedDate(unformattedDate, dateFormat):
)
'''
def GetListOfPages(entriesPerPage,entriesCount):
listOfPages = list()
pagesCount = math.ceil(entriesCount/entriesPerPage)
for pageNumber in range(0,pagesCount):
listOfPages.append(
def get_list_of_pages(entries_per_page, entries_count):
list_of_pages = list()
pages_count = math.ceil(entries_count/entries_per_page)
for page_number in range(0,pages_count):
list_of_pages.append(
{
"pageNumber": pageNumber,
"pageUrl": "index"+str(pageNumber)+".html" if pageNumber != 0 else "index.html"
"pageNumber": page_number,
"pageUrl": "index"+str(page_number)+".html" if page_number != 0 else "index.html"
}
)
return listOfPages
return list_of_pages
def RmTreeErrorHandler(function, path, excinfo):
def rm_tree_error_handler(function, path, excinfo):
if path == "blog" and excinfo[0] == FileNotFoundError:
Notify(Messages.blogFolderDoesntExists,"YELLOW")
notify(Messages.blog_folder_doesnt_exists,"YELLOW")
return
Notify(str(function),"RED")
Notify(str(path),"RED")
Notify(str(excinfo[0]),"RED")
notify(str(function),"RED")
notify(str(path),"RED")
notify(str(excinfo[0]),"RED")
exit()
def GetFilename(indexFileName, pageCounter):
return indexFileName.format(page_number=(str(pageCounter) if pageCounter != 0 else str()))
def get_filename(index_filename, page_counter):
return index_filename.format(page_number=(str(page_counter) if page_counter != 0 else str()))
def ExportExtraData(origin, destination=""):
def export_extra_data(origin, destination=""):
try:
folder = os.listdir(origin)
for item in folder:
if os.path.isdir(origin+"/"+item):
try:
os.mkdir(os.getcwd()+"/blog/"+destination+item)
ExportExtraData(origin+'/'+item, item+'/')
export_extra_data(origin+'/'+item, item+'/')
except:
raise
else:
......@@ -117,5 +117,5 @@ def ExportExtraData(origin, destination=""):
except:
raise
def RemoveByValue(l, v):
def remove_by_value(l, v):
return [x for x in filter(lambda x : x != v, l)]
......@@ -18,62 +18,62 @@
# along with VenC. If not, see <http://www.gnu.org/licenses/>.
class Messages:
blogCreated = "Votre blog a été crée!"
themeInstalled = "Le thème à bien été installé!"
entryWritten = "La publication a bien été ajouté!"
fileNotFound = "{0}: Ce fichier ou ce dossier n'existe pas."
fileAlreadyExists = "{0}: {1}: Le fichier existe déjà."
invalidEntryFilename = "{0}: Nom de fichier invalide pour une publication"
blogName = "Nom du blog"
yourName = "Votre nom"
blogDescription = "Courte description du blog"
blogKeywords = "Quelques mots clefs qui définissent votre blog"
aboutYou = "À propos de vous"
blog_created = "Votre blog a été crée!"
theme_installed = "Le thème à bien été installé!"
entry_written = "La publication a bien été ajouté!"
file_not_found = "{0}: Ce fichier ou ce dossier n'existe pas."
file_already_exists = "{0}: {1}: Le fichier existe déjà."
invalid_entry_filename = "{0}: Nom de fichier invalide pour une publication"
blog_name = "Nom du blog"
your_name = "Votre nom"
blog_description = "Courte description du blog"
blog_keywords = "Quelques mots clefs qui définissent votre blog"
about_you = "À propos de vous"
license = "La licence appliquée à votre contenu"
blogUrl = "L'url du blog"
blogLanguage = "La langue du blog"
yourEmail = "Votre adresse email"
missingParams = "{0}: Paramètres manquants."
cannotReadIn = "{0}: Impossible de lire dans {1}."
nothingToDo = "Rien à faire."
unknownCommand = "{0}: Commande inconnue."
noBlogConfiguration = "Le fichier de configuration du blog n'existe pas ou vous n'avez pas les bonnes permissions."
missingMandatoryFieldInBlogConf = "Attention, le champ \"{0}\" est manquant dans le fichier de configuration principal du blog."
blog_url = "L'url du blog"
blog_language = "La langue du blog"
your_email = "Votre adresse email"
missing_params = "{0}: Paramètres manquants."
cannot_read_in = "{0}: Impossible de lire dans {1}."
nothing_to_do = "Rien à faire."
unknown_command = "{0}: Commande inconnue."
no_blog_configuration = "Le fichier de configuration du blog n'existe pas ou vous n'avez pas les bonnes permissions."
missing_mandatory_field_in_blog_conf = "Attention, le champ \"{0}\" est manquant dans le fichier de configuration principal du blog."
username="Nom d'utilisateur: "
userPasswd="Mot de passe utilisateur: "
ftpHost="Nom d'hôte FTP"
ftpPath="Chemin absolu de votre blog sur l'hôte FTP."
cleanFtpDirectory="Nettoyage du repertoire FTP de destination..."
copyToFtpDirectory="Copie du blog vers le repertoire FTP de destination..."
possibleMalformedEntry="La publication {0} est probablement mal formée... Abandon."
possibleMalformedBlogConfiguration="Le fichier de configuration du blog est probablement mal formée... Abandon."
blogRecompilation="Recompilation du blog locale..."
exportArchives="Exportation locale des publications triées par dates..."
exportMainThread="Exportation locale du fil de publications principal."
exportMainThreadRss="Exportation locale du flux RSS du fil de publications principal."
exportCategories="Exportation locale des publications triées par categories..."
exportCategoriesRss="Exportation locale du flux RSS du fil de publications de la categorie '{0}'."
missingMandatoryFieldInEntry="Le champ '{0}' dans l'entrée numéro {1} est manquant."
recursiveForUnknownValue="RecursiveFor: La valeur {0} n'existe pas."
notEnoughArgs="Paramétres manquants."
unknownPattern="Le motif '{0}' n'existe pas."
unknownContextual="La variable contextuel {0} n'existe pas."
inRessource="Dans la ressource '{0}'."
somethingGoesWrongReturnEmptyString="Une erreur s'est produite. Remplacement pas une chaine de caractère vide."
argBlogName="Nom du blog {0}"
argEntryName="Nom de la publication"
argTemplateName="Nom du template"
argInputFilename="Nom de fichier"
blogFolderDoesntExists="Le dossier de destination n'existe pas... VenC s'en fiche et va en faire un nouveau."
themeDescriptionDummy = "Le thème vide. Il donne une bonne base pour concevoir le votre."
themeDescriptionGentle = "Thème mono colonne, très clair, aéré et élégant. Idéal pour un blog."
themeDescriptionTessellation = "Thème comportant trois colonnes, très clair, aéré et élégant. Idéal pour une galerie."
themeDoesntExists = "{0}: Ce thème n'existe pas."
unknownTextEditor = "{0}: Éditeur de texte inconnu."
themeName = "Nom du thème"
entryIsEmpty = "{0}: Le contenu de la publication est vide."
missingEntryContentInclusion="Thème invalide. Il manque l'inclusion du contenu de la publication dans entry.html et/ou rssEntry.html"
unknownLanguage="Pygments: {0}: Langage inconnu."
preProcess="Pré-traitement du théme et des publications..."
directoryNotCopied="Le dossier ne peut être copié. Erreur: %s"
variableErrorInFileName="Erreur de variable dans le fichier de configuration principal où les chemins et noms de fichier sont définis: {0} n'existe pas."
user_passwd="Mot de passe utilisateur: "
ftp_host="Nom d'hôte FTP"
ftp_path="Chemin absolu de votre blog sur l'hôte FTP."
clean_ftp_directory="Nettoyage du repertoire FTP de destination..."
copy_to_ftp_directory="Copie du blog vers le repertoire FTP de destination..."
possible_malformed_entry="La publication {0} est probablement mal formée... Abandon."
possible_malformed_blog_configuration="Le fichier de configuration du blog est probablement mal formée... Abandon."
blog_recompilation="Recompilation du blog locale..."
export_archives="Exportation locale des publications triées par dates..."
export_main_thread="Exportation locale du fil de publications principal."
export_main_rhread_rss="Exportation locale du flux RSS du fil de publications principal."
export_categories="Exportation locale des publications triées par categories..."
export_categories_rss="Exportation locale du flux RSS du fil de publications de la categorie '{0}'."
missing_mandatory_field_in_entry="Le champ '{0}' dans l'entrée numéro {1} est manquant."
recursive_for_unknown_value="RecursiveFor: La valeur {0} n'existe pas."
not_enough_args="Paramétres manquants."
unknown_pattern="Le motif '{0}' n'existe pas."
unknown_contextual="La variable contextuel {0} n'existe pas."
in_ressource="Dans la ressource '{0}'."
something_goes_wrong_return_empty_string="Une erreur s'est produite. Remplacement pas une chaine de caractère vide."
arg_blog_name="Nom du blog {0}"
arg_entry_name="Nom de la publication"
arg_template_name="Nom du template"
arg_input_filename="Nom de fichier"
blog_folder_doesnt_exists="Le dossier de destination n'existe pas... VenC s'en fiche et va en faire un nouveau."
theme_description_dummy = "Le thème vide. Il donne une bonne base pour concevoir le votre."
theme_description_gentle = "Thème mono colonne, très clair, aéré et élégant. Idéal pour un blog."
theme_description_tessellation = "Thème comportant trois colonnes, très clair, aéré et élégant. Idéal pour une galerie."
theme_doesnt_exists = "{0}: Ce thème n'existe pas."
unknown_text_editor = "{0}: Éditeur de texte inconnu."
theme_name = "Nom du thème"
entry_is_empty = "{0}: Le contenu de la publication est vide."
missing_entry_content_inclusion="Thème invalide. Il manque l'inclusion du contenu de la publication dans entry.html et/ou rssEntry.html"
unknown_language="Pygments: {0}: Langage inconnu."
pre_process="Pré-traitement du théme et des publications..."
directory_not_copied="Le dossier ne peut être copié. Erreur: %s"
variable_error_in_filename="Erreur de variable dans le fichier de configuration principal où les chemins et noms de fichier sont définis: {0} n'existe pas."
......@@ -23,9 +23,9 @@ import VenC.helpers
from copy import deepcopy
from VenC.helpers import GetFormattedMessage
from VenC.helpers import HighlightValue
from VenC.helpers import RemoveByValue
from VenC.helpers import get_formatted_message
from VenC.helpers import highlight_value
from VenC.helpers import remove_by_value
from VenC.l10n import Messages
# Special case of KeyError
......
Markdown is supported
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