def report(survey, filter, filename=None, papersize=None, small=0, suppress=None): assert isinstance(survey, model.survey.Survey) # compile clifilter filter = clifilter.clifilter(survey, filter) # First: calculate buddies # init buddies survey.questionnaire.calculate.init() # iterate over sheets survey.iterate( survey.questionnaire.calculate.read, lambda: survey.sheet.valid and not survey.sheet.empty and filter() ) # do calculations survey.questionnaire.calculate.calculate() # Second: report buddies # init buddies survey.questionnaire.report.init(small, suppress) # iterate over sheets survey.iterate( survey.questionnaire.report.report, lambda: survey.sheet.valid and filter() ) # create story story = template.story_title( survey, { _(u'Turned in Questionnaires'): survey.questionnaire.calculate.count, } ) story.extend(survey.questionnaire.report.story()) # create report(out of story) if filename is None: filename = survey.new_path('report_%i.pdf') subject = [] for key, value in survey.info.iteritems(): subject.append(u'%(key)s: %(value)s' % {'key': key, 'value': value}) subject = u'\n'.join(subject) papersize = paper.get_reportlab_papersize(papersize) doc = template.DocTemplate( filename, _(u'sdaps report'), { 'title': survey.title, 'subject': subject, }, papersize=papersize ) doc.build(story)
def report(survey, filter, filename=None, papersize=None, small=0, suppress=None): assert isinstance(survey, model.survey.Survey) # compile clifilter filter = clifilter.clifilter(survey, filter) # First: calculate buddies # init buddies survey.questionnaire.calculate.init() # iterate over sheets survey.iterate( survey.questionnaire.calculate.read, lambda: survey.sheet.valid and not survey.sheet.empty and filter()) # do calculations survey.questionnaire.calculate.calculate() # Second: report buddies # init buddies survey.questionnaire.report.init(small, suppress) # iterate over sheets survey.iterate(survey.questionnaire.report.report, lambda: survey.sheet.valid and filter()) # create story story = template.story_title(survey, { _(u'Turned in Questionnaires'): survey.questionnaire.calculate.count, }) story.extend(survey.questionnaire.report.story()) # create report(out of story) if filename is None: filename = survey.new_path('report_%i.pdf') subject = [] for key, value in survey.info.iteritems(): subject.append(u'%(key)s: %(value)s' % {'key': key, 'value': value}) subject = u'\n'.join(subject) papersize = paper.get_reportlab_papersize(papersize) doc = template.DocTemplate(filename, _(u'sdaps report'), { 'title': survey.title, 'subject': subject, }, papersize=papersize) doc.build(story)
def csvdata_export(survey, cmdline): # compile clifilter filter = clifilter.clifilter(survey, cmdline["filter"]) # export survey.questionnaire.csvdata.export_header() survey.iterate(survey.questionnaire.csvdata.export_data, filter) survey.questionnaire.csvdata.export_finish()
def to_dataframe(survey, filter=None): # compile clifilter filter = clifilter.clifilter(survey, filter) survey.questionnaire.pandas.init() survey.iterate( survey.questionnaire.pandas.append_row, filter, ) return survey.questionnaire.pandas.get_dataframe()
def csvdata_export(survey, filename, filter=None): # compile clifilter filter = clifilter.clifilter(survey, filter) # export survey.questionnaire.csvdata.open_csv(filename) survey.iterate( survey.questionnaire.csvdata.export_data, filter, ) survey.questionnaire.csvdata.export_finish()
def csvdata_export(survey, csvfile, image_writer, filter=None, export_images=False, export_question_images=False, export_quality=False, csvoptions={}): # compile clifilter filter = clifilter.clifilter(survey, filter) # export survey.questionnaire.csvdata.open_csv(csvfile, image_writer, export_images, export_question_images, export_quality, csvoptions) survey.iterate( survey.questionnaire.csvdata.export_data, filter, ) survey.questionnaire.csvdata.export_finish()
def gui(survey, cmdline): filter = clifilter.clifilter(survey, cmdline['filter']) provider = Provider(survey, filter) if not provider.images: log.error(_("The survey does not have any images! Please add images (and run recognize) before using the GUI.")) return 1 try: # Exit the mainloop if Ctrl+C is pressed in the terminal. GLib.unix_signal_add_full(GLib.PRIORITY_HIGH, signal.SIGINT, lambda *args : Gtk.main_quit(), None) except AttributeError: # Whatever, it is only to enable Ctrl+C anyways pass MainWindow(provider).run()
def report(survey, filter, filename=None, papersize=None, small=0, suppress=None, tex_only=False): assert isinstance(survey, model.survey.Survey) # compile clifilter filter = clifilter.clifilter(survey, filter) # First: calculate buddies # init buddies survey.questionnaire.calculate.init() # iterate over sheets survey.iterate( survey.questionnaire.calculate.read, lambda: survey.sheet.valid and filter() ) # do calculations survey.questionnaire.calculate.calculate() # Temporary directory for TeX files. if tex_only and filename: tmpdir = filename # Create directory os.makedirs(tmpdir) else: tmpdir = tempfile.mkdtemp(prefix='sdaps-report-') # Second: report buddies # init buddies survey.questionnaire.report.init(tmpdir, small, suppress) # Filename of output if filename is None and tex_only == False: filename = survey.new_path('report_%i.pdf') try: # iterate over sheets survey.iterate( survey.questionnaire.report.report, lambda: survey.sheet.valid and filter(), tmpdir ) # Copy class and dictionary files if paths.local_run: cls_file = os.path.join(paths.source_dir, 'tex', 'sdapsreport.cls') dict_files = os.path.join(paths.build_dir, 'tex', '*.dict') dict_files = glob.glob(dict_files) else: cls_file = os.path.join(paths.prefix, 'share', 'sdaps', 'tex', 'sdapsreport.cls') dict_files = os.path.join(paths.prefix, 'share', 'sdaps', 'tex', '*.dict') dict_files = glob.glob(dict_files) shutil.copyfile(cls_file, os.path.join(tmpdir, 'sdapsreport.cls')) for dict_file in dict_files: shutil.copyfile(dict_file, os.path.join(tmpdir, os.path.basename(dict_file))) texfile = codecs.open(os.path.join(tmpdir, 'report.tex'), 'w', 'utf-8') author = _('author|Unknown') extra_info = [] for key, value in survey.info.items(): if key == 'Author': author = value continue extra_info.append('\\addextrainfo{%(key)s}{%(value)s}' % {'key': key, 'value': value}) extra_info = '\n'.join(extra_info) texfile.write(r"""\documentclass[%(language)s,%(papersize)s]{sdapsreport} \usepackage{ifxetex} \ifxetex \else \usepackage[utf8]{inputenc} \fi \usepackage[%(language)s]{babel} \usepackage{xltxtra} \setmainfont{IPAPMincho} \setsansfont{IPAPGothic} \setmonofont{IPAGothic} \XeTeXlinebreaklocale "ja" \title{%(title)s} \subject{%(title)s} \author{%(author)s} \addextrainfo{%(turned_in)s}{%(count)i} %(extra_info)s \begin{document} \maketitle """ % {'language': _('tex language|english'), 'title': _('sdaps report'), 'turned_in': _('Turned in Questionnaires'), 'title': survey.title, 'author': author, 'extra_info': extra_info, 'count': survey.questionnaire.calculate.count, 'papersize' : paper.get_tex_papersize(papersize)}) survey.questionnaire.report.write(texfile, tmpdir) texfile.write(r""" \end{document} """) texfile.close() if tex_only: print(_("The TeX project with the report data is located at '%s'.") % tmpdir) return print(_("Running %s now multiple times to generate the report.") % survey.defs.engine) latex.compile(survey.defs.engine, 'report.tex', cwd=tmpdir) if not os.path.exists(os.path.join(tmpdir, 'report.pdf')): print(_("Error running \"%s\" to compile the LaTeX file.") % survey.defs.engine) raise AssertionError('PDF file not generated') shutil.move(os.path.join(tmpdir, 'report.pdf'), filename) except: print(_("An occured during creation of the report. Temporary files left in '%s'." % tmpdir)) raise shutil.rmtree(tmpdir)
def report(survey, filter, filename=None, papersize=None, small=0, suppress=None, tex_only=False): assert isinstance(survey, model.survey.Survey) # compile clifilter filter = clifilter.clifilter(survey, filter) # First: calculate buddies # init buddies survey.questionnaire.calculate.init() # iterate over sheets survey.iterate( survey.questionnaire.calculate.read, lambda: survey.sheet.valid and filter() ) # do calculations survey.questionnaire.calculate.calculate() # Second: report buddies # init buddies survey.questionnaire.report.init(small, suppress) # Filename of output if filename is None and tex_only == False: filename = survey.new_path('report_%i.pdf') # Temporary directory for TeX files. if tex_only and filename: tmpdir = filename # Create directory os.makedirs(tmpdir) else: tmpdir = tempfile.mkdtemp() try: # iterate over sheets survey.iterate( survey.questionnaire.report.report, lambda: survey.sheet.valid and filter(), tmpdir ) # Copy class and dictionary files if paths.local_run: cls_file = os.path.join(paths.source_dir, 'tex', 'sdapsreport.cls') dict_files = os.path.join(paths.build_dir, 'tex', '*.dict') dict_files = glob.glob(dict_files) else: cls_file = os.path.join(paths.prefix, 'share', 'sdaps', 'tex', 'sdapsreport.cls') dict_files = os.path.join(paths.prefix, 'share', 'sdaps', 'tex', '*.dict') dict_files = glob.glob(dict_files) shutil.copyfile(cls_file, os.path.join(tmpdir, 'sdapsreport.cls')) for dict_file in dict_files: shutil.copyfile(dict_file, os.path.join(tmpdir, os.path.basename(dict_file))) texfile = codecs.open(os.path.join(tmpdir, 'report.tex'), 'w', 'utf-8') author = _('author|Unknown') extra_info = [] for key, value in survey.info.iteritems(): if key == 'Author': author = value continue extra_info.append(u'\\addextrainfo{%(key)s}{%(value)s}' % {'key': key, 'value': value}) extra_info = u'\n'.join(extra_info) texfile.write(r"""\documentclass[%(language)s,%(papersize)s]{sdapsreport} \usepackage{ifxetex} \ifxetex \else \usepackage[utf8]{inputenc} \fi \usepackage[%(language)s]{babel} \title{%(title)s} \subject{%(title)s} \author{%(author)s} \addextrainfo{%(turned_in)s}{%(count)i} %(extra_info)s \begin{document} \maketitle """ % {'language': _('tex language|english'), 'title': _(u'sdaps report'), 'turned_in': _('Turned in Questionnaires'), 'title': survey.title, 'author': author, 'extra_info': extra_info, 'count': survey.questionnaire.calculate.count, 'papersize' : paper.get_tex_papersize(papersize)}) survey.questionnaire.report.write(texfile, tmpdir) texfile.write(r""" \end{document} """) if tex_only: print _("The TeX project with the report data is located at '%s'.") % tmpdir return print _("Running %s now twice to generate the report.") % defs.latex_engine subprocess.call([defs.latex_engine, '-halt-on-error', '-interaction', 'batchmode', os.path.join(tmpdir, 'report.tex')], cwd=tmpdir) # And again subprocess.call([defs.latex_engine, '-halt-on-error', '-interaction', 'batchmode', os.path.join(tmpdir, 'report.tex')], cwd=tmpdir) if not os.path.exists(os.path.join(tmpdir, 'report.pdf')): print _("Error running \"%s\" to compile the LaTeX file.") % defs.latex_engine raise AssertionError('PDF file not generated') shutil.move(os.path.join(tmpdir, 'report.pdf'), filename) except: print _("An occured during creation of the report. Temporary files left in '%s'." % tmpdir) raise shutil.rmtree(tmpdir)