source: pyromaths/trunk/fuentes/utils/creer-vignettes.py @ 423

Last change on this file since 423 was 423, checked in by mabarracus, 4 years ago

add sources from pyromaths 15.10

  • Property svn:executable set to *
File size: 4.7 KB
Line 
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3import os, sys, codecs, shutil, glob
4from os.path import dirname, normpath, join, abspath, realpath, split
5from subprocess import call, Popen
6
7_path = normpath(join(abspath(dirname(__file__)), "../src"))
8sys.path[0] = realpath(_path)
9import hashlib
10import gettext
11
12def main():
13#===============================================================================
14# Imports spécifiques à Pyromaths
15#===============================================================================
16
17    locale_dir = join(dirname(__file__), '../locale/')
18    locale_dir = realpath(locale_dir)
19
20    gettext.install('pyromaths', localedir=locale_dir, unicode=1)
21    from pyromaths import pyromaths, ex
22    from pyromaths.Values import data_dir, configdir
23    from pyromaths.outils.System import creation
24    _param = {
25        'creer_pdf': True,
26        'creer_unpdf': False,
27        'titre': u"Thumbnail",
28        'corrige': False,
29        'niveau': "",
30        'nom_fichier': u'thumb.tex',
31        'chemin_fichier': "/tmp/",
32        'fiche_exo': '/tmp/thumb.tex',
33        'fiche_cor': '/tmp/thumb-corrige.tex',
34        'configdir': configdir(),
35        'datadir': data_dir(),
36        'modele': 'pyromaths.tex',
37        'liste_exos': [],
38        'openpdf': 0,
39    }
40
41
42    def md5check(exercise, imgdir, newfile=None):
43        ''' Check if the file has been changed or renamed. '''
44        if newfile is None:
45            newfile = os.path.join(imgdir,'tmp', os.path.basename(exercise.thumb()))
46        # open md5sums file
47        md = open(os.path.join(imgdir, 'md5sums'), 'r')
48        thesum = hashlib.md5(open(newfile, 'rb').read()).hexdigest()
49        print thesum
50        originalfile=''
51        newname=True
52        for l in md:
53            if thesum in l:
54                originalfile=os.path.join(imgdir, l.lstrip(thesum).lstrip())
55            if os.path.basename(newfile) in l:
56                newname=False
57        md.close()
58        shutil.copyfile(newfile, exercise.thumb())
59        os.chdir(imgdir)
60        #raise ValueError('asked to stop')
61        if originalfile:
62            if originalfile!=exercise.thumb():
63                log.write('%s renamed to %s' % (originalfile, exercise.thumb()))
64                call(['git', 'mv', originalfile, exercise.thumb()], stdout=log)
65        else:
66            if newname:
67                log.write('Created file %s' % (exercise.thumb()))
68                call(['git', 'add', exercise.thumb()], stdout=log)
69            else:
70                log.write('%s replaced by %s' % (originalfile, exercise.thumb()))
71        os.remove(os.path.join(newfile))
72
73    def _thumb(exercise, outfile=None):
74        ''' Create a thumbnail for this 'exercise'. '''
75        if outfile is None:
76            print("EXERCICE.THUMB : ",exercise.thumb())
77            outfile = os.path.join(os.path.dirname(exercise.thumb()), 'tmp', os.path.basename(exercise.thumb()))
78        print outfile
79        # create pdf
80        _param['liste_exos'] = [exercise()]
81        creation(_param)
82        # extract optimized thumbnail
83        call(["convert", "-density", "288", "/tmp/thumb.pdf",
84            "-resize", "25%", "-crop", "710x560+0+85",
85            "-flatten", "-trim", "/tmp/thumb.png"],
86            stdout=log)
87        call(["pngnq", "-f", "-s1", "-n32", "/tmp/thumb.png"], stdout=log)
88        log.write(outfile)
89        shutil.copyfile( "/tmp/thumb-nq8.png", outfile)
90        call(args=["optipng", "-o7", outfile])
91        md5check(exercise, os.path.dirname(exercise.thumb()))
92
93    def thumbs(pkg=ex, recursive=True):
94        ''' Create all exercise thumbnails. '''
95        import random
96        random.seed(0)
97        dirlevel = os.path.split(pkg.__path__[0])[1]
98        imgdir = join(_param['datadir'], 'ex', dirlevel, 'img')
99        print "IMGDIR : ", imgdir
100        try:
101            os.mkdir(os.path.join(imgdir, 'tmp'))
102        except OSError:
103            pass
104        #raise ValueError('voila')
105        for fl in glob.glob(join(imgdir, "ex-??.png")):
106            #Do what you want with the file
107            os.remove(fl)
108        for e in ex._exercises(pkg):
109            _thumb(e)
110        if not recursive: return
111        try:
112            os.chdir(imgdir)
113            mdfile=open('md5sums','w')
114            for fl in glob.glob(join(imgdir, "ex-??.png")):
115                #Do what you want with the file
116                thesum = hashlib.md5(open(fl, 'rb').read()).hexdigest()
117                mdfile.write(thesum + '  ' + os.path.basename(fl) + '\n')
118            mdfile.close()
119            os.rmdir(os.path.join(imgdir, 'tmp'))
120        except OSError:
121            pass
122        for pk in ex._subpackages(pkg):
123            thumbs(pk)
124
125    log = open('/tmp/preview-pyromaths.log' , 'w')
126    thumbs()
127    log.close()
128
129
130if __name__ == "__main__":
131    main()
Note: See TracBrowser for help on using the repository browser.