From 8e74f8decef058b7507e85b664c39ed58f423a63 Mon Sep 17 00:00:00 2001
From: Cyrille L
Date: Mon, 6 Feb 2023 10:50:50 +0100
Subject: [PATCH] Lots of changes. wip page file created with needed in-files
article
---
src/usr/bin/tyto | 38 +-
src/var/lib/tyto/program/args.py | 86 ++++
src/var/lib/tyto/program/check.py | 218 +++++-----
src/var/lib/tyto/program/db.py | 139 +++++++
src/var/lib/tyto/program/domain.py | 517 ++++++++++++++----------
src/var/lib/tyto/program/html.py | 603 +++++++++++++++++++---------
src/var/lib/tyto/program/logs.py | 69 ++++
src/var/lib/tyto/program/navbars.py | 52 ---
src/var/lib/tyto/program/publish.py | 25 ++
src/var/lib/tyto/program/tyto.py | 160 ++++----
src/var/lib/tyto/program/wip.py | 57 +--
11 files changed, 1252 insertions(+), 712 deletions(-)
create mode 100644 src/var/lib/tyto/program/args.py
create mode 100644 src/var/lib/tyto/program/db.py
create mode 100644 src/var/lib/tyto/program/logs.py
delete mode 100644 src/var/lib/tyto/program/navbars.py
create mode 100644 src/var/lib/tyto/program/publish.py
diff --git a/src/usr/bin/tyto b/src/usr/bin/tyto
index 819c3f8..5256a1b 100755
--- a/src/usr/bin/tyto
+++ b/src/usr/bin/tyto
@@ -26,8 +26,6 @@
import sys
sys.path.insert(0, '/var/lib/tyto/program')
-import check, domain, wip, html
-
#====================#
# MAIN #
# Treat Arguments #
@@ -36,6 +34,9 @@ if not __name__ == "__main__":
print(':< Mismatch program start')
sys.exit(1)
+import args
+import check, domain, wip, html
+
noarg = False
target = ''
option = ''
@@ -51,38 +52,7 @@ actions = {
'footer' : html.manage_configs
}
-# Dict for Options
-options = {
- '-a' : 'Add', 'add' : 'Add',
- '-R' : "Remove", 'remove' : "Remove",
- '-n' : "New", 'new' : "New",
- '-e' : "Edit", 'edit' : "Edit",
- '-F' : "Force", 'force' : "Force",
- '-s' : "Show",
- '-d' : 'DB',
- 'again': 'Again'
- }
-
-# Set Argument 2 or 3
-#--------------------
-for i in range(2,4):
- try:
- sys.argv[i]
- try:
- if not option: option = options[sys.argv[i]]
- else: target: target = sys.argv[i]
- except:
- if not target: target = sys.argv[i]
- else: option: option = options[sys.argv[i]]
- except:
- noarg = True
-
- if noarg: continue
-
# Argument 1
#-----------
-try:
- actions[sys.argv[1]](target, option)
-except KeyError:
- print(':< Invalid action "%s": [check, wip...]'%sys.argv[1])
+actions[sys.argv[1]](args.target, args.option)
diff --git a/src/var/lib/tyto/program/args.py b/src/var/lib/tyto/program/args.py
new file mode 100644
index 0000000..0342b9e
--- /dev/null
+++ b/src/var/lib/tyto/program/args.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python3
+# Name: Tyto - Littérateur
+# Type: Command arguments
+# Description: Check arguments
+# file: args.py
+# Folder: /var/lib/tyto/program/
+# By echolib (XMPP: im@echolib.re)
+# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
+
+#------------
+# funny stats
+#------------
+# lines:
+# functions:
+# comments:
+#----------------------------------------------------------------------
+
+#**********************************************************************
+
+import sys
+
+# Arguments from command line
+#----------------------------
+# Dict for Actions
+actions = (
+ 'check',
+ 'domain',
+ 'footer',
+ 'metas',
+ 'navbar',
+ 'wip',
+ 'publish',
+ 'sidebar'
+ )
+
+# Dict for Options
+options = {
+ '-a' : 'Add', 'add' : 'Add',
+ '-c' : 'Create', 'create' : 'Create',
+ '-d' : 'DB', 'db' : 'DB',
+ '-e' : "Edit", 'edit' : "Edit",
+ '-F' : "Force", 'force' : "Force",
+ '-n' : "New", 'new' : "New",
+ '-R' : "Remove", 'remove' : "Remove",
+ '-s' : "Show", 'show' : 'Show',
+ 'again' : 'Again'
+ }
+
+# Second argument in command
+#---------------------------
+arguments = (
+ '-a', 'add',
+ '-c', 'create',
+ '-d', 'db',
+ '-e', 'edit',
+ '-F', 'force',
+ '-n', 'new',
+ '-R', 'remove',
+ '-s', 'show',
+ 'again'
+ )
+
+option = ''
+target = ''
+
+try:
+ sys.argv[1]
+except:
+ print(':< Needed [action] argument')
+ sys.exit(1)
+
+if not sys.argv[1] in actions:
+ print(':< Unused [action] argument: "%s"'%sys.argv[1])
+ sys.exit(1)
+
+# Check and set arguments from command line
+#------------------------------------------
+for i in range(2,4):
+ try:
+ sys.argv[i]
+ if sys.argv[i] in arguments:
+ option = options[sys.argv[i]]
+ else:
+ target = sys.argv[i]
+ except:
+ continue
diff --git a/src/var/lib/tyto/program/check.py b/src/var/lib/tyto/program/check.py
index a047a3e..2acde83 100644
--- a/src/var/lib/tyto/program/check.py
+++ b/src/var/lib/tyto/program/check.py
@@ -23,10 +23,7 @@ from datetime import datetime
from time import gmtime, strftime
import time
-import tyto
-
-# Load domain configuration if exists
-if tyto.domain_exists: exec(open(tyto.domain_conf).read())
+import logs, db, tyto
post_err = False
date_wip = hash_wip = date_www = hash_www = ''
@@ -37,21 +34,22 @@ date_wip = hash_wip = date_www = hash_www = ''
# Start checking article #
#-------------------------#--------------------------------------------
def manage_check(target, option):
+ # target needed
+ if not target: logs.out("5", '', True)
+
+
global post_bottom, article_bottom
global post_words
-
- # target needed
- if not target: tyto.exiting("5", '', True)
# Article exists + has DB ?
db_exists = tyto.get_db_post(target)
# Manage option
if option == 'Edit':
- tyto.edit_file(tyto.uri_root)
+ tyto.edit_file(tyto.uri_file)
return
elif option == 'Show':
- article_raw = open(tyto.uri_root).read()
+ article_raw = open(tyto.uri_file).read()
for line in article_raw.rsplit('\n'):
print(line)
return
@@ -66,21 +64,12 @@ def manage_check(target, option):
try:
exec(open(tyto.post_db).read(),globals())
- try:
- if hash_chk == tyto.hash_post and not option == 'Force':
- tyto.exiting("20", date_chk, True)
- except: pass
- except: pass
-
- # Get sub_uri for HTML
- global sub_uri
- sub_uri = tyto.uri_post.rsplit('articles/')[1]
- sub_nbr = sub_uri.count('/')
- if sub_nbr == 0 : sub_uri = './'
- else: sub_uri = sub_nbr * '../'
+ if hash_chk == tyto.hash_post and not option == 'Force':
+ logs.out("20", date_chk, True)
+ finally: pass
# Start processes
- file_to_string(tyto.uri_root)
+ file_to_string(tyto.uri_file)
# Specific to inline-code: check markers on same line
check_icodes(article.rsplit('\n'))
@@ -106,7 +95,7 @@ def manage_check(target, option):
check_headers(post_header)
# Exit if unused needed tags
- if post_err: tyto.exiting("7", '', True)
+ if post_err: logs.out("7", '', True)
# No error
create_database()
@@ -134,8 +123,7 @@ def file_to_string(post_file):
article = open(post_file, 'r').read()
# Check if separator or exit
- if not '-----' in article:
- tyto.exiting("6", '-----', True)
+ if not '-----' in article: logs.out("6", '-----', True)
# Set from separator, NOT splitted by new line
article_header = article.rsplit('-----')[0]
@@ -146,9 +134,9 @@ def file_to_string(post_file):
post_bottom = article.rsplit('-----')[1].rsplit('\n')
-#
-# Check inline code, for markers on same line
-#
+#=============================================#
+# Check inline code, for markers on same line #
+#---------------------------------------------#
def check_icodes(article):
quote = bcode = False
@@ -172,10 +160,11 @@ def check_icodes(article):
icode_m1 = line.count(tyto.words_tags[9][0])
icode_m2 = line.count(tyto.words_tags[9][1])
if icode_m1 != icode_m2:
- tyto.exiting("8", 'inline-code: line %s. %s %s'%(ln,
+ logs.out("8", 'inline-code: line %s. %s %s'%(ln,
tyto.words_tags[9][0], tyto.words_tags[9][1]
), True
- )
+ )
+
#==================================#
# Check tags from article's header #
@@ -186,6 +175,11 @@ def check_headers(post_header):
global stat_links, stat_images, stat_files, stat_raws, stat_abbrs
global post_tags
global snpic_url
+ global files_post
+
+ # Contains all files URIs needed for article
+ # Used with publish command to copy needed files
+ files_post = ('')
snshare = False
snpic_name = ''
@@ -259,7 +253,7 @@ def check_headers(post_header):
# Check if set needed tags
for tag in need_headers:
if not need_headers[tag]:
- tyto.exiting("6", tag, False)
+ logs_out("6", tag, False)
###
@@ -282,20 +276,20 @@ def check_headers(post_header):
abbr_short = post_header[ln - 1].rsplit(tag)[1].lstrip()
if not abbr_short:
- tyto.exiting("2", "Line %s (SHORT, %s)"%(ln, tag), False)
+ logs.out("2", "Line %s (SHORT, %s)"%(ln, tag), False)
post_err = True
if not abbr_short.isupper():
- tyto.exiting("3", "Line %s (Upper SHORT, %s)"%(ln, tag), False)
+ logs.out("3", "Line %s (Upper SHORT, %s)"%(ln, tag), False)
post_err = True
continue
if not isin(r'!\b%s\b'%abbr_short, post_bottom):
- tyto.exiting("6", '!%s'%abbr_short, False)
+ logs.out("6", '!%s'%abbr_short, False)
post_err = True
abbr_long = post_header[ln].lstrip()
if abbr_long.startswith(tyto.headers): abbr_long = ''
if not abbr_long:
- tyto.exiting("2", "Line %s (Long, %s)"%(ln + 1, tag), False)
+ logs.out("2", "Line %s (Long, %s)"%(ln + 1, tag), False)
post_err = True
abbr_alt = post_header[ln + 1].lstrip()
@@ -319,22 +313,22 @@ def check_headers(post_header):
link_name = post_header[ln - 1].rsplit(tag)[1].lstrip()
if not link_name:
- tyto.exiting("2", "Line %s (Name, %s)"%(ln, tag), False)
+ logs.out("2", "Line %s (Name, %s)"%(ln, tag), False)
post_err = True
if not isin(r'\b_%s\b'%link_name, post_bottom):
- tyto.exiting("6", "_%s"%link_name, False)
+ logs.out("6", "_%s"%link_name, False)
post_err = True
link_url = post_header[ln].lstrip()
if link_url.startswith(tyto.headers): link_url = ''
if not link_url:
- tyto.exiting("2", "Line %s (URL, %s)"%(ln + 1, tag), False)
+ logs.out("2", "Line %s (URL, %s)"%(ln + 1, tag), False)
post_err = True
link_alt = post_header[ln + 1].lstrip()
if link_alt.startswith(tyto.headers): link_alt = ''
if not link_alt:
- tyto.exiting("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
+ logs.out("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
post_err = True
if not post_err:
@@ -356,24 +350,26 @@ def check_headers(post_header):
image_name = post_header[ln - 1]
image_name = image_name.rsplit(tag)[1].lstrip().rsplit(' ')[0]
if not image_name:
- tyto.exiting("2", "Line %s (Name, %s)"%(ln, tag), False)
+ logs.out("2", "Line %s (Name, %s)"%(ln, tag), False)
post_err = True
if not isin(r'\b_%s%s\b'%(tag, image_name), post_bottom):
- tyto.exiting("6", "_%s%s"%(tag, image_name), False)
+ logs.out("6", "_%s%s"%(tag, image_name), False)
post_err = True
image_uri = post_header[ln].lstrip()
if image_uri.startswith(tyto.headers): image_uri = ''
if not image_uri:
- tyto.exiting("2", "Line %s (URI, %s)"%(ln + 1, tag), False)
+ logs.out("2", "Line %s (URI, %s)"%(ln + 1, tag), False)
post_err = True
else:
check_file_uri('image', image_uri, ln + 1)
+ f_uri = web_uri[1:len(web_uri)]
+ files_post = (files_post + "'%s', "%f_uri)
image_alt = post_header[ln + 1].lstrip()
if image_alt.startswith(tyto.headers): image_alt = ''
if not image_alt:
- tyto.exiting("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
+ logs.out("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
post_err = True
if not post_err:
@@ -393,24 +389,26 @@ def check_headers(post_header):
raw_name = post_header[ln - 1]
raw_name = raw_name.rsplit(tag)[1].lstrip().rsplit(' ')[0]
if not raw_name:
- tyto.exiting("2", "Line %s (Name, %s)"%(ln, tag), False)
+ logs.out("2", "Line %s (Name, %s)"%(ln, tag), False)
post_err = True
if not isin(r'\b_%s%s\b'%(tag, raw_name), post_bottom):
- tyto.exiting("6", "_%s%s"%(tag, raw_name), False)
+ logs.out("6", "_%s%s"%(tag, raw_name), False)
post_err = True
raw_uri = post_header[ln].lstrip()
if raw_uri.startswith(tyto.headers): raw_uri = ''
if not raw_uri:
- tyto.exiting("2", "Line %s (URI, %s)"%(ln + 1, tag), False)
+ logs.out("2", "Line %s (URI, %s)"%(ln + 1, tag), False)
post_err = True
else:
check_file_uri('file', raw_uri, ln + 1)
+ f_uri = web_uri[1:len(web_uri)]
+ files_post = (files_post + "'%s', "%f_uri)
raw_alt = post_header[ln + 1].lstrip()
if raw_alt.startswith(tyto.headers): raw_alt = ''
if not raw_alt:
- tyto.exiting("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
+ logs.out("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
post_err = True
if not post_err:
@@ -429,24 +427,26 @@ def check_headers(post_header):
file_name = post_header[ln - 1].rsplit(tag)[1].lstrip()
if not file_name:
- tyto.exiting("2", "Line %s (Name, %s)"%(ln, tag), False)
+ logs.out("2", "Line %s (Name, %s)"%(ln, tag), False)
post_err = True
if not isin(r'\b__%s\b'%file_name, post_bottom):
- tyto.exiting("6", "__%s"%file_name, False)
+ logs.out("6", "__%s"%file_name, False)
post_err = True
file_uri = post_header[ln].lstrip()
if file_uri.startswith(tyto.headers): file_uri = ''
if not file_uri:
- tyto.exiting("2", "Line %s (URI, %s)"%(ln + 1, tag), False)
+ logs.out("2", "Line %s (URI, %s)"%(ln + 1, tag), False)
post_err = True
else:
check_file_uri('file', file_uri, ln + 1)
+ f_uri = web_uri[1:len(web_uri)]
+ files_post = (files_post + "'%s', "%f_uri)
file_alt = post_header[ln + 1].lstrip()
if file_alt.startswith(tyto.headers): file_alt = ''
if not file_alt:
- tyto.exiting("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
+ logs.out("2", "Line %s (Alt-Text, %s)"%(ln + 2, tag), False)
post_err = True
if not post_err:
@@ -461,24 +461,24 @@ def check_headers(post_header):
# snpic (set image to share to social networks)
#----------------------------------------------
if snpic_name: continue
+ snpic_url = '%s/template/%s'%(db.domain_www_url, db.domain_logo)
tag = tyto.headers[11] # snpic:
if line.startswith(tag):
snpic_name = post_header[ln - 1].rsplit(tag)[1].lstrip()
for ln, line in enumerate(post_header, 1):
if re.search(r"^image:\s+%s$"%snpic_name, line):
- image_uri = post_header[ln].lstrip()
+ image_uri = post_header[ln].lstrip()
check_file_uri('image', image_uri, ln + 1)
snshare = True
- snpic_url = '%s%s'%(domain_url, web_uri)
+ snpic_url = '%s%s'%(db.domain_www_url, web_uri)
break
if not snshare:
- tyto.exiting("10", '%s %s'%(tyto.headers[6], snpic_name), True)
+ logs.out("12", '%s %s'%(tyto.headers[6], snpic_name), True)
# Exit if error in optional tags
#-------------------------------
- if post_err:
- tyto.exiting("7", '', True)
+ if post_err: logs.out("7", '', True)
#================================#
@@ -495,7 +495,7 @@ def check_date(date, ln):
bool(datetime.strptime(date, fmt_article))
except ValueError:
post_err = True
- tyto.exiting("3", 'Line %s (date, %s)'%(ln, date), False)
+ logs.out("3", 'Line %s (date, %s)'%(ln, date), False)
# Create date_check (epoch) from article's Date + now TIME
if not post_err:
@@ -516,9 +516,9 @@ def check_file_uri(filetype, filename, ln):
# (@ = images/, / = articles/, else = post_dir)
if filename.startswith('@'):
if filetype == 'image':
- fileuri = domain_images + filename[1: len(filename)]
+ fileuri = db.domain_images + filename[1: len(filename)]
elif filetype == 'file':
- fileuri = domain_files + filename[1: len(filename)]
+ fileuri = db.domain_files + filename[1: len(filename)]
elif filename.startswith('/'):
fileuri = tyto.post_dir + filename[1: len(filename)]
@@ -528,11 +528,11 @@ def check_file_uri(filetype, filename, ln):
# Check if file exists
if not os.path.exists(fileuri):
- tyto.exiting("1", "Line %s, %s"%(ln, fileuri), False)
+ logs.out("1", "Line %s, %s"%(ln, fileuri), False)
post_err = True
return
- web_uri = '/' + fileuri.replace(domain_articles, "")
+ web_uri = '/' + fileuri.replace(db.domain_articles, "")
#===========================#
@@ -560,7 +560,7 @@ def check_content(post_bottom):
if line.startswith(tag[1]): c_closed += 1
if c_opened != c_closed:
- tyto.exiting("8", '%s: "%s", "%s"'%(tag[4], tag[0], tag[1]), False)
+ logs.out("8", '%s: "%s", "%s"'%(tag[4], tag[0], tag[1]), False)
post_err = True
return # Useless and could code errors to check nexts
else:
@@ -581,7 +581,7 @@ def check_content(post_bottom):
css_anchor = anchor.rsplit(':')[0]
tag = '%s %s'%(tyto.single_tags[1][0], css_anchor)
if not tag in post_bottom:
- tyto.exiting("6", 'anchor, %s'%tag, False)
+ logs.out("6", 'anchor, %s'%tag, False)
post_err = True
@@ -598,9 +598,10 @@ def check_content(post_bottom):
if not inlist: continue
if not line[0] in tyto.markers_lists:
- tyto.exiting("3", 'line %s must start with %s'%(
+ logs.out("3", 'line %s must start with %s'%(
ln, markers_lists
- ), False)
+ ), False
+ )
post_err = True
@@ -621,7 +622,7 @@ def check_content(post_bottom):
set_tags = (ptag_set)
if match: continue
- else: tyto.exiting("10", "%s %s"%(htag, ptag_set), True)
+ else: logs.out("12", "%s %s"%(htag, ptag_set), True)
# Template Tags (warning for not paired symbols)
@@ -631,7 +632,7 @@ def check_content(post_bottom):
tpl2 = article_bottom.count(tag[1])
if tpl1 != tpl2:
- tyto.exiting("22", '"%s", "%s"'%(tag[0], tag[1]), False)
+ logs.out("22", '"%s", "%s"'%(tag[0], tag[1]), False)
@@ -639,25 +640,24 @@ def check_content(post_bottom):
# Create new article's database at each check ! #
#-----------------------------------------------#
def create_database():
- # No first / from dir post
- web_uri = tyto.web_uri[1: len(tyto.web_uri)]
- # No need index.html for web link
- if tyto.web_uri.endswith('index.html'): tyto.web_uri = '/'
-
database = '# Post Configuration for Tyto\n' + \
- 'post_id = "%s"\n'%tyto.uri_id + \
- 'root_uri = "%s"\n'%tyto.uri_root + \
- 'wip_uri = "%s%s"\n'%(srv_wip, web_uri) + \
- 'www_uri = "%s%s"\n'%(srv_www, web_uri) + \
- 'http_uri = "%s"\n'%tyto.web_uri + \
- 'sub_uri = "%s"\n'%sub_uri + \
+ 'post_id = "%s"\n'%tyto.uri_id + \
+ 'post_src = "%s"\n'%tyto.uti_file + \
+ 'post_wip = "%s"\n'%tyto.srv_post_wip_uri + \
+ 'post_www = "%s"\n'%tyto.srv_post_www_uri + \
'\n' + \
- 'date_chk = "%s"\n'%tyto.nowdate() + \
- 'hash_chk = "%s"\n'%tyto.hash_post + \
- 'date_wip = "%s"\n'%date_wip + \
- 'hash_wip = "%s"\n'%hash_wip + \
- 'date_www = "%s"\n'%date_www + \
- 'hash_www = "%s"\n'%hash_www + \
+ 'short_src = "%s"\n'%tyto.src_post_short_uri + \
+ 'short_srv = "%s"\n'%tyto.srv_post_short_uri + \
+ 'sub_uri = "%s"\n'%tyto.sub_uri + \
+ 'http_wip = "%s"\n'%tyto.http_wip + \
+ 'http_www = "%s"\n'%tyto.http_www + \
+ '\n' + \
+ 'date_chk = "%s"\n'%tyto.nowdate() + \
+ 'hash_chk = "%s"\n'%tyto.hash_post + \
+ 'date_wip = "%s"\n'%date_wip + \
+ 'hash_wip = "%s"\n'%hash_wip + \
+ 'date_www = "%s"\n'%date_www + \
+ 'hash_www = "%s"\n'%hash_www + \
'\n# Post configuration from needed tags\n' + \
'title = "%s"\n'%title + \
'about = "%s"\n'%about + \
@@ -665,6 +665,8 @@ def create_database():
'tags = "%s"\n'%tags + \
'date = %s\n'%str(date) + \
'snpic = "%s"\n'%snpic_url + \
+ '\n# Used files\n' + \
+ 'uris = (%s)\n'%files_post + \
'\n# Post configuration from optional tags'
if stat_abbrs > 0:
@@ -698,31 +700,31 @@ def create_database():
)
db_stats = '\n# Statistics from optional tags\n' + \
- 'uniq_anchors = %s\n'%(int(stat_ancs)) + \
- 'uniq_abbrs = %s\n'%(int(stat_abbrs)) + \
- 'uniq_links = %s\n'%(int(stat_links)) + \
- 'uniq_images = %s\n'%(int(stat_images)) + \
- 'uniq_files = %s\n'%(int(stat_files)) + \
- 'uniq_raws = %s\n'%(int(stat_raws)) + \
+ 'uniq_anchors = %d\n'%stat_ancs + \
+ 'uniq_abbrs = %d\n'%stat_abbrs + \
+ 'uniq_links = %d\n'%stat_links + \
+ 'uniq_images = %d\n'%stat_images + \
+ 'uniq_files = %d\n'%stat_files + \
+ 'uniq_raws = %d\n'%stat_raws + \
'\n# Statistics from post content\n' + \
- 'stat_tags = %s\n'%(int(post_tags)) + \
- 'stat_words = %s\n'%(int(post_words)) + \
- 'stat_titles = %s\n'%(int(tyto.nbr_titles)) + \
- 'stat_paragraphs = %s\n'%(int(post_paragraphs)) + \
- 'stat_anchors = %s\n'%(int(post_anchors)) + \
- 'stat_strongs = %s\n'%(int(post_strongs)) + \
- 'stat_bolds = %s\n'%(int(post_bolds)) + \
- 'stat_emphasis = %s\n'%(int(post_emphasis)) + \
- 'stat_italics = %s\n'%(int(post_italics)) + \
- 'stat_dels = %s\n'%(int(post_dels)) + \
- 'stat_underlines = %s\n'%(int(post_underlines)) + \
- 'stat_cites = %s\n'%(int(post_cites)) + \
- 'stat_customs = %s\n'%(int(post_customs)) + \
- 'stat_icodes = %s\n'%(int(tyto.nbr_icodes)) + \
- 'stat_bcodes = %s\n'%(int(tyto.nbr_bcodes)) + \
- 'stat_quotes = %s\n'%(int(tyto.nbr_quotes)) + \
- 'stat_lists = %s\n'%(int(post_lists))
+ 'stat_tags = %d\n'%post_tags + \
+ 'stat_words = %d\n'%post_words + \
+ 'stat_titles = %d\n'%tyto.nbr_titles + \
+ 'stat_paragraphs = %d\n'%post_paragraphs + \
+ 'stat_anchors = %d\n'%post_anchors + \
+ 'stat_strongs = %d\n'%post_strongs + \
+ 'stat_bolds = %d\n'%post_bolds + \
+ 'stat_emphasis = %d\n'%post_emphasis + \
+ 'stat_italics = %d\n'%post_italics + \
+ 'stat_dels = %d\n'%post_dels + \
+ 'stat_underlines = %d\n'%post_underlines + \
+ 'stat_cites = %d\n'%post_cites + \
+ 'stat_customs = %d\n'%post_customs + \
+ 'stat_icodes = %d\n'%tyto.nbr_icodes + \
+ 'stat_bcodes = %d\n'%tyto.nbr_bcodes + \
+ 'stat_quotes = %d\n'%tyto.nbr_quotes + \
+ 'stat_lists = %d\n'%post_lists
database = '%s\n%s'%(database, db_stats)
tyto.set_file(tyto.post_db, 'new', database)
- tyto.exiting("21", '', True)
+ logs.out("21", '', True)
diff --git a/src/var/lib/tyto/program/db.py b/src/var/lib/tyto/program/db.py
new file mode 100644
index 0000000..b76d832
--- /dev/null
+++ b/src/var/lib/tyto/program/db.py
@@ -0,0 +1,139 @@
+#!/usr/bin/env python3
+# Name: Tyto - Littérateur
+# Type: DBs tools
+# Description: Search DBs and exec
+# file: db.py
+# Folder: /var/lib/tyto/program/
+# By echolib (XMPP: im@echolib.re)
+# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
+
+#------------
+# funny stats
+#------------
+# lines:
+# functions:
+# comments:
+#----------------------------------------------------------------------
+
+#**********************************************************************
+
+import os, sys
+import args, logs
+
+# Settings
+#---------
+domain_active = False
+home_dir = os.path.expanduser('~')
+try:
+ in_dir = os.getcwd()
+except:
+ logs.out("13", '', False)
+
+domain_conf = in_dir
+incomplete_domain = False
+
+# Settings for domain, check if db is not corrupted
+domain_values = (
+ 'domain_dir',
+ 'domain_conf',
+ 'domain_articles',
+ 'domain_files',
+ 'domain_images',
+ 'domain_db',
+ 'html_db',
+ 'navbars_dir',
+ 'navbar_load',
+ 'navbar_load_db',
+ 'sidebar_load',
+ 'sidebar_load_db',
+ 'metas_load',
+ 'metas_load_db',
+ 'footer_load',
+ 'footer_load_db',
+ 'domain_short',
+ 'domain_www_url',
+ 'domain_wip_url',
+ 'domain_title',
+ 'domain_about',
+ 'domain_lang',
+ 'domain_mail',
+ 'domain_tags',
+ 'domain_logo',
+ 'domain_license',
+ 'domain_licurl',
+ 'domain_css',
+ 'domain_sep',
+ 'domain_relme',
+ 'sidebar_title',
+ 'sidebar_items',
+ 'srv_root',
+ 'srv_domain',
+ 'srv_wip',
+ 'srv_wip_tpl',
+ 'srv_wip_images',
+ 'srv_wip_files',
+ 'srv_www',
+ 'srv_www_tpl',
+ 'srv_www_images',
+ 'srv_www_files',
+ 'wip_navbar',
+ 'wip_sidebar',
+ 'wip_metas',
+ 'wip_footer',
+ 'www_navbar',
+ 'www_sidebar',
+ 'www_metas',
+ 'www_footer',
+ 'domain_active',
+ )
+
+# If error in DB, continue process for these options
+domain_pass_args = ('New', 'Edit', 'Show', '')
+
+# Search and set domain conf file
+# from current directory or from argument
+#----------------------------------------
+if '/articles' in in_dir:
+ domain_conf = in_dir.rsplit('/articles')[0]
+else:
+ try:
+ args.target
+ if 'articles/' in args.arguments:
+ domain_conf = in_dir.rsplit('articles/')[0]
+ except:
+ domain_conf = in_dir
+
+conf_dir = domain_conf + "/"
+domain_conf = '%s/tyto_domain.conf'%domain_conf
+
+if os.path.exists(domain_conf): domain_exists = True
+else: domain_exists = False
+
+# Check if domain is set
+#-----------------------
+stdout = '%s %s domain "%s" in %s' # Show domain status
+
+if domain_exists:
+ exec(open(domain_conf).read())
+
+ for conf in domain_values:
+ try:
+ eval(str(conf))
+ except:
+ incomplete_domain = True
+ logs.out('10', conf, False)
+
+ # Stop process if error, continue if '-n'
+ if not args.option in domain_pass_args:
+ if incomplete_domain:
+ sys.exit(1)
+
+ try: domain_active
+ except: domain_active = False
+
+ if incomplete_domain: logs.out("41", domain_short, False)
+ elif domain_active: logs.out("42", domain_short, False)
+ else: logs.out("40", domain_short, False)
+else:
+ logs.out("43", domain_conf, False)
+
diff --git a/src/var/lib/tyto/program/domain.py b/src/var/lib/tyto/program/domain.py
index 6d0023f..7d4ca55 100644
--- a/src/var/lib/tyto/program/domain.py
+++ b/src/var/lib/tyto/program/domain.py
@@ -17,33 +17,38 @@
#**********************************************************************
-import os, locale
-
-import tyto, html
+import os, sys, locale
+import logs, db, tyto, html
#==========================#
# Manage Argument 'domain' #
#--------------------------#
def manage_domain(target, option):
if option == 'Edit':
- if tyto.domain_exists:
- print(":D Edit domain configuration file:", tyto.domain_conf)
- tyto.edit_file(tyto.domain_conf)
+ if db.domain_exists:
+ print(":D Edit domain configuration file:", db.domain_conf)
+ tyto.edit_file(db.domain_conf)
+ else:
+ sys.exit(1)
elif option == 'New':
- if not tyto.domain_exists:
+ if not db.domain_exists:
create_domain(target, option)
else:
- print(':) A domain exists in this directory')
- ask = input('-> Edit it with the form ? ')
- if ask in ['y', 'Y']: create_domain(target, option)
- else: tyto.exiting("255", '', True)
+ if not db.incomplete_domain:
+ ask = input(' ├ Edit the domain configuration with the form ? ')
+ if ask in ['y', 'Y']: create_domain(target, option)
+ else: logs.out("255", '', True)
+ else:
+ create_domain(target, option)
- elif option == 'DB' or option == 'Show':
- if tyto.domain_exists:
- domain_db = open(tyto.domain_conf).read()
+ elif option == 'Show':
+ if db.domain_exists:
+ domain_db = open(db.domain_conf).read()
for line in domain_db.rsplit('\n'):
print(line)
+ else:
+ sys.exit(1)
#=====================#
@@ -51,10 +56,9 @@ def manage_domain(target, option):
#---------------------#
def isurl(target):
global url
- if target.startswith('http'):
- url = target
- else:
- tyto.exiting("2", target, True)
+ if target.startswith('http'): url = target
+ else: logs.out("2", target, True)
+
#=====================#
# Create a new domain #
@@ -75,322 +79,330 @@ def create_domain(target, option):
# Get complete URL from target or ask
#------------------------------------
- try: domain_url = tyto.domain_url
- except: domain_url = ''
+ try:
+ domain_www_url = db.domain_www_url
+ except:
+ if target: domain_www_url = target
+ else: domain_www_url = ''
+ valid_url = ('http://', 'https://')
ask = ''
- ask = input(' ├ [HTTP...] URL to website ? ("%s") '%domain_url)
+ ask = input(' ├ [http(s)://...] URL to website ? ("%s") '%domain_www_url)
if ask:
+ if not ask.startswith(valid_url):
+ logs.out("2", 'http(s)://...', True)
isurl(ask)
- domain_url = url
- elif not domain_url:
- tyto.exiting("255", '', True)
+ domain_www_url = url
+ elif not domain_www_url:
+ logs.out("255", '', True)
+
+ domain_short = domain_www_url.rsplit('://')[1]
- domain_short = domain_url.rsplit('://')[1]
# Prefix wip
#-----------
try:
- try_wipurl = target.rsplit('.')
- try_wipurl = 'https://www-wip.%s.%s'%(try_wipurl[1], try_wipurl[2])
+ try_wip_url = target.rsplit('.')
+ try_wip_url = 'https://www-wip.%s.%s'%(
+ try_wip_url[1], try_wip_url[2]
+ )
except:
- try_wipurl = 'https://www-wip.%s'%target
+ try_wip_url = 'https://www-wip.%s'%domain_short
- try: domain_wipurl = tyto.domain_wipurl
- except: domain_wipurl = try_wipurl
+ try: domain_wip_url = db.domain_wip_url
+ except: domain_wip_url = try_wip_url
ask = ''
- ask = input(' ├ URL to wip ? ("%s") '%domain_wipurl)
+ ask = input(' ├ URL to wip ? ("%s") '%domain_wip_url)
if ask:
isurl(ask)
- domain_wipurl = ask
+ domain_wip_url = ask
-
- db_dir = '%s/.local/tyto/%s/'%(tyto.home_dir, domain_short)
- navbars_conf= '%sarticles/_configs/'%tyto.conf_dir
- conf_domain = 'domain_dir = "%s"\n'%tyto.conf_dir + \
- 'domain_conf = "%s"\n'%tyto.domain_conf + \
- 'domain_articles = "%sarticles/"\n'%tyto.conf_dir + \
- 'domain_files = "%sarticles/files/"\n'%tyto.conf_dir + \
- 'domain_images = "%sarticles/images/"\n'%tyto.conf_dir + \
- 'domain_db = "%sarticles/"\n'%(db_dir) + \
- 'html_db = "%shtml/"\n'%(db_dir) + \
- 'navbars_dir = "%s"\n'%navbars_conf + \
- 'navbar_load = "%styto.navbar"\n'%navbars_conf + \
- 'sidebar_load = "%styto.sidebar"\n'%navbars_conf + \
- 'metas_load = "%styto.metas.html"\n'%navbars_conf + \
- 'footer_load = "%styto.footer.html"\n'%navbars_conf + \
- '\ndomain_short = "%s"\n'%domain_short + \
- 'domain_url = "%s"\n'%domain_url + \
- 'domain_wipurl = "%s"\n'%domain_wipurl
+ global navbars_conf
+ db_dir = '%s/.local/tyto/%s/'%(db.home_dir, domain_short)
+ db_dir_html = '%shtml/'%db_dir
+ navbars_conf = '%sarticles/_configs/'%db.conf_dir
+ conf_domain = \
+ 'domain_dir = "%s"\n'%db.conf_dir + \
+ 'domain_conf = "%s"\n'%db.domain_conf + \
+ 'domain_articles = "%sarticles/"\n'%db.conf_dir + \
+ 'domain_files = "%sarticles/files/"\n'%db.conf_dir + \
+ 'domain_images = "%sarticles/images/"\n'%db.conf_dir + \
+ 'domain_db = "%sarticles/"\n'%db_dir + \
+ 'html_db = "%s"\n'%db_dir_html + \
+ 'navbars_dir = "%s"\n'%navbars_conf + \
+ 'navbar_load = "%styto.navbar"\n'%navbars_conf + \
+ 'navbar_load_db = "%snavbar_load.conf"\n'%db_dir_html + \
+ 'sidebar_load = "%styto.sidebar"\n'%navbars_conf + \
+ 'sidebar_load_db = "%ssidebar_load.conf"\n'%db_dir_html + \
+ 'metas_load = "%styto.metas.html"\n'%navbars_conf + \
+ 'metas_load_db = "%smetas_load.conf"\n'%db_dir_html + \
+ 'footer_load = "%styto.footer.html"\n'%navbars_conf + \
+ 'footer_load_db = "%sfooter_load.conf"\n'%db_dir_html + \
+ '\ndomain_short = "%s"\n'%domain_short + \
+ 'domain_www_url = "%s"\n'%domain_www_url + \
+ 'domain_wip_url = "%s"\n'%domain_wip_url
- tyto.set_file(tyto.domain_conf, True, conf_domain)
+ tyto.set_file(db.domain_conf, True, conf_domain)
+
+
+ # Get srv root
+ #-------------
+ try: domain_srv = db.domain_srv
+ except: domain_srv = '/var/www'
+
+ ask = ''
+ ask = input(' ├ System server ? ("%s") '%domain_srv)
+ if ask:
+ if not os.path.exists(srv): logs.out("1", ask, True)
+ elif not domain_srv: logs.out("255", '', True)
+
+ root_srv_dom = '%s/%s'%(domain_srv, domain_short)
+ srv_wip_tpl = "%s/wip/template/"%root_srv_dom
+ srv_www_tpl = "%s/www/template/"%root_srv_dom
+ srvs = '# Servers directories\n' + \
+ 'srv_root = "%s/"\n'%domain_srv + \
+ 'srv_domain = "%s/"\n'%root_srv_dom + \
+ 'srv_wip = "%s/wip/"\n'%root_srv_dom + \
+ 'srv_wip_tpl = "%s"\n'%srv_wip_tpl + \
+ 'srv_wip_images = "%s/wip/images/"\n'%root_srv_dom + \
+ 'srv_wip_files = "%s/wip/files/"\n'%root_srv_dom + \
+ 'srv_www = "%s/www/"\n'%root_srv_dom + \
+ 'srv_www_tpl = "%s"\n'%srv_www_tpl + \
+ 'srv_www_images = "%s/www/images/"\n'%root_srv_dom + \
+ 'srv_www_files = "%s/www/files/"\n'%root_srv_dom + \
+ '\n' + \
+ '# Servers files\n' + \
+ 'wip_navbar = "%snavbar.html"\n'%srv_wip_tpl + \
+ 'wip_sidebar = "%ssidebar.html"\n'%srv_wip_tpl + \
+ 'wip_metas = "%smetas.html"\n'%srv_wip_tpl + \
+ 'wip_footer = "%sfooter.html"\n'%srv_wip_tpl + \
+ 'www_navbar = "%snavbar.html"\n'%srv_www_tpl + \
+ 'www_sidebar = "%ssidebar.html"\n'%srv_www_tpl + \
+ 'www_metas = "%smetas.html"\n'%srv_www_tpl + \
+ 'www_footer = "%sfooter.html"\n'%srv_www_tpl
+ tyto.set_file(db.domain_conf, False, srvs)
# Get title domain
#-----------------
- try: domain_title = tyto.domain_title
+ try: domain_title = db.domain_title
except: domain_title = ''
ask = ''
ask = input(' ├ Domain title ? ("%s") '%domain_title)
if ask: domain_title = ask
- elif not domain_title: tyto.exit("255")
+ elif not domain_title: logs.out("255", '', True)
if '"' in domain_title:
domain_title = domain_title.replace('"', '')
- tyto.set_file(tyto.domain_conf, False,
- 'domain_title = "%s"'%domain_title)
+ tyto.set_file(db.domain_conf, False,
+ '# Domain user\'s settings\n' + \
+ 'domain_title = "%s"'%domain_title
+ )
# Get Description domain
#-----------------------
- try: domain_about = tyto.domain_about
+ try: domain_about = db.domain_about
except: domain_about = ''
ask = ''
ask = input(' ├ Domain Description ? ("%s") '%domain_about)
if ask: domain_about = ask
- elif not domain_about: tyto.exit("255")
+ elif not domain_about: logs.out("255", '', True)
if '"' in domain_about:
domain_about = domain_about.replace('"', '')
- tyto.set_file(tyto.domain_conf, False,
- 'domain_about = "%s"'%domain_about)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_about = "%s"'%domain_about
+ )
# Get Lang domain
#----------------
- try: domain_lang = tyto.domain_lang
+ try: domain_lang = db.domain_lang
except: domain_lang = locale.getdefaultlocale()[0].split('_')[0]
ask = ''
ask = input(' ├ [2 characters] Website language ? ("%s") '%domain_lang)
if ask:
if len(ask) == 2: domain_lang = ask
- else: tyto.exiting("3", ask, True)
- elif not domain_lang: tyto.exiting("255", '', True)
+ else: logs.out("3", ask, True)
+ elif not domain_lang: logs.out("255", '', True)
- tyto.set_file(tyto.domain_conf, False,
- 'domain_lang = "%s"'%domain_lang)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_lang = "%s"'%domain_lang
+ )
# Get mail domain
#----------------
- try: domain_mail = tyto.domain_mail
+ try: domain_mail = db.domain_mail
except: domain_mail = ''
ask = ''
ask = input(' ├ Webmaster\'s mail ? ("%s") '%domain_mail)
if ask:
- if not "@" in ask and not "." in ask: tyto.exiting("3", ask, True)
+ if not "@" in ask and not "." in ask: logs.out("3", ask, True)
domain_mail = ask
- elif not domain_mail: tyto.exiting("255", '', True)
+ elif not domain_mail: logs.out("255", '', True)
- tyto.set_file(tyto.domain_conf, False,
- 'domain_mail = "%s"'%domain_mail)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_mail = "%s"'%domain_mail
+ )
# Get Tags domain
#----------------
- try: domain_tags = tyto.domain_tags
+ try: domain_tags = db.domain_tags
except: domain_tags = ''
ask = ''
ask = input(' ├ [comma separated] Domain tags ? ("%s") '%domain_tags)
if ask: domain_tags = ask
- elif not domain_tags: tyto.exiting("255", '', True)
+ elif not domain_tags: logs.out("255", '', True)
- tyto.set_file(tyto.domain_conf, False,
- 'domain_tags = "%s"'%domain_tags)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_tags = "%s"'%domain_tags
+ )
# Get logo's website
#-------------------
- try: domain_logo = tyto.domain_logo
+ try: domain_logo = db.domain_logo
except: domain_logo = 'logo.png'
ask = ''
ask = input(' ├ logo filename ? ("%s") '%domain_logo)
- tyto.set_file(tyto.domain_conf, False,
- 'domain_logo = "%s"'%domain_logo)
+ if ask: domain_logo = ask
+
+ tyto.set_file(db.domain_conf, False,
+ 'domain_logo = "%s"\n'%domain_logo + \
+ 'wip_logo = "%s%s"\n'%(srv_wip_tpl, domain_logo) + \
+ 'www_logo = "%s%s"\n'%(srv_www_tpl, domain_logo)
+ )
# Get License domain
#-------------------
- try: domain_license = tyto.domain_license
+ try: domain_license = db.domain_license
except: domain_license = 'CC BY-NC-SA'
ask = ''
ask = input(' ├ Domain License ? ("%s") '%domain_license)
if ask: domain_license = ask
- elif not domain_license: tyto.exiting("255", '', True)
+ elif not domain_license: logs.out("255", '', True)
if '"' in domain_license:
domain_license = domain_license.replace('"', '')
- tyto.set_file(tyto.domain_conf, False,
- 'domain_license = "%s"'%domain_license)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_license = "%s"'%domain_license
+ )
# Get License URL (optionnal)
#----------------------------
- try: domain_licurl = tyto.domain_licurl
+ try: domain_licurl = db.domain_licurl
except: domain_licurl = ''
ask = ''
ask = input(' ├ Optional. License URL ? ("%s") '%domain_licurl)
if ask:
- if not ask.startswith('http'): tyto.exiting("3", ask, True)
+ if not ask.startswith('http'): logs.out("3", ask, True)
domain_licurl = ask
- tyto.set_file(tyto.domain_conf, False,
- 'domain_licurl = "%s"'%domain_licurl)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_licurl = "%s"'%domain_licurl
+ )
# CSS Prefix
#-----------
- try: domain_css = tyto.domain_css
+ try: domain_css = db.domain_css
except: domain_css = 'tyto'
ask = ''
ask = input(' ├ [alnum] Prefix CSS ? ("%s") '%domain_css)
if ask:
- if not ask.isalnum(): tyto.exiting("3", ask, True)
+ if not ask.isalnum(): logs.out("3", ask, True)
domain_css = ask.lower()
- tyto.set_file(tyto.domain_conf, False,
- 'domain_css = "%s"'%domain_css)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_css = "%s"'%domain_css
+ )
# Titles webpage separator
#-------------------------
- try: domain_sep = tyto.domain_sep
+ try: domain_sep = db.domain_sep
except: domain_sep = "-"
ask = ''
ask = input(' ├ [1 character] Pages titles separator ? ("%s") '%domain_sep)
if ask:
- if not len(ask) == 1: tyto.exiting("3", ask, True)
+ if not len(ask) == 1: logs.out("3", ask, True)
domain_sep = ask
- tyto.set_file(tyto.domain_conf, False,
- 'domain_sep = "%s"'%domain_sep)
+ tyto.set_file(db.domain_conf, False,
+ 'domain_sep = "%s"'%domain_sep
+ )
# Profile for rel="me" (optionnal)
#---------------------------------
- try: domain_relme = tyto.domain_relme
+ try: domain_relme = db.domain_relme
except: domain_relme = ''
ask = ''
ask = input(' ├ Optional. Profile URL ? ("%s") '%domain_relme)
if ask:
- if not ask.startswith('http'): tyto.exiting("3", ask, True)
+ if not ask.startswith('http'): logs.out("3", ask, True)
domain_relme = ask
- tyto.set_file(tyto.domain_conf, False,
- 'domain_relme = "%s"'%domain_relme)
-
-
- # Activate menu bar from tyto.navbar ?
- #-------------------------------------
- try: domain_menubar = tyto.domain_menubar
- except: domain_menubar = 'False'
-
- ask = ''
- ask = input(' ├ Create menu bar from tyto.navbar file ? (%s) '%(
- domain_menubar
- )
- )
-
- if ask in ['y', 'Y']: domain_menubar = 'True'
- else: domain_menubar = domain_menubar
-
- tyto.set_file(tyto.domain_conf, False,
- 'domain_menubar = %s'%(domain_menubar))
-
-
- # Activate side bar from tyto.sidebar ?
- #--------------------------------------
- try: domain_sidebar = tyto.domain_sidebar
- except: domain_sidebar = 'False'
-
- ask = ''
- ask = input(' ├ Create article\'s list from tyto.sidebar file ? (%s) '%(
- domain_sidebar
- )
- )
-
- if ask in ['y', 'Y']: domain_sidebar = 'True'
- else: domain_sidebar = domain_sidebar
-
- tyto.set_file(tyto.domain_conf, False,
- 'domain_sidebar = %s'%(domain_sidebar))
+ tyto.set_file(db.domain_conf, False,
+ 'domain_relme = "%s"'%domain_relme
+ )
# Sidebar Title
#--------------
- try: sidebar_title = tyto.sidebar_title
+ try: sidebar_title = db.sidebar_title
except: sidebar_title = tyto.trans[0][tyto.n]
-
- if domain_sidebar:
- ask = ''
- ask = input(' ├ Sidebar title ? ("%s") '%sidebar_title)
- if ask: sidebar_title = ask
- if '"' in sidebar_title:
- sidebar_title = sidebar_title.replace('"', '')
- tyto.set_file(tyto.domain_conf, False,
- 'sidebar_title = "%s"'%(sidebar_title))
+ ask = ''
+ ask = input(' ├ Sidebar title ? ("%s") '%sidebar_title)
+ if ask: sidebar_title = ask
+ if '"' in sidebar_title:
+ sidebar_title = sidebar_title.replace('"', '')
+
+ tyto.set_file(db.domain_conf, False,
+ 'sidebar_title = "%s"'%(sidebar_title)
+ )
# Sidebar Items
#--------------
- try: sidebar_items = tyto.sidebar_items
+ try: sidebar_items = db.sidebar_items
except: sidebar_items = "6"
- if domain_sidebar:
- ask = ''
- ask = input(' ├ [max=16] Sidebar Items ? ("%s") '%sidebar_items)
- if ask:
- if not ask.isdigit(): tyto.exiting("3", ask, True)
- elif int(ask) in range(1,17): sidebar_items = int(ask)
-
- tyto.set_file(tyto.domain_conf, False,
- 'sidebar_items = %s'%(sidebar_items))
-
-
- # Get srv root
- #-------------
- try: domain_srv = tyto.domain_srv
- except: domain_srv = '/var/www'
-
ask = ''
- ask = input(' ├ System server ? ("%s") '%domain_srv)
+ ask = input(' ├ [max=16] Sidebar Items ? ("%s") '%sidebar_items)
if ask:
- if not os.path.exists(srv): tyto.exiting("1", ask, True)
- elif not domain_srv: tyto.exiting("255", '', True)
+ if not ask.isdigit(): logs.out("3", ask, True)
+ elif int(ask) in range(1,17): sidebar_items = int(ask)
- root_srv_dom = '%s/%s'%(domain_srv, domain_short)
- srvs = '\nsrv_root = "%s/"\n'%domain_srv + \
- 'srv_domain = "%s/"\n'%root_srv_dom + \
- 'srv_wip = "%s/wip/"\n'%root_srv_dom + \
- 'srv_wip_tpl = "%s/wip/template/"\n'%root_srv_dom + \
- 'srv_wip_images = "%s/wip/images/"\n'%root_srv_dom + \
- 'srv_wip_files = "%s/wip/files/"\n'%root_srv_dom + \
- 'srv_www = "%s/www/"\n'%root_srv_dom + \
- 'srv_www_tpl = "%s/www/template/"\n'%root_srv_dom + \
- 'srv_www_images = "%s/www/images/"\n'%root_srv_dom + \
- 'srv_www_files = "%s/www/files/"'%root_srv_dom
- tyto.set_file(tyto.domain_conf, False, srvs)
+ tyto.set_file(db.domain_conf, False,
+ 'sidebar_items = %s'%(sidebar_items)
+ )
# Activate Domain after Resumed configuration ?
#----------------------------------------------
- try: domain_active = tyto.domain_active
+ try: domain_active = db.domain_active
except: domain_active = False
- file = open(tyto.domain_conf, 'r').read()
+ file = open(db.domain_conf, 'r').read()
resume = ' │\n' + \
' ├──────────────────────────────────────┐\n' + \
' │ Please, READ the configuration datas │\n' + \
@@ -403,16 +415,15 @@ def create_domain(target, option):
ask = input(' ├ Activate and prepare domain ? ')
if not ask in ['y', 'Y']:
- tyto.set_file(tyto.domain_conf, False,
- '\ndomain_active = False')
- tyto.exiting("255", '', True)
+ tyto.set_file(db.domain_conf, False, '\ndomain_active = False')
+ logs.out("255", '', True)
# Activate Domain
#----------------
- tyto.set_file(tyto.domain_conf, False, '\ndomain_active = True')
+ tyto.set_file(db.domain_conf, False, '\ndomain_active = True')
# Load config
- exec(open(tyto.domain_conf).read(),globals())
+ exec(open(db.domain_conf).read(),globals())
# Create folders from configuration file
folders = (
@@ -434,9 +445,9 @@ def create_domain(target, option):
print(' │')
#create_sidebar(option)
html.manage_configs('sidebar', 'Force')
- html.manage_configs('navbar', 'Force')
- html.manage_configs('metas', 'Force')
- html.manage_configs('footer', 'Force')
+ html.manage_configs('navbar', 'Force')
+ html.manage_configs('metas', 'Force')
+ html.manage_configs('footer', 'Force')
print(' │')
print(' ├──────────────────────────────────────┐')
@@ -448,12 +459,45 @@ def create_domain(target, option):
# sidebar load file translated #
#------------------------------#
def create_sidebar(option):
- sidebar_load = tyto.sidebar_load
+ if not db.domain_active: return
+
+ # Create an empty html file if not exists
+ if not os.path.exists(db.wip_sidebar):
+ tyto.set_file(db.wip_sidebar, 'new', '')
+ print(' ├ Create file: %s'%db.wip_sidebar)
+
+ create_load = False # file in _configs
+ create_html = False # file in template/
+
+ # Get metas_load hash or create metas db file if not exists
+ #----------------------------------------------------------
+ if os.path.exists(db.sidebar_load):
+ html.create_db_load(db.sidebar_load, db.sidebar_load_db)
+
+ # Manage option
+ #--------------
+ if not os.path.exists(db.sidebar_load):
+ create_load = True
+ elif option == 'New':
+ create_load = True
+ elif option == 'Create':
+ create_html = True
+ elif option == 'Edit':
+ hash_load_old = tyto.get_filesum(db.sidebar_load, True)
+ tyto.edit_file(db.sidebar_load)
+ hash_load_new = tyto.get_filesum(db.sidebar_load, True)
+ if not hash_load_old == hash_load_new:
+ html.create_db_load(db.sidebar_load, db.sidebar_load_db)
+ create_html = True
+ elif option == 'Force':
+ create_load = True
+
+ # French sidebar_load content
sdb_load_fr = '# Pour : Tyto - Littérateur\n' + \
'# Type : fichier texte\n' + \
'# Description : Fichier appelé par "tyto sidebar"\n' + \
'# (Liste d\'articles)\n' + \
- '# Fichier : %s\n'%sidebar_load + \
+ '# Fichier : %s\n'%db.sidebar_load + \
'# Comment : 1 URI de l\'article par ligne\n' + \
'# (depuis articles/)\n' + \
'# Ne commence pas par "/"\n' + \
@@ -464,11 +508,12 @@ def create_sidebar(option):
'# dir1/index.tyto\n' + \
'# %s\n\n'%(15 * "-")
+ # English sidebar_load content
sdb_load_en = '# For: Tyto - Littérateur\n' + \
'# Type: Text file\n' + \
'# Description: file called with "tyto sidebar"\n' + \
'# (articles\'s list)\n' + \
- '# File: %s\n'%sidebar_load + \
+ '# File: %s\n'%db.sidebar_load + \
'# Comment: 1 article URI per line\n' + \
'# (from articles/)\n' + \
'# not begining with "/"\n' + \
@@ -479,31 +524,71 @@ def create_sidebar(option):
'# dir1/index.tyto\n' + \
'# %s\n\n'%(15 * "-")
+ # Set language file
if tyto.n == 0: sdb_load = sdb_load_fr
elif tyto.n == 1: sdb_load = sdb_load_en
- # Create new file, or ask if exists
- ask = ' ├ Use default (empty) _configs/tyto.sidebar file ? '
- log = ' ├ Create file: %s'%sidebar_load
-
- if os.path.exists(sidebar_load):
- res = input(ask)
- if not res in ['y', 'Y']: return
-
- tyto.set_file(sidebar_load, 'new', sdb_load)
- print(log)
+ # Create sidebar_load
+ if create_load:
+ # Create new file, or ask if exists
+ ask = ' ├ Use default (empty) sidebar configuration ? '
+ log = ' ├ Create file: %s'%db.sidebar_load
+ res = ''
+ if os.path.exists(db.sidebar_load):
+ res = input(ask)
+ if not res in ['y', 'Y']: return
+
+ tyto.set_file(db.sidebar_load, 'new', sdb_load)
+ print(log)
+ html.create_db_load(db.sidebar_load, db.sidebar_load_db)
+
+ # Create wip/template/sidebar.html
+ if create_html:
+ html.create_sidebar(db.wip_sidebar)
#=============================#
# navbar load file translated #
#-----------------------------#
def create_navbar(option):
- navbar_load = tyto.navbar_load
+ if not db.domain_active: return
+
+ # Create an empty html file if not exists
+ if not os.path.exists(db.wip_navbar):
+ tyto.set_file(db.wip_navbar, 'new', '')
+ print(' ├ Create file: %s'%db.wip_navbar)
+
+ create_load = False # file in _configs
+ create_html = False # file in template/
+
+ # Get metas_load hash or create metas db file if not exists
+ #----------------------------------------------------------
+ if os.path.exists(db.navbar_load):
+ html.create_db_load(db.navbar_load, db.navbar_load_db)
+
+ # Manage option
+ #--------------
+ if not os.path.exists(db.navbar_load):
+ create_load = True
+ elif option == 'New':
+ create_load = True
+ elif option == 'Create':
+ create_html = True
+ elif option == 'Edit':
+ hash_load_old = tyto.get_filesum(db.navbar_load, True)
+ tyto.edit_file(db.navbar_load)
+ hash_load_new = tyto.get_filesum(db.navbar_load, True)
+ if not hash_load_old == hash_load_new:
+ html.create_db_load(db.navbar_load, db.navbar_load_db)
+ create_html = True
+ elif option == 'Force':
+ create_load = True
+
nav_load_fr = '# Pour : Tyto - Littérateur\n' + \
'# Type : fichier texte\n' + \
'# Description : Fichier utilisé par "tyto wip"\n' + \
'# (Liste des catégories)\n' + \
- '# Fichier : %s\n'%navbar_load + \
+ '# Fichier : %s\n'%db.navbar_load + \
'# Comment : 1 nom de dossier par ligne *1\n' + \
'# (depuis articles/)\n' + \
'# Ne commence pas par "/"\n' + \
@@ -524,7 +609,7 @@ def create_navbar(option):
'# Type: Text file\n' + \
'# Description: file used with "tyto wip"\n' + \
'# (categories\'s list)\n' + \
- '# File : %s\n'%navbar_load + \
+ '# File : %s\n'%db.navbar_load + \
'# Comment: 1 folder name per line *1\n' + \
'# (from articles/)\n' + \
'# not begining with "/"\n' + \
@@ -541,16 +626,24 @@ def create_navbar(option):
'# about # infos about this website\n' + \
'# %s\n\n'%(15 * "-")
- if tyto.n == 0: nav_load = nav_load_fr
- elif tyto.n == 1: nav_load = nav_load_en
+ # Set language file
+ if tyto.n == 0: nvb_load = nav_load_fr
+ elif tyto.n == 1: nvb_load = nav_load_en
- # Create new file, or ask if exists
- ask = ' ├ Use default (empty) _configs/tyto.navbar file ? '
- log = ' ├ Create file: %s'%navbar_load
-
- if os.path.exists(navbar_load):
- res = input(ask)
- if not res in ['y', 'Y']: return
-
- tyto.set_file(navbar_load, 'new', nav_load)
- print(log)
+ # Create sidebar_load
+ if create_load:
+ # Create new file, or ask if exists
+ ask = ' ├ Use default (empty) navbar configuration ? '
+ log = ' ├ Create file: %s'%db.navbar_load
+ res = ''
+ if os.path.exists(db.navbar_load):
+ res = input(ask)
+ if not res in ['y', 'Y']: return
+
+ tyto.set_file(db.navbar_load, 'new', nvb_load)
+ print(log)
+ html.create_db_load(db.navbar_load, db.navbar_load_db)
+
+ # Create wip/template/sidebar.html
+ if create_html:
+ html.create_navbar(db.wip_navbar)
diff --git a/src/var/lib/tyto/program/html.py b/src/var/lib/tyto/program/html.py
index a193600..0afdf0c 100644
--- a/src/var/lib/tyto/program/html.py
+++ b/src/var/lib/tyto/program/html.py
@@ -16,23 +16,9 @@
#----------------------------------------------------------------------
#**********************************************************************
+
import os, sys
-
-import tyto, domain
-
-# Load domain configuration DB
-exec(open(tyto.domain_conf).read())
-
-Tyto = 'Tyto - Littérateur'
-Tytogit = 'https://git.a-lec.org/echolib/tyto-litterateur'
-Tytogti = 'Dépôt officiel du code source de Tyto - Littérateur'
-Tytoweb = 'https://tyto.echolib.re'
-Tytowti = 'Site web officiel du logiciel Tyto - Littérateur'
-Tytosrc = '(Code source)'
-
-navbar_file = '%snavbar.html'%srv_wip_tpl
+import logs, db, tyto, domain
#==================================#
@@ -40,16 +26,17 @@ navbar_file = '%snavbar.html'%srv_wip_tpl
# (sidebar, metas, footer, navbar) #
#----------------------------------#
def manage_configs(target, option):
-
+ # Arguments
args1 = ('metas', 'sidebar', 'footer', 'navbar')
- args2 = ('-n', '-e', '-F', )
- opts = ('New', 'Edit', 'Force')
+ args2 = ('-n', '-e', '-F', '-c')
+ opts = ('New', 'Edit', 'Force', 'Create')
+ # Check arguments (from form domain)
if target in args1: sys.argv[1] = target
elif target and not option: option = target
- if not sys.argv[1] in args1: tyto.exiting('11', '%s'%str(args1), True)
+ if not sys.argv[1] in args1: logs.out('11', '%s'%str(args1), True)
if not option in opts and not option == '-i' and not option in args2:
- tyto.exiting('11', '%s'%str(args2), True)
+ logs.out('11', '%s'%str(args2), True)
actions = {
'sidebar' : domain.create_sidebar,
@@ -69,7 +56,7 @@ def set_page(post_db, target, article_bottom):
exec(open(post_db).read(),globals())
create_metas_page() # Include metas tags
- create_main_page(target, article_bottom) # At last, create main page
+ create_main_page(target, article_bottom) # Create main page
#============================================#
@@ -82,22 +69,24 @@ def create_metas_page():
#-------------------
metas_page = ''
scale = 'width=device-width, initial-scale=1.0'
- all_tags = domain_tags + ',' + tags
- post_url = domain_url + http_uri
+ all_tags = db.domain_tags + ',' + tags
css_file = 'template/style.css'
- css_ref = 'media="screen" href="%s%s" />'%(sub_uri, css_file)
+ css_ref = 'media="screen" href="%s%s"'%(sub_uri, css_file)
rss_file = 'rss.xml'
rss_ref = 'type="application/rss+xml" ' + \
'href="%s%s" title="RSS 2.0. %s %s %s'%(
- sub_uri, rss_file, domain_title, domain_sep, domain_short
+ sub_uri, rss_file,
+ db.domain_title, db.domain_sep, db.domain_short
)
icon_file = 'favicon.png'
- icon_ref = 'type="image/png" href="%stemplate/%s"'%(sub_uri, icon_file)
+ icon_ref = 'type="image/png" href="%stemplate/%s"'%(
+ sub_uri, icon_file
+ )
en_date = tyto.set_en_date(date[0])
relme = '' # External URL in metas (if exists in config domain)
- if domain_relme:
+ if db.domain_relme:
relme = '\n '%(
- domain_relme
+ db.domain_relme
)
# Set all raw HTML metas
@@ -106,29 +95,29 @@ def create_metas_page():
metas = \
' \n' + \
' \n'%scale + \
- ' \n'%domain_url + \
- ' \n'%domain_lang + \
- ' \n'%domain_mail + \
- ' \n'%domain_license + \
- ' \n'%Tyto + \
+ ' \n'%db.domain_www_url + \
+ ' \n'%db.domain_lang + \
+ ' \n'%db.domain_mail + \
+ ' \n'%db.domain_license + \
+ ' \n'%tyto.Tyto + \
' \n'%title + \
' \n'%author + \
' \n'%about + \
' \n'%all_tags + \
' \n'%en_date + \
- ' \n'%post_url + \
+ ' \n'%http_www + \
' \n'%(rss_ref) + \
- ' '%icon_ref + \
+ ' \n'%css_ref + \
+ ' \n'%icon_ref + \
' \n' + \
- ' \n'%domain_title + \
+ ' \n'%db.domain_title + \
' \n'%title + \
' \n' + \
- ' \n'%post_url + \
+ ' \n'%http_www + \
' \n'%about + \
' \n'%snpic + \
'%s'%relme + \
- '\n\n' + \
+ '\n' + \
' %s'%title
@@ -138,38 +127,33 @@ def create_metas_page():
def create_main_page(target, article_bottom):
global main_page
- # Check needed footer.html
- footer_file = '%sfooter.html'%srv_wip_tpl
- if not os.path.exists(footer_file):
- tyto.exiting("1", footer_file, True)
+ if not os.path.exists(db.wip_footer):
+ logs.out("1", db.wip_footer, True)
- # Check optional metas.html
- metas_file = '%smetas.html'%srv_wip_tpl
- if not os.path.exists(metas_file):
- tyto.exiting("24", '(user metas tags): '%metas_file, True)
+ if not os.path.exists(db.wip_metas):
+ logs.out("24", '(HTML metas): %s'%db.wip_metas, False)
- # Check for menu bar
- create_navbar('-n', navbars_dir)
-
# Create link for website's logo
#-------------------------------
logo_html = '\n'%(11 * " ") + \
- '%s\n'%(15 * " ", domain_title) + \
- '%sid="site_logo_image">\n'%(15 * " ") + \
+ '%s\n'%(15 * " ") + \
'%s'%(8 * " ")
-
-
+
+ # Create author and date publish section infos
+ create_html_infos_section('wip')
+
#-----------------------#
# Create main HTML Page #
#-----------------------#
main_page = \
'\n' + \
- '\n'%domain_lang + \
+ '\n'%db.domain_lang + \
' \n' + \
'%s\n'%metas + \
' \n\n' + \
@@ -183,48 +167,215 @@ def create_main_page(target, article_bottom):
' \n' + \
- ' %s
\n'%domain_title + \
+ ' %s
\n'%db.domain_title + \
' \n' + \
- ' %s
\n'%domain_about + \
+ ' %s
\n'%db.domain_about + \
' \n' + \
'\n' + \
' \n' + \
'\n' + \
' \n' + \
+ ' \n' + \
+ '%s\n'%html_infos + \
+ ' \n' + \
'%s\n'%article_bottom + \
' \n' + \
'\n' + \
+ '\n' + \
'\n' + \
' \n' + \
''
+#============================================#
+# Create HTML line for article infos section #
+# when wip, and publish #
+#--------------------------------------------#
+def create_html_infos_section(process):
+ global html_infos
+
+ if process == 'wip':
+ date_raw = date_wip #
'
+
+
+#========================================================#
+# Create DB file with hash from [type]_load file content #
+#--------------------------------------------------------#
+def create_db_load(file_load, file_db):
+ hash_load = tyto.get_filesum(file_load, True)
+ if not os.path.exists(file_db):
+ tyto.set_file(file_db,
+ 'New',
+ 'file_load_hash = "%s"'%hash_load
+ )
+ return
+
+ global file_load_hash
+ file_load_hash = ''
+ exec(open(file_db, 'r').read(), globals())
+ if not file_load_hash == hash_load:
+ tyto.set_file(file_db,
+ 'New',
+ 'file_load_hash = "%s"'%hash_load
+ )
+
+
+#============================================#
+# Create HTML sidebar from file tyto.sidebar #
+#--------------------------------------------#
+def create_sidebar(target):
+ if not db.domain_exists: return
+
+ # If content in sidebar, go True
+ sidebar_new = False
+ sidebar_has = False
+
+ # Set HTML sidebar
+ sidebar_list = ''
+ sidebar_html = ''
+
+ counter = 0
+ nolines = ('#', '/')
+
+ sidebar_lines = open(db.sidebar_load, 'r').read()
+ for line in sidebar_lines.rsplit('\n'):
+ if not line or line.startswith(nolines): continue
+
+ if line.startswith(':'):
+ sidebar_title = line.rsplit(':')[1].lstrip()
+ continue
+
+ # Get full article URI and check if exists
+ sidebar_has = True
+ f_uri = '%s%s'%(db.domain_articles, line)
+ if not os.path.exists(f_uri):
+ logs.out("24", f_uri, False)
+ continue
+
+ # Get Hash from uri to get db file
+ hash_uri = tyto.get_filesum(f_uri, False)
+ db_uri = '%s%s.conf'%(db.domain_db, hash_uri)
+ if not os.path.exists(db_uri):
+ logs.out('25', 'No Database', False)
+ continue
+
+ # Load article"s database
+ exec(open(db_uri).read(),globals())
+
+ # Check wip status and if wip article exists
+ if not hash_wip == hash_chk:
+ logs.out("30", '%s "%s"'%(line, title), False)
+ continue
+ if not os.path.exists(post_wip):
+ logs.out("24", 'in wip: %s'%post_wip, False)
+ continue
+
+ # Valid article
+ sidebar_new = True
+
+ # Count: no more than max configured items
+ counter += 1
+ if counter > db.sidebar_items:
+ logs.out("31", '(%s): %s "%s"'%(
+ db.sidebar_items, line, title),
+ False
+ )
+ continue
+
+ # Create HTML list for this article
+ link_title = '%s [@%s]'%(about, author)
+ sidebar_list = sidebar_list + \
+ ' \n'
+
+ if not sidebar_new:
+ # Empty file
+ if not sidebar_has:
+ logs.out('29', '(sidebar): %s'%db.sidebar_load, True)
+ # Some items, but no one is valid
+ else:
+ logs.out('28', '(sidebar)', True)
+
+ # Create HTML complete sidebar
+ sidebar_temp = sidebar_html%(sidebar_title, sidebar_list)
+
+ # Indent HTML code
+ sidebar_content = ''
+ for line in sidebar_temp.rsplit('\n'):
+ sidebar_content = sidebar_content + '%s%s\n'%(4 * ' ', line)
+
+ # Create file if sidebar has content
+ if sidebar_new:
+ ask_html = ' ├ Replace %s ? '%db.wip_sidebar
+ res = ''
+ if os.path.exists(db.wip_sidebar):
+ res = input(ask_html)
+ if not res in ['y', 'Y']: return
+
+ tyto.set_file(target, "w", sidebar_content)
+ logs.out("33", target, False)
+
+
#====================================#
# Create HTML menu from root folders #
#------------------------------------#
-def create_navbar(option, target):
- # Conditions to create navbar
- if not domain_menubar:
- tyto.exiting("26", 'domain_menubar', False)
- if os.path.exists(navbar_file) and os.stat(navbar_file).st_size > 1:
- tyto.set_file(navbar_file, 'new', '')
- tyto.exiting('27', 'contents (navbar): %s'%navbar_file, False)
- return
+def create_navbar(target):
+ if not db.domain_exists: return
+
+ # If content in sidebar, go True
+ navbar_new = False
+ navbar_has = False
- # True in config
- # Create folder links (from navbars/tyto.navbar)
- try: nav_file = open(navbar_load, 'r').read()
- except: tyto.exiting("1", '(navbar) %s'%navbar_load, True)
-
- # Open HTML tags
- empty = True
menu_html = '%s\n'%(menu_html, 8 * ' ', 6 * ' ')
-
- if empty:
- tyto.exiting("29", '(navbar): %s'%navbar_load, False)
- tyto.set_file(navbar_file, 'new', '')
- else:
- tyto.set_file(navbar_file, 'new', menu_html)
- log_html = ' ├ Create file: %s'%navbar_file
- print(log_html)
-#========================================#
-# Create metas.html from tyto.metas.html #
-#----------------------------------------#
+ if not navbar_new:
+ if not navbar_has:
+ logs.out('29', '(navbar): %s'%db.navbar_load, True)
+ else:
+ logs.out('28', '(navbar)', True)
+
+ # Create file if sidebar has content
+ if navbar_new:
+ ask_html = ' ├ Replace %s ? '%db.wip_navbar
+ res = ''
+ if os.path.exists(db.wip_navbar):
+ res = input(ask_html)
+ if not res in ['y', 'Y']: return
+
+ tyto.set_file(navbar_file, 'new', menu_html)
+ print(' ├ Create file: %s'%navbar_file)
+
+
+#========================================================#
+# Create metas.html from _configs/tyto.metas.html #
+# Manage options Edit, New, Force, Create #
+# Create DB file with hash from _configs/tyto.metas.html #
+# To manage new creation if changes #
+#--------------------------------------------------------#
def create_user_metas(option):
+ if not db.domain_exists: return
+
+ create_load = False # file in _configs
+ create_html = False # file in template/
+
+ # Get metas_load hash or create metas db file if not exists
+ #----------------------------------------------------------
+ if os.path.exists(db.metas_load):
+ create_db_load(db.metas_load, db.metas_load_db)
+
+ # Manage option
+ #--------------
+ if not os.path.exists(db.metas_load):
+ create_load = True
+ elif option == 'New':
+ create_load = True
+ create_html = True
+ elif option == 'Create':
+ create_html = True
+ elif option == 'Edit':
+ hash_load_old = tyto.get_filesum(db.metas_load, True)
+ tyto.edit_file(db.metas_load)
+ hash_load_new = tyto.get_filesum(db.metas_load, True)
+ if not hash_load_old == hash_load_new:
+ create_db_load(db.metas_load, db.metas_load_db)
+ create_html = True
+ elif option == 'Force':
+ create_load = True
+ create_html = True
+
+ # Set metas_load default content
+ #-------------------------------
metas_tags = \
'\n'%Tyto + \
+ '\n'%tyto.Tyto + \
''
- # Create new file, or ask if exists
- ask_load = ' ├ Use default _configs/tyto.footer.html ? '
- log_load = ' ├ Create file: %s'%footer_load
- create_load = True
-
- footer_html = '%sfooter.html'%srv_wip_tpl
- ask_html = ' ├ Replace template/footer.html ' + \
- 'from _configs/tyto.footer.html ? '
- log_html = ' ├ Create file: %s'%footer_html
- create_html = True
- user_footer = ''
-
-
- # Auto create if not tyto.footer.html in _configs
- # Pass if exists, user not wants, option is 'New' (only footer.html)
- res = ''
- if os.path.exists(footer_load):
- if option == 'New':
- create_load = False
- else:
- res = input(ask_load)
- if not res in ['y', 'Y']: create_load = False
-
+ # Create new default footer_load, or ask if exists
+ #-------------------------------------------------
if create_load:
- tyto.set_file(footer_load, 'new', footer)
+ ask_load = ' ├ Replace default footer configuration ? '
+ log_load = ' ├ Create file: %s'%db.footer_load
+ res = ''
+ if os.path.exists(db.footer_load):
+ res = input(ask_load)
+ if not res in ['y', 'Y']: return
+
+ create_html = True
+ tyto.set_file(db.footer_load, 'new', footer)
+ create_db_load(db.footer_load, db.footer_load_db)
print(log_load)
-
- # Auto create if not footer.html in template/
- # Create if option is 'New'
- res = ''
- if os.path.exists(footer_html):
- if option == 'New':
- create_html = True
- else:
- res = input(ask_html)
- if not res in ['y', 'Y']: create_html = False
-
+
if create_html:
- user_file = open(footer_load, 'r').read()
+ ask_load = ' ├ Replace HTML footer: %s ? '%db.wip_footer
+ log_load = ' ├ Create file: %s'%db.wip_footer
+ res = ''
+ if os.path.exists(db.wip_footer):
+ res = input(ask_load)
+ if not res in ['y', 'Y']: return
+ user_footer = ''
+ user_file = open(db.footer_load, 'r').read()
for line in user_file.rsplit('\n'):
if not line: continue
if user_footer: user_footer = "%s\n %s"%(user_footer, line)
else: user_footer = ' %s'%line
- tyto.set_file(footer_html, 'new', user_footer)
- print(log_html)
+ tyto.set_file(db.wip_footer, 'new', user_footer)
+ print(log_load)
+
+
diff --git a/src/var/lib/tyto/program/logs.py b/src/var/lib/tyto/program/logs.py
new file mode 100644
index 0000000..a504bbf
--- /dev/null
+++ b/src/var/lib/tyto/program/logs.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python3
+# Name: Tyto - Littérateur
+# Type: logs tools
+# Description: Show logs and statuses, exit if needed
+# file: logs.py
+# Folder: /var/lib/tyto/program/
+# By echolib (XMPP: im@echolib.re)
+# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
+
+#------------
+# funny stats
+#------------
+# lines:
+# functions:
+# comments:
+#----------------------------------------------------------------------
+
+#**********************************************************************
+
+import sys
+
+# Colors
+CS = '\033[0;0m'
+CR = '\033[1;31m'
+CY = '\033[1;33m'
+CG = '\033[1;32m'
+
+
+# Exit from program with message #
+#--------------------------------#
+def out(nbr, value, out):
+ logs = {
+ '1' : ':< %sUnused resource%s: %s'%(CR, CS, value),
+ '2' : ':< %sIncomplete data%s: "%s"'%(CR, CS, value),
+ '3' : ':< %sInvalid data%s: "%s"'%(CR, CS, value),
+ '5' : ':< %sUnused argument%s: [file]'%(CR, CS),
+ '6' : ':< %sUnused "%s"%s in article'%(CR, CS, value),
+ '7' : ':< Article is %snot valid yet%s'%(CR, CS),
+ '8' : ':< %sNot paired%s: %s'%(CR, CS, value),
+ '9' : ':< Article %shas changed%s. Check it first'%(CR, CS),
+ '10' : ':< %sUnused domain configuration%s: %s'%(CR, CS, value),
+ '11' : ':< %sUnused argument%s: %s'%(CR, CS, value),
+ '12' : ':< %sUnused "%s"%s in article\'s header'%(CR, value, CS),
+ '13' : ':< %sNo file or directory%s here (deleted ?)'%(CR, CS),
+ '19' : ':D Article %swip%s on: %s'%(CG, CS, value),
+ '20' : ':D Article %scheck%s on: %s'%(CG, CS, value),
+ '21' : ':D %sValid%s article. Ready to wip'%(CG, CS),
+ '22' : ':? %sNot paired%s symbols: %s'%(CY, CS, value),
+ '23' : ':? %sCorrupted database%s: %s'%(CY, CS, value),
+ '24' : ':? %sUnused resource%s %s'%(CY, CS, value),
+ '25' : ':? Article %snot yet checked%s: %s'%(CY, CS, value),
+ '26' : ':? %sNo index%s article %s'%(CY, CS, value),
+ '28' : ':? Nothing to do %s'%value,
+ '29' : ':? %sEmpty configuration%s %s'%(CY, CS, value),
+ '30' : ':? Article %snot yet wip%s: %s'%(CY, CS, value),
+ '31' : ':? Not included. %sMax items reached%s %s'%(CY, CS, value),
+ '33' : ':D %sCreated file%s: %s'%(CG, CS, value),
+ '40' : ':/ %sInactive%s domain "%s"'%(CY, CS, value),
+ '41' : ':? %sIncomplete%s domain "%s"'%(CR, CS, value),
+ '42' : ':D %sActive%s domain "%s"'%(CG, CS, value),
+ '43' : ':? %sNo domain%s configured here: %s'%(CY, CS, value),
+ '255' : ';) Maybe later...'
+ }
+
+ msg = logs[nbr]
+ print(msg)
+
+ if int(nbr) >= 20: nbr = 0
+ if out: sys.exit(int(nbr))
diff --git a/src/var/lib/tyto/program/navbars.py b/src/var/lib/tyto/program/navbars.py
deleted file mode 100644
index c3afc1b..0000000
--- a/src/var/lib/tyto/program/navbars.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python3
-# Name: Tyto - Littérateur
-# Type: Global functions to manage sidebar
-# Description: Create domain
-# file: sidebar.py
-# Folder: /var/lib/tyto/program/
-# By echolib (XMPP: im@echolib.re)
-# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
-
-#------------
-# funny stats
-#------------
-# lines:
-# functions:
-# comments:
-#----------------------------------------------------------------------
-
-#**********************************************************************
-import sys
-
-import tyto, html
-
-# Load domain configuration if exists
-if tyto.domain_exists: exec(open(tyto.domain_conf).read())
-
-#==============================#
-# Manage arguments for sidebar #
-#------------------------------#
-def manage_navbars(target, option):
- import domain
- actions = {
- 'sidebar' : domain.create_sidebar,
- 'navbar' : domain.create_navbar
- }
-
- if sys.argv[1] == "sidebar": file = sidebar_load
- elif sys.argv[1] == 'navbar': file = navbar_load
-
- # Initialize new file
- if not target:
- if option == "Remove":
- actions[sys.argv[1]](option, navbars_dir)
- elif option == 'Edit':
- print(":D Edit %s configuration file:"%sys.argv[1], file)
- tyto.edit_file(file)
- elif option == 'New':
- html.create_navbar()
-
- else:
- db_exists = tyto.get_db_post(target) # Article exists + has DB ?
- if not db_exists: tyto.exiting("4", '') # Needs database
-
diff --git a/src/var/lib/tyto/program/publish.py b/src/var/lib/tyto/program/publish.py
new file mode 100644
index 0000000..0ebcd7e
--- /dev/null
+++ b/src/var/lib/tyto/program/publish.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python3
+# Name: Tyto - Littérateur
+# Type: Create HTML files in www/
+# Description: Copy files and replace publish line in article
+# file: publish.py
+# Folder: /var/lib/tyto/program/
+# By echolib (XMPP: im@echolib.re)
+# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
+
+#------------
+# funny stats
+#------------
+# lines:
+# functions:
+# comments:
+#----------------------------------------------------------------------
+
+#**********************************************************************
+
+def replace_line_pub():
+ # Testing html publis
+ print('> Testing html publish')
+ wip_html_post = open(post_wip, 'r').read()
+ for line in wip_html_post.rsplit('\n'):
+ if line.startswith('%s", root_uri)
- hash_post = tyto.get_filesum(root_uri, True) # From content file
- wip_article(root_uri)
+ print("->", post_src)
+ hash_post = tyto.get_filesum(post_src, True) # From content file
+ wip_article(post_src)
return
#------------------------
# Per article with target
#------------------------
- # target needed
- if not target: tyto.exiting("5", '', True)
-
# Article exists + has DB ?
db_exists = tyto.get_db_post(target)
- target = tyto.uri_root
+ target = tyto.uri_file # tyto.uri_root
if not db_exists:
- tyto.exiting("4", '', True)
+ logs.out("25", target, True)
# Load DB
post_db = tyto.post_db
@@ -64,7 +62,7 @@ def manage_wip(target, option):
exec(open(post_db).read(),globals())
# Exit if article has changed
- if hash_chk != hash_post: tyto.exiting("9", '', True)
+ if hash_chk != hash_post: logs.out("9", target, True)
# In any case, if Force
if option == 'Force':
@@ -75,11 +73,11 @@ def manage_wip(target, option):
if hash_wip != hash_chk:
wip_article(target)
else:
- if not os.path.exists(wip_uri):
- tyto.exiting("24", '(wip article): %s'%wip_uri, False)
+ if not os.path.exists(post_wip):
+ logs.out("24", '(wip article): %s'%post_wip, False)
wip_article(target)
else:
- tyto.exiting("20", date_wip, True)
+ logs.out("19", date_wip, True)
#===================#
@@ -121,8 +119,19 @@ def wip_article(target):
# Get article DB in html.py
html.set_page(post_db, target, article_bottom)
- print(html.main_page)
+ #print(html.main_page)
+ # Create wip file
+ tyto.set_file(post_wip, 'New', html.main_page)
+ logs.out("33", post_wip, False)
+
+ # Copy needed file to wip
+ for uri in uris:
+ f_src = '%s%s'%(db.domain_articles, uri)
+ f_wip = '%s%s'%(db.srv_wip, uri)
+ shutil.copy2(f_src, f_wip)
+ logs.out("33", f_wip, False)
+
# Replace in DB hash_wip and date_wip
tyto.replace_in_db(post_db, 'wip', hash_post)
@@ -190,7 +199,7 @@ def wip_words_tags():
for ln, line in enumerate(article_bottom.rsplit('\n')):
# Open tag
if line.startswith(tyto.words_tags[10][0]):
- set_css = tyto.get_css(line)
+ set_css = tyto.get_css(line)
article_bottom = article_bottom.replace(
article_bottom.rsplit('\n')[ln],
tyto.words_tags[10][2]%set_css
@@ -278,7 +287,7 @@ def wip_images():
for i in range(1, uniq_images + 1):
image = 'image_%s'%i
target = width = height = False
- set_css = tyto.domain_css + '_image'
+ set_css = db.domain_css + '_image'
imag_html = ''
if eval(image)[0] == values[0]:
@@ -607,15 +616,17 @@ def wip_raws(target):
raw = 'raw_%s'%i
raw_file = open(
'%s%s'%(
- tyto.domain_articles, eval(raw)[1]
+ db.domain_articles, eval(raw)[1]
)
).read()
raw_html = '\n'%(
- tyto.domain_css, eval(raw)[2]
+ db.domain_css, eval(raw)[2]
) + \
' '
for line in raw_file.rsplit('\n'):
- raw_html = '%s\n %s'%(raw_html, line)
+ raw_html = '%s\n %s'%(
+ raw_html, line
+ )
raw_html = '%s\n
\n
'%(raw_html)
article_bottom = article_bottom.replace(