init python3 version

This commit is contained in:
Adrien Beudin 2017-07-03 13:37:38 +02:00
parent 4b50ee2277
commit 08a93ece26
6 changed files with 69 additions and 53 deletions

View File

@ -33,7 +33,7 @@ class Cache(object):
self.cache = {"version": CACHE_VERSION} self.cache = {"version": CACHE_VERSION}
if "version" not in self.cache or self.cache["version"] != CACHE_VERSION: if "version" not in self.cache or self.cache["version"] != CACHE_VERSION:
print "info: cache format as changed, prune cache" print("info: cache format as changed, prune cache")
self.cache = {"version": CACHE_VERSION} self.cache = {"version": CACHE_VERSION}
def needs_to_be_generated(self, source, target, options): def needs_to_be_generated(self, source, target, options):
@ -54,7 +54,7 @@ class Cache(object):
self.cache[target] = {"size": os.path.getsize(source), "options": remove_superficial_options(options)} self.cache[target] = {"size": os.path.getsize(source), "options": remove_superficial_options(options)}
def __del__(self): def __del__(self):
self.json.dump(self.cache, open(self.cache_file_path, "w")) self.json.dump(self.cache, open(self.cache_file_path, "wb"))
CACHE = Cache(json=json) CACHE = Cache(json=json)

View File

@ -13,15 +13,14 @@ Options:
""" """
import os import os
import yaml
import shutil import shutil
import socketserver
import http.server
import ruamel.yaml as yaml
#import yaml
from docopt import docopt from docopt import docopt
import SocketServer
import SimpleHTTPServer
import subprocess
from path import Path from path import Path
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
@ -94,18 +93,18 @@ class Video(object):
return return
ffmpeg_switches = { ffmpeg_switches = {
"source": source, "source": source,
"target": target, "target": target,
"loglevel": "-loglevel %s" % options["loglevel"], "loglevel": "-loglevel %s" % options["loglevel"],
"resolution": "-s %s" % options["resolution"], "resolution": "-s %s" % options["resolution"],
"resize": "-vf scale=-1:%s" % options.get("resize"), "resize": "-vf scale=-1:%s" % options.get("resize"),
"vbitrate": "-b:v %s" % options["vbitrate"], "vbitrate": "-b:v %s" % options["vbitrate"],
"abitrate": "-b:v %s" % options["abitrate"], "abitrate": "-b:v %s" % options["abitrate"],
"format": "-f %s" % options["format"], "format": "-f %s" % options["format"],
"binary": "%s" % options["binary"], "binary": "%s" % options["binary"],
"video": "-c:v %s" % options["video"], "video": "-c:v %s" % options["video"],
"audio": "-c:a %s" % options["audio"], "audio": "-c:a %s" % options["audio"],
"other": "%s" % options["other"] "other": "%s" % options["other"]
} }
warning("Generation", source) warning("Generation", source)
@ -168,11 +167,11 @@ class Audio(object):
return return
ffmpeg_switches = { ffmpeg_switches = {
"source": source, "source": source,
"target": target, "target": target,
"binary": "%s" % options["binary"], "binary": "%s" % options["binary"],
"loglevel": "-loglevel %s" % options["loglevel"], "loglevel": "-loglevel %s" % options["loglevel"],
"audio": "-c:a %s" % options["audio"] "audio": "-c:a %s" % options["audio"]
} }
warning("Generation", source) warning("Generation", source)
@ -215,13 +214,13 @@ class Image(object):
return return
gm_switches = { gm_switches = {
"source": source, "source": source,
"target": target, "target": target,
"auto-orient": "-auto-orient" if options["auto-orient"] else "", "auto-orient": "-auto-orient" if options["auto-orient"] else "",
"strip": "-strip" if options["strip"] else "", "strip": "-strip" if options["strip"] else "",
"quality": "-quality %s" % options["quality"] if "quality" in options else "-define jpeg:preserve-settings", "quality": "-quality %s" % options["quality"] if "quality" in options else "-define jpeg:preserve-settings",
"resize": "-resize %s" % options["resize"] if options.get("resize", None) is not None else "", "resize": "-resize %s" % options["resize"] if options.get("resize", None) is not None else "",
"progressive": "-interlace Line" if options.get("progressive", None) is True else "" "progressive": "-interlace Line" if options.get("progressive", None) is True else ""
} }
command = "gm convert '{source}' {auto-orient} {strip} {progressive} {quality} {resize} '{target}'".format(**gm_switches) command = "gm convert '{source}' {auto-orient} {strip} {progressive} {quality} {resize} '{target}'".format(**gm_switches)
@ -244,7 +243,7 @@ class Image(object):
if not options["auto-orient"] and not options["strip"]: if not options["auto-orient"] and not options["strip"]:
shutil.copyfile(source, target) shutil.copyfile(source, target)
print("%s%s%s" % (source, "->", target)) print(("%s%s%s" % (source, "->", target)))
else: else:
# Do not consider quality settings here, since we aim to copy the input image # Do not consider quality settings here, since we aim to copy the input image
# better to preserve input encoding setting # better to preserve input encoding setting
@ -275,20 +274,20 @@ def get_settings():
try: try:
settings = yaml.safe_load(open("settings.yaml", "r")) settings = yaml.safe_load(open("settings.yaml", "r"))
except yaml.YAMLError, exc: except yaml.YAMLError as exc:
if hasattr(exc, 'problem_mark'): if hasattr(exc, 'problem_mark'):
mark = exc.problem_mark mark = exc.problem_mark
error(False, "There are something wrong in settings.yaml line %s" % (mark.line+1)) error(False, "There are something wrong in settings.yaml line %s" % (mark.line))
else: else:
erro(False, "There are omething wrong in settings.yaml") error(False, "There are omething wrong in settings.yaml")
error(isinstance(settings, dict), "Your settings.yaml should be a dict") error(isinstance(settings, dict), "Your settings.yaml should be a dict")
for key, value in DEFAULTS.items(): for key, value in list(DEFAULTS.items()):
if key not in settings: if key not in settings:
settings[key] = value settings[key] = value
for key, value in SETTINGS.items(): for key, value in list(SETTINGS.items()):
if key not in settings: if key not in settings:
settings[key] = value settings[key] = value
@ -366,12 +365,12 @@ def process_directory(gallery_name, settings, parent_templates, parent_gallery_p
try: try:
gallery_settings = yaml.safe_load(open(Path(".").joinpath(gallery_path, "settings.yaml").abspath(), "r")) gallery_settings = yaml.safe_load(open(Path(".").joinpath(gallery_path, "settings.yaml").abspath(), "r"))
except yaml.YAMLError, exc: except yaml.YAMLError as exc:
if hasattr(exc, 'problem_mark'): if hasattr(exc, 'problem_mark'):
mark = exc.problem_mark mark = exc.problem_mark
error(False, "There are something wrong in %s/settings.yaml line %s" % (gallery_path, mark.line+1)) error(False, "There are something wrong in %s/settings.yaml line %s" % (gallery_path, mark.line))
else: else:
erro(False, "There are omething wrong in %s/settings.yaml" % (gallery_path)) error(False, "There are something wrong in %s/settings.yaml" % (gallery_path))
error(isinstance(gallery_settings, dict), "Your %s should be a dict" % gallery_name.joinpath("settings.yaml")) error(isinstance(gallery_settings, dict), "Your %s should be a dict" % gallery_name.joinpath("settings.yaml"))
error(gallery_settings.get("title"), "You should specify a title in %s" % gallery_name.joinpath("settings.yaml")) error(gallery_settings.get("title"), "You should specify a title in %s" % gallery_name.joinpath("settings.yaml"))
@ -472,7 +471,7 @@ def build_gallery(settings, gallery_settings, gallery_path, template):
name=gallery_path.split('/', 1)[-1] name=gallery_path.split('/', 1)[-1]
).encode("Utf-8") ).encode("Utf-8")
open(Path("build").joinpath(gallery_path, "index.html"), "w").write(html) open(Path("build").joinpath(gallery_path, "index.html"), "wb").write(html)
# XXX shouldn't this be a call to build_gallery? # XXX shouldn't this be a call to build_gallery?
# Build light mode gallery # Build light mode gallery
@ -507,13 +506,13 @@ def build_gallery(settings, gallery_settings, gallery_path, template):
name=gallery_path.split('/', 1)[-1] name=gallery_path.split('/', 1)[-1]
).encode("Utf-8") ).encode("Utf-8")
open(Path("build").joinpath(gallery_light_path, "index.html"), "w").write(html) open(Path("build").joinpath(gallery_light_path, "index.html"), "wb").write(html)
def build_index(settings, galleries_cover, templates, gallery_path='', sub_index=False): def build_index(settings, galleries_cover, templates, gallery_path='', sub_index=False):
index_template = templates.get_template("index.html") index_template = templates.get_template("index.html")
galleries_cover = reversed(sorted(filter(lambda x: x != {}, galleries_cover), key=lambda x: x["date"])) galleries_cover = reversed(sorted([x for x in galleries_cover if x != {}], key=lambda x: x["date"]))
# this should probably be a factory # this should probably be a factory
Image.base_dir = Path(".").joinpath(gallery_path) Image.base_dir = Path(".").joinpath(gallery_path)
@ -530,7 +529,7 @@ def build_index(settings, galleries_cover, templates, gallery_path='', sub_index
Video=Video Video=Video
).encode("Utf-8") ).encode("Utf-8")
open(Path("build").joinpath(gallery_path, "index.html"), "w").write(html) open(Path("build").joinpath(gallery_path, "index.html"), "wb").write(html)
def main(): def main():
@ -549,11 +548,10 @@ def main():
error(Path("build").exists(), "Please build the website before launch preview") error(Path("build").exists(), "Please build the website before launch preview")
os.chdir('build') os.chdir('build')
handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", 9000), handler)
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler print('Start server on http://localhost:9000')
httpd = SocketServer.TCPServer(("", 9000), Handler)
print "Start server on http://localhost:9000"
# gracefully handle interrupt here # gracefully handle interrupt here
httpd.serve_forever() httpd.serve_forever()
@ -561,7 +559,7 @@ def main():
error(os.system("which rsync > /dev/null") == 0, "I can't locate the rsync, " error(os.system("which rsync > /dev/null") == 0, "I can't locate the rsync, "
"please install the 'rsync' package.\n") "please install the 'rsync' package.\n")
error(Path("build").exists(), "Please build the website before launch deployment") error(Path("build").exists(), "Please build the website before launch deployment")
r_dest = settings["settings"]["deploy"]["dest"] r_dest = settings["settings"]["deploy"]["dest"]
if settings["settings"]["deploy"]["others"]: if settings["settings"]["deploy"]["others"]:
r_others = settings["settings"]["deploy"]["others"] r_others = settings["settings"]["deploy"]["others"]
@ -581,6 +579,14 @@ def main():
templates = get_gallery_templates(theme) templates = get_gallery_templates(theme)
templates.add_extension('jinja2.ext.with_') templates.add_extension('jinja2.ext.with_')
if Path("custom.js").exists():
shutil.copy(Path("custom.js"), Path(".").joinpath("build", "", "static", "js"))
settings["custom_js"] = True
if Path("custom.css").exists():
shutil.copy(Path("custom.css"), Path(".").joinpath("build", "", "static", "css"))
settings["custom_css"] = True
for gallery in galleries_dirs: for gallery in galleries_dirs:
front_page_galleries_cover.append(process_directory(gallery, settings, templates)) front_page_galleries_cover.append(process_directory(gallery, settings, templates))
@ -589,10 +595,10 @@ def main():
xml = feed_template.render( xml = feed_template.render(
settings=settings, settings=settings,
galleries=reversed(sorted(filter(lambda x: x != {}, front_page_galleries_cover), key=lambda x: x["date"])) galleries=reversed(sorted([x for x in front_page_galleries_cover if x != {}], key=lambda x: x["date"]))
).encode("Utf-8") ).encode("Utf-8")
open(Path("build").joinpath("feed.xml"), "w").write(xml) open(Path("build").joinpath("feed.xml"), "wb").write(xml)
build_index(settings, front_page_galleries_cover, templates) build_index(settings, front_page_galleries_cover, templates)

View File

@ -5,6 +5,9 @@
{% set licence_url = settings.licence.url %} {% set licence_url = settings.licence.url %}
{% set licence_name = settings.licence.name %} {% set licence_name = settings.licence.name %}
{% endif %} {% endif %}
{% if settings.custom_js %}
<script type="text/javascript" src="../static/js/custom.js" charset="utf-8"></script>
{% endif %}
<footer> <footer>
<p>Generated using <a href="https://github.com/psycojoker/prosopopee">Prosopopée</a> · content under <a href="{{ licence_url }}">{{ licence_name }}</a> · atom logo by <a href="https://thenounproject.com/jjjon/">Jonathan Li</a> under <a href="https://creativecommons.org/licenses/by/3.0/">CC-BY</a></p> <p>Generated using <a href="https://github.com/psycojoker/prosopopee">Prosopopée</a> · content under <a href="{{ licence_url }}">{{ licence_name }}</a> · atom logo by <a href="https://thenounproject.com/jjjon/">Jonathan Li</a> under <a href="https://creativecommons.org/licenses/by/3.0/">CC-BY</a></p>
</footer> </footer>

View File

@ -12,6 +12,9 @@
{% if gallery.audio_enabled %} {% if gallery.audio_enabled %}
<link type="text/css" rel="stylesheet" href="../static/css/mediaelementplayer.css" media="screen,projection"/> <link type="text/css" rel="stylesheet" href="../static/css/mediaelementplayer.css" media="screen,projection"/>
{% endif %} {% endif %}
{% if settings.custom_css %}
<link type="text/css" rel="stylesheet" href="../static/css/custom.css" media="screen,projection"/>
{% endif %}
<!--Let browser know website is optimized for mobile--> <!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
{% if gallery.description %} {% if gallery.description %}

View File

@ -3,6 +3,9 @@
{% block css %} {% block css %}
<link type="text/css" rel="stylesheet" href="static/css/fonts.css" media="screen,projection"/> <link type="text/css" rel="stylesheet" href="static/css/fonts.css" media="screen,projection"/>
<link type="text/css" rel="stylesheet" href="static/css/style.css" media="screen,projection"/> <link type="text/css" rel="stylesheet" href="static/css/style.css" media="screen,projection"/>
{% if settings.custom_css %}
<link type="text/css" rel="stylesheet" href="static/css/custom.css" media="screen,projection"/>
{% endif %}
{% endblock %} {% endblock %}
{% block logo %} {% block logo %}

View File

@ -1,4 +1,5 @@
jinja2 jinja2
pyyaml
path.py path.py
docopt docopt
ruamel.yaml
future