In [ ]:
from odt_parse import OdtData
from odt_diff import find_style_by_name

In [ ]:
import csv, glob, zipfile

In [ ]:
HOME_FOLDER = '../'
SUBMISSION_FOLDER = HOME_FOLDER + 'PS1002-2-20172018-Document libro paginado.odt, grups de dijous-3237700'
user_folder = glob.glob(SUBMISSION_FOLDER + '/*')

In [ ]:
ref_name = 'libro_paginado.odt'
par_prop = ['backgroundcolor', 'textalign', 'marginleft', 'marginright', 'margintop', 'marginbottom']
text_prop = ['fontsize', 'fontstyle']
page_prop=['nextstylename']
ref = OdtData(ref_name, par_prop, text_prop, page_prop)

In [ ]:
sp_dict = {'Heading':'Título', 'Heading_1':'Título_1', 'breakbefore':'salto de página antes',
           'backgroundcolor':'color de fondo', 'textalign':'alineación', 
           'Quotations':'Cita', 'fontsize':'tamaño de letra', 'fontstyle':'efecto tipográfico', 
           'marginleft':'sangría izquierda', 'marginright':'sangría derecha', 
           'margintop':'espacio superior', 'marginbottom':'espacio inferior',
           'justify':'justificada', 'end':'derecha', 'start':'izquierda',
           'nextstylename': 'estilo de página siguiente'}
def sp_trans(s):
    try:
        t = sp_dict[s]
    except KeyError:
        t = s
    return t

In [ ]:
errors = []
def compare_style_attr(ref, doc, family, style_name, attr_list):
    stref = find_style_by_name(ref.style[family], style_name)
    stdoc = find_style_by_name(doc.style[family], style_name)
    if stdoc:
        for attr in attr_list:
            try:
                val_ref = stref[attr]
                try:
                    val_doc = stdoc[attr]
                    if val_ref != val_doc:
                        f.write('Estilo %s tiene %s \n  %s en lugar de %s.\n\n' % (sp_trans(style_name), sp_trans(attr),
                                                                                     sp_trans(val_doc), sp_trans(val_ref)))
                except KeyError:
                        f.write('Estilo %s no tiene %s definido.\n\n' % (sp_trans(style_name), sp_trans(attr)))
                #except TypeError:
                #        f.write('Estilo %s no está definido.\n\n' % (sp_trans(style_name)))
            except KeyError:
                err = style_name + "_" + attr
                if not err in errors:
                    errors.append(err)
                    print('Estilo %s no tiene %s definido en el fichero de referencia.' % (sp_trans(style_name), sp_trans(attr)))
    else:
        f.write('Estilo %s no está definido.\n\n' % (sp_trans(style_name)))

In [ ]:
def compare_style_attrs():
    compare_style_attr(ref, doc, 'page', 'pagina_normal', 
                       ['name'])
    compare_style_attr(ref, doc, 'page', 'portada', 
                       ['nextstylename'])

In [ ]:
with open(SUBMISSION_FOLDER + '.txt', 'w', encoding='utf-8') as f:
    counter = 0
    for ufo in user_folder:
        user_files = glob.glob(ufo + '/*')
        for ufi in user_files:
            tokens = ufi.split('/')
            filename = tokens[-1]
            user_data = tokens[-2]
            user_name, user_id, _, submission_type, _ = user_data.split('_')
            fns = filename.split('.')
            if len(fns) > 1:
                extension = fns[-1]
            else:
                extension = ''
            row = [user_name, user_id, submission_type, filename, extension]
            f.write(user_name + '\n' + '-'*len(user_name) + '\n')
            if filename != ref_name:
                f.write('\nNombre de fichero: %s\n\n' % filename)
            if extension == 'odt':
                doc = OdtData( ufi, par_prop, text_prop, page_prop )
                if doc.err:
                    f.write('Error de lectura de fichero\n')                   
                else:
                    compare_style_attrs()      
            else:
                f.write('Extensión de fichero incorrecta\n')
            f.write('\n' + '#'*40 + '\n\n')
            counter += 1
    print('%d ficheros procesados.' % counter)

In [ ]: