Example #1
0
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)
Example #2
0
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)
Example #3
0
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()
Example #4
0
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()
Example #5
0
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()
Example #6
0
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()
Example #7
0
File: gui.py Project: crabhi/sdaps
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()
Example #8
0
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()
Example #9
0
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()
Example #10
0
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)
Example #11
0
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)