Preparing check process, head tags in article

This commit is contained in:
Cyrille L 2023-09-30 16:02:05 +02:00
parent 5b4356d229
commit c530449369
14 changed files with 209 additions and 129 deletions

View File

@ -9,6 +9,9 @@ Tyto - Littérateur
# CURRENTLY IN DEV ! # CURRENTLY IN DEV !
## [1.9.12]
- preparing check process : head tags in article
## [1.9.11] ## [1.9.11]
- Preparing for multi-targets with "all" - Preparing for multi-targets with "all"
- check if article is a .tyto format - check if article is a .tyto format

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# Version: 1.9.11 # Version: 1.9.12
# Updated: 2023-09-29 1696004712 # Updated: 2023-09-30 1696082419
# Tyto - Littérateur # Tyto - Littérateur
# Copyright (C) 2023 Cyrille Louarn <echolib+tyto@a-lec.org> # Copyright (C) 2023 Cyrille Louarn <echolib+tyto@a-lec.org>

View File

@ -76,8 +76,14 @@ def is_article(target):
sys.exit(post.error) sys.exit(post.error)
header_contents() head_contents()
if post.error != 0:
if args.multiple:
return # Let other articles pass
sys.exit(post.error)
print("pass", post.error, args.multiple)
#===========================================# #===========================================#
# # Create a loop to get all .tyto articles # # # Create a loop to get all .tyto articles #
@ -89,7 +95,65 @@ def multiple_targets():
#=======================# #=======================#
# check header contents # # check header contents #
#-----------------------# #-----------------------#
def header_contents(): def head_contents():
print("check: uri_db =", post.cf_uri, post.wrk_id) for ln, line in enumerate(post.head_contents.rsplit("\n"), 1):
print("wrk_target", post.wrk_target) if not line or line.isspace() or line.startswith("#"): continue
print(post.head_contents, post.text_contents)
# One Line tags (Must be set)
# ===========================
if not post.title[1] and line.startswith(post.title[0]):
post.title = (post.title[0], ol_tag_value(line, False))
elif not post.about[1] and line.startswith(post.about[0]):
post.about = (post.about[0], ol_tag_value(line, False))
elif not post.date[1] and line.startswith(post.date[0]):
post.date = (post.date[0], ol_tag_value(line, False))
elif not post.author[1] and line.startswith(post.author[0]):
post.author = (post.author[0], ol_tag_value(line, True))
elif not post.tags[1] and line.startswith(post.tags[0]):
post.tags = (post.tags[0], ol_tag_value(line, True))
# Sets are done from loop
# Check if tag value exists
# =========================
if not is_ol_tag(post.title[0], post.title[1]): return
if not is_ol_tag(post.about[0], post.about[1]): return
if not is_ol_tag(post.date[0], post.date[1]): return
if not is_ol_tag(post.author[0], post.author[1]): return
if not is_ol_tag(post.tags[0], post.tags[1]): return
#===========================================#
# Return value from one line after "[tag]:" #
# tags, author are comma separated #
# set new value, removing spaces (strip) #
#-------------------------------------------#
def ol_tag_value(line, commas):
value = line.rsplit(":")[1].lstrip()
# reformat comma separated items, removing first space
if commas:
tuple_values = value.rsplit(",")
value = ""
for i, item in enumerate(tuple_values):
value = value + item.strip()
if i != len(tuple_values) - 1:
value = value + ","
return value
#===========================#
# Check if tag value is set #
# return True/False #
#---------------------------#
def is_ol_tag(tag, value):
if not value:
post.error = 51
debug.out(51, "%s ?"%tag, post.uri, True, 2, False)
return False
return True

View File

@ -88,6 +88,7 @@ def out(nbr, var, val, show, color, stop):
22 : langs.logs.err_post_head, 22 : langs.logs.err_post_head,
23 : langs.logs.err_post_empty, 23 : langs.logs.err_post_empty,
50 : langs.logs.err_date, 50 : langs.logs.err_date,
51 : langs.logs.err_post_data,
# WARNINGS (100-200) # WARNINGS (100-200)
100 : langs.logs.warn_no_dom, 100 : langs.logs.warn_no_dom,
101 : langs.logs.domain_created, 101 : langs.logs.domain_created,

View File

@ -145,7 +145,7 @@ def cf_create():
forms.ask_domain_shortname(name) forms.ask_domain_shortname(name)
# Create default files # Create default files
tools.create_file(cf_uri, tyto.ini_domain%name) tools.create_file(cf_uri, ini_template%name)
tools.create_dirs(ult_dir) tools.create_dirs(ult_dir)
tools.create_file(ult_cf_uri, tyto.ini_domain_user) tools.create_file(ult_cf_uri, tyto.ini_domain_user)
@ -595,6 +595,9 @@ except:
debug.out(2, "PWD", "?", True, 2, True) debug.out(2, "PWD", "?", True, 2, True)
#======#
# main #
#======#
#==========================================# #==========================================#
# utl: $USER/.local/Tyto # # utl: $USER/.local/Tyto #
# cf: Domain Configuration File # # cf: Domain Configuration File #
@ -620,3 +623,115 @@ cf_id = tools.get_filesum(cf_uri, False) # ID from URI
ult_dir = os.path.join(home_dir, ".local/Tyto/") ult_dir = os.path.join(home_dir, ".local/Tyto/")
ult_dlf_uri = os.path.join(ult_dir, "domains.ini") # Domains list file ult_dlf_uri = os.path.join(ult_dir, "domains.ini") # Domains list file
ult_cf_uri = os.path.join(ult_dir, cf_id + ".ini") ult_cf_uri = os.path.join(ult_dir, cf_id + ".ini")
#===========================#
# Templates #==================================================
#===========================#
#=============================#
# Domain configuration file #
# Create file with new domain #
#-----------------------------#
ini_template = """[DOMAIN]
activated = no
name = %s
title =
date =
about =
tags =
mail =
license = gfdl-1.3
license_url = https://www.gnu.org/licenses/fdl-1.3.txt
legals_url =
terms_url =
statuses_url =
[WEBSITE]
www_url =
wip_url =
lang =
css = tyto
separator = |
article_code = yes
static = no
[WEBSITE_MODULES]
navbar = yes
sidebar_title =
sidebar_items = 6
rss_items = 100
sitemaps = yes
[TEMPLATE_FILENAMES]
favicon = favicon.png
logo = logo.png
styles = styles.css
rss = rss.xml
stats = tyto_stats.ini
[USER_DIRS]
root =
articles =
images =
files =
modules =
database =
template =
[USER_TEMPLATE_FILES]
logo =
favicon =
styles =
[USER_MODULES_FILES]
metas =
header =
navbar =
sidebar =
footer =
[SERVER]
root = /var/www/
domain =
wip =
www =
[WIP_DIRS]
images =
files =
template =
[WIP_FILES]
favicon =
logo =
styles =
rss =
stats =
metas =
header =
navbar =
sidebar =
footer =
[WWW_DIRS]
images =
files =
template =
[WWW_FILES]
favicon =
logo =
styles =
rss =
stats =
metas =
header =
navbar =
sidebar =
footer =
[TYTO]
domain_hash =
domain_conf =
domain_user =
"""

View File

@ -36,8 +36,6 @@ import os, configparser
import domain, debug, tools, tyto import domain, debug, tools, tyto
error = 0
#============================================# #============================================#
# Check if current directory is in articles/ # # Check if current directory is in articles/ #
# Check if article from target exists # # Check if article from target exists #
@ -102,7 +100,7 @@ def is_tyto_format():
if not line: if not line:
continue continue
if line.startswith(tyto.post_sep): if line.startswith(post_sep):
separator = True separator = True
continue continue
@ -110,7 +108,7 @@ def is_tyto_format():
else: head_contents = "%s%s\n"%(head_contents, line) else: head_contents = "%s%s\n"%(head_contents, line)
if not separator: if not separator:
debug.out(21, tyto.post_sep, uri, True, 2, False) debug.out(21, post_sep, uri, True, 2, False)
error = 21 error = 21
return False return False
@ -156,3 +154,18 @@ def cf_valid():
print("post: chk_hash", chk_hash) print("post: chk_hash", chk_hash)
#======#
# MAIN #
#======#
error = 0
# Tag separator to split head and text article
post_sep = "-----"
# One Line Tags in head article
title = ("title:", False)
about = ("about:", False)
date = ("date:", False)
tags = ("tags:", False)
author = ("author:", False)

View File

@ -72,116 +72,7 @@ keys_questions = {
"tags" : forms.ask_domain_tags "tags" : forms.ask_domain_tags
} }
#===========================#
# Templates #==================================================
#===========================#
#=============================#
# Domain configuration file #
# Create file with new domain #
#-----------------------------#
ini_domain = """[DOMAIN]
activated = no
name = %s
title =
date =
about =
tags =
mail =
license = gfdl-1.3
license_url = https://www.gnu.org/licenses/fdl-1.3.txt
legals_url =
terms_url =
statuses_url =
[WEBSITE]
www_url =
wip_url =
lang =
css = tyto
separator = |
article_code = yes
static = no
[WEBSITE_MODULES]
navbar = yes
sidebar_title =
sidebar_items = 6
rss_items = 100
sitemaps = yes
[TEMPLATE_FILENAMES]
favicon = favicon.png
logo = logo.png
styles = styles.css
rss = rss.xml
stats = tyto_stats.ini
[USER_DIRS]
root =
articles =
images =
files =
modules =
database =
template =
[USER_TEMPLATE_FILES]
logo =
favicon =
styles =
[USER_MODULES_FILES]
metas =
header =
navbar =
sidebar =
footer =
[SERVER]
root = /var/www/
domain =
wip =
www =
[WIP_DIRS]
images =
files =
template =
[WIP_FILES]
favicon =
logo =
styles =
rss =
stats =
metas =
header =
navbar =
sidebar =
footer =
[WWW_DIRS]
images =
files =
template =
[WWW_FILES]
favicon =
logo =
styles =
rss =
stats =
metas =
header =
navbar =
sidebar =
footer =
[TYTO]
domain_hash =
domain_conf =
domain_user =
"""
# Template file configuration for each a created domain # Template file configuration for each a created domain
# #
@ -199,9 +90,6 @@ root =
ini_domains_list = """[DOMAINS] ini_domains_list = """[DOMAINS]
""" """
# Domain keys that can be empty
opt_domain_keys = ("legals_url", "terms_url", "statuses_url")
#=============================# #=============================#
# articles configuration file # # articles configuration file #
#-----------------------------# #-----------------------------#
@ -253,8 +141,3 @@ lines =
# Put here values where posts target cannot begin with # Put here values where posts target cannot begin with
notarget = ("./", "../") notarget = ("./", "../")
#===================#
# Artcicle contents #==========================================================
#===================#
post_sep = "-----"

View File

@ -61,6 +61,7 @@ err_post_sep = "Séparateur manquant"
err_post_head = "Erreur dans l'Entête" err_post_head = "Erreur dans l'Entête"
err_post_empty = "Article vide" err_post_empty = "Article vide"
err_ini_file = "Configuration invalide" err_ini_file = "Configuration invalide"
err_post_data = "Article: donnée manquante"
# Warnings # Warnings
warn_no_dom = "Domaine non configuré" warn_no_dom = "Domaine non configuré"