Statoolinfos. Indev to create stat files on command for wip/www server

This commit is contained in:
Cyrille L 2023-03-10 15:31:17 +01:00
parent 7a93bfccc3
commit 8a43b795bb
7 changed files with 176 additions and 47 deletions

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# Version: 0.9.0 # Version: 0.9.1
# Name: Tyto - Littérateur # Name: Tyto - Littérateur
# Type: Executable # Type: Executable
# Description: Multiple Static Websites generator and manager # Description: Multiple Static Websites generator and manager

View File

@ -69,6 +69,7 @@ pass_targets = \
'metas', 'metas',
'navbar', 'navbar',
'sidebar', 'sidebar',
'stats',
'template' 'template'
) )

View File

@ -138,8 +138,7 @@ def manage_check(target):
# Check if separator or exit # # Check if separator or exit #
#---------------------------------# #---------------------------------#
def file_to_string(post_file): def file_to_string(post_file):
global article global article, post_header, post_bottom
global post_header, post_bottom
post_header = post_bottom = '' post_header = post_bottom = ''
sep = False sep = False

View File

@ -79,7 +79,8 @@ def tyto(target):
' footer : Create/Show footer HTML config\'s file\n' ' footer : Create/Show footer HTML config\'s file\n'
' metas : Create/Show metas HTML config\'s file\n' ' metas : Create/Show metas HTML config\'s file\n'
' navbar : Create/Show navbar config\'s file\n' ' navbar : Create/Show navbar config\'s file\n'
' sidebar : Create/Show sidebar config\'s file\n\n' ' sidebar : Create/Show sidebar config\'s file\n'
' stats : Create statistics file in root srv\n\n'
'# Examples:\n' '# Examples:\n'
' - Check article\'s syntax: tyto check mysubdir/index.tyto\n' ' - Check article\'s syntax: tyto check mysubdir/index.tyto\n'
' - Create default _configs/tyto.sidebar: tyto new sidebar\n' ' - Create default _configs/tyto.sidebar: tyto new sidebar\n'

View File

@ -0,0 +1,118 @@
#!/usr/bin/env python3
# Name: Tyto - Littérateur
# Type: Statistics generator
# Description: Create/Show statistics (wip, publish...)
# file: stats.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, importlib
import args, logs, db, domain, tyto
sti_anchors = sti_abbrs = sti_links = 0
sti_images = sti_files = sti_raws = 0
sti_tags = sti_words = sti_titles = sti_paragraphs = sti_anclink = 0
sti_strongs = sti_bolds = sti_emphasis = sti_italics = sti_dels = 0
sti_underlines = sti_cites = sti_customs = sti_icodes = 0
sti_bcodes = sti_quotes = sti_lists = 0
#=======================#
# Manage "stats" option #
#-----------------------#
def manage_stats(process):
domain.domain_needed()
do = {
'wip' : loop_articles,
'www' : loop_articles,
'show-wip' : count_stats, # NO
'show_www' : count_stats, # NO
}
do[args.action](process)
def loop_articles(process):
if process == 'wip':
file_stats = '%s%s'%(db.srv_wip, tyto.stats_f)
elif process == 'www':
file_stats = '%s%s'%(db.srv_www, tyto.stats_f)
# Get databases of wip's articles
for post_db in os.listdir(db.articles_db):
if post_db.endswith('.conf'):
# Load DB
post_db = '%s%s'%(db.articles_db, post_db)
exec(open(post_db).read(),globals())
args.target = post_src.rsplit('%s/'%db.in_dir)[1]
importlib.reload(db)
# Check hash status (wip/www)
# wip
if process == 'wip':
if not db.hash_wip: continue
print(':> [%s] | %s'%(db.title, db.post_src))
# Article has changed and could have different stats
if not db.hash_wip == db.hash_chk:
logs.out("9", db.post_src, False)
continue
count_stats()
# www
elif process == 'www':
if not db.hash_www: continue
print("> anchors", sti_anchors, sti_strongs)
logs.out("33", file_stats, False)
#
# Set Statistics and count
#
def count_stats():
# Set Statistics
global sti_anchors, sti_abbrs, sti_links
global sti_images, sti_files, sti_raws
global sti_tags, sti_words, sti_titles, sti_paragraphs, sti_anclink
global sti_strongs, sti_bolds, sti_emphasis, sti_italics, sti_dels
global sti_underlines, sti_cites, sti_customs, sti_icodes
global sti_bcodes, sti_quotes, sti_lists
# Set statistics
sti_anchors = sti_anchors + db.uniq_anchors
sti_abbrs = sti_abbrs + db.uniq_abbrs
sti_links = sti_links + db.uniq_links
sti_images = sti_images + db.uniq_images
sti_files = sti_files + db.uniq_files
sti_raws = sti_raws + db.uniq_raws
sti_tags = sti_tags + db.stat_tags
sti_words = sti_words + db.stat_words
sti_titles = sti_titles + db.stat_titles
sti_paragraphs = sti_paragraphs + db.stat_paragraphs
sti_anclink = sti_anclink + db.stat_anchors
sti_strongs = sti_strongs + db.stat_strongs
sti_bolds = sti_bolds + db.stat_bolds
sti_emphasis = sti_emphasis + db.stat_emphasis
sti_italics = sti_italics + db.stat_italics
sti_dels = sti_dels + db.stat_dels
sti_underlines = sti_underlines + db.stat_underlines
sti_cites = sti_cites + db.stat_cites
sti_customs = sti_customs + db.stat_customs
sti_icodes = sti_icodes + db.stat_icodes
sti_bcodes = sti_bcodes + db.stat_bcodes
sti_quotes = sti_quotes + db.stat_quotes
sti_lists = sti_lists + db.stat_lists

View File

@ -38,6 +38,7 @@ else: n = 1
Tyto = 'Tyto - Littérateur' Tyto = 'Tyto - Littérateur'
Tytogit = 'https://git.a-lec.org/echolib/tyto-litterateur' Tytogit = 'https://git.a-lec.org/echolib/tyto-litterateur'
Tytoweb = 'https://tyto.echolib.re' Tytoweb = 'https://tyto.echolib.re'
stats_f = 'tyto_statoolinfos.conf'
# Translations French/English # Translations French/English
trans = [ trans = [

View File

@ -18,7 +18,7 @@
#********************************************************************** #**********************************************************************
import os, re, shutil, importlib import os, re, shutil, importlib
import logs, args, db, tyto, html, domain import logs, args, db, tyto, html, domain, stats
#=========================================# #=========================================#
@ -30,45 +30,18 @@ def manage_wip(target):
# Check if can process # Check if can process
domain.domain_needed() domain.domain_needed()
wip_article(db.post_src) # wip_article(db.post_src) ; return # Force wip without checking
return
# Option 'all' to wip again, based on DB
#---------------------------------------
if target == 'all':
ask = ''
ask = input(" ├ Wip again all already converted articles ? ")
if not ask in ['y', 'Y']:
return
# Load domain configuration DB
for post_db in os.listdir(db.articles_db):
if post_db.endswith('.conf'):
# Load DB
post_db = '%s%s'%(db.articles_db, post_db)
exec(open(post_db).read(),globals())
args.target = post_src.rsplit('%s/'%db.in_dir)[1]
importlib.reload(db)
if not db.hash_wip:
continue
print(':> [%s] | %s'%(db.title, db.post_src))
hash_post = tyto.get_filesum(db.post_src, True) # From content file
if hash_post != db.hash_chk:
logs.out("25", db.uri_file, False)
ocontinue
wip_article(db.post_src)
return
# Target is footer, sidebar, navbar, metas # Target is footer, sidebar, navbar, metas
#----------------------------------------- #-----------------------------------------
if target in args.pass_targets: if target in args.pass_targets:
do = { do = {
'all' : wip_all,
'sidebar' : html.create_sidebar, 'sidebar' : html.create_sidebar,
'navbar' : html.create_navbar, 'navbar' : html.create_navbar,
'metas' : html.create_user_metas, 'metas' : html.create_user_metas,
'footer' : html.create_user_footer 'footer' : html.create_user_footer,
'stats' : stats.manage_stats
} }
do[target]('wip') do[target]('wip')
@ -100,6 +73,37 @@ def manage_wip(target):
wip_article(db.uri_file) wip_article(db.uri_file)
#========================================#
# Option 'all' to wip again, based on DB #
#----------------------------------------#
def wip_all(process):
# if target == 'all':
ask = ''
ask = input(" ├ Wip again all already converted articles ? ")
if not ask in ['y', 'Y']:
return
# Load domain configuration DB
for post_db in os.listdir(db.articles_db):
if post_db.endswith('.conf'):
# Load DB
post_db = '%s%s'%(db.articles_db, post_db)
exec(open(post_db).read(),globals())
args.target = post_src.rsplit('%s/'%db.in_dir)[1]
importlib.reload(db)
if not db.hash_wip:
continue
print(':> [%s] | %s'%(db.title, db.post_src))
hash_post = tyto.get_filesum(db.post_src, True) # From content file
if hash_post != db.hash_chk:
logs.out("25", db.uri_file, False)
continue
wip_article(db.post_src)
return
#===================# #===================#
# Start wip modules # # Start wip modules #
# Set DB # # Set DB #
@ -153,12 +157,9 @@ def wip_article(target):
#=================================# #=================================#
# Create string article from file # # Create string article from file #
# post is string splitted '\n' #
# article is string not splitted #
#---------------------------------# #---------------------------------#
def file_to_string(post_file): def file_to_string(post_file):
global article global article, post_header, post_bottom
global post_header, post_bottom
post_header = post_bottom = '' post_header = post_bottom = ''
sep = False sep = False
@ -442,7 +443,9 @@ def wip_quotes() :
if qline.startswith(tyto.words_tags[10][1]): if qline.startswith(tyto.words_tags[10][1]):
# Replace closed paragrph with html line # Replace closed paragrph with html line
qline_html = tyto.words_tags[10][3] qline_html = tyto.words_tags[10][3]
quote_html = '%s\n%s%s'%(quote_html, int(tab_p) * ' ',qline_html) quote_html = '%s\n%s%s'%(
quote_html, int(tab_p) * ' ', qline_html
)
continue continue
# End of marker quote # End of marker quote
@ -591,7 +594,9 @@ def wip_titles():
if line.startswith('#'): if line.startswith('#'):
hx = line[1] hx = line[1]
title_cont = line[2: len(line)].lstrip() title_cont = line[2: len(line)].lstrip()
title_html = '<h%s class="title_%s">%s</h%s>'%(hx, hx, title_cont, hx) title_html = '<h%s class="title_%s">%s</h%s>'%(
hx, hx, title_cont, hx
)
article_temp = article_temp.replace(line, title_html) article_temp = article_temp.replace(line, title_html)
@ -696,8 +701,10 @@ def wip_tabs():
if line.startswith('<h'): if line.startswith('<h'):
get_tab = line[2] get_tab = line[2]
tab = tabs_hX[get_tab] tab = tabs_hX[get_tab]
if not article_temp: article_temp = '%s%s'%(int(tab) * ' ', line) if not article_temp:
else: article_temp = '%s\n%s%s'%(article_temp, int(tab) * ' ', line) article_temp = '%s%s'%(int(tab) * ' ', line)
else:
article_temp = '%s\n%s%s'%(article_temp, int(tab) * ' ', line)
continue continue
# div # div
@ -715,8 +722,10 @@ def wip_tabs():
# Other contents # Other contents
else: else:
if not article_temp: article_temp = '%s%s'%(int(tab) * ' ', line) if not article_temp:
else: article_temp = '%s\n%s%s'%(article_temp, int(tab) * ' ', line) article_temp = '%s%s'%(int(tab) * ' ', line)
else:
article_temp = '%s\n%s%s'%(article_temp, int(tab) * ' ', line)
post_bottom = article_temp post_bottom = article_temp