From bd3da91375bc01dea947b16036806e6a5b994b08 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 11 Oct 2017 21:50:00 +0200 Subject: [PATCH] plugins: new m.filesize plugin. --- pelican-plugins/m/filesize.py | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 pelican-plugins/m/filesize.py diff --git a/pelican-plugins/m/filesize.py b/pelican-plugins/m/filesize.py new file mode 100644 index 00000000..3155be1f --- /dev/null +++ b/pelican-plugins/m/filesize.py @@ -0,0 +1,42 @@ +import os +import gzip +from docutils import nodes +from docutils.parsers import rst +from pelican import signals + +settings = {} + +def init(pelicanobj): + settings['path'] = pelicanobj.settings.get('PATH', 'content') + pass + +def filesize(name, rawtext, text, lineno, inliner, options={}, content=[]): + size = os.path.getsize(text.format(filename=os.path.join(os.getcwd(), settings['path']))) + + for unit in ['','k','M','G','T']: + if abs(size) < 1024.0: + size_string = "%3.1f %sB" % (size, unit) + break + size /= 1024.0 + else: size_string = "%.1f PB" % size + + return [nodes.inline(size_string, size_string)], [] + +def filesize_gz(name, rawtext, text, lineno, inliner, options={}, content=[]): + with open(text.format(filename=os.path.join(os.getcwd(), settings['path'])), mode='rb') as f: + size = len(gzip.compress(f.read())) + + for unit in ['','k','M','G','T']: + if abs(size) < 1024.0: + size_string = "%3.1f %sB" % (size, unit) + break + size /= 1024.0 + else: size_string = "%.1f PB" % size + + return [nodes.inline(size_string, size_string)], [] + +def register(): + signals.initialized.connect(init) + + rst.roles.register_local_role('filesize', filesize) + rst.roles.register_local_role('filesize-gz', filesize_gz) -- 2.30.2