In [1]:
from odt_parse import OdtData
from odt_diff import find_style_by_name
In [2]:
import csv, glob, zipfile
In [3]:
HOME_FOLDER = '/Volumes/GoogleDrive/La meva unitat/Docencia/Curs1718/PS1002/Examen junio 1718/'
SUBMISSION_FOLDER = HOME_FOLDER + 'PS1002-2-20172018-Entrega ejercicios examen-3118864'
user_folder = glob.glob(SUBMISSION_FOLDER + '/*')
In [4]:
ref_name_v1 = HOME_FOLDER + 'solucionB.odt'
par_prop = ['backgroundcolor', 'textalign', 'marginleft', 'marginright', 'margintop', 'marginbottom', 'textindent']
text_prop = ['fontsize', 'fontstyle', 'fontfamily', 'fontrelief', 'fontvariant', 'fontweight']
page_prop=['nextstylename']
ref_v1 = OdtData(ref_name_v1, par_prop, text_prop, page_prop)
In [5]:
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 [6]:
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 [7]:
def compare_style_attrs_v1(ref, doc):
compare_style_attr(ref, doc, 'page', 'páginaNormal',
['name'])
compare_style_attr(ref, doc, 'page', 'primeraPágina',
['nextstylename'])
compare_style_attr(ref, doc, 'paragraph', 'title',
['fontsize', 'marginbottom', 'margintop', 'textalign'])
compare_style_attr(ref, doc, 'paragraph', 'subtitle',
['textalign'])
compare_style_attr(ref, doc, 'paragraph', 'text_body',
['marginbottom', 'margintop', 'textalign', 'textindent'])
compare_style_attr(ref, doc, 'paragraph', 'resumen',
['fontstyle', 'margintop', 'marginleft','marginright',
'marginbottom', 'textalign', 'parent'])
compare_style_attr(ref, doc, 'text', 'otroidioma',
['fontfamily', 'fontweight'])
In [ ]:
find_style_by_name(ref_v1.style['text'], 'miDestacado')
In [ ]:
find_style_by_name(ref_v1.style['text'], 'citadestacada')
In [ ]:
In [8]:
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]
#if filename != ref_name:
# f.write('\nNombre de fichero: %s\n\n' % filename)
if extension == 'odt':
f.write(user_name + '\n' + '-'*len(user_name) + '\n')
doc = OdtData( ufi, par_prop, text_prop, page_prop )
if doc.err:
f.write('Error de lectura de fichero\n')
else:
compare_style_attrs_v1(ref_v1, doc)
f.write('\n' + '#'*40 + '\n\n')
counter += 1
#else:
# f.write('Extensión de fichero incorrecta\n')
print('%d ficheros procesados.' % counter)
In [ ]: