Esempio n. 1
0
        def buildCSV(formItem, items):

            items = list(items)
            keys = set()
            map(lambda item: keys.update(item.data.keys()), items)
            keys = ['ctime'] + list(keys)
            
            def genRows():

                # Headers
                yield dict([(k,k) for k in keys])

                # Answer set
                for item in items:
                    rv = {}
                    rv.update( dict([(key,item.data.get(key,'') or '') for key in keys]) )
                    rv['ctime'] = str(item.ctime)
                    yield rv

            buf = StringIO()
            writer = csv.DictWriter(buf, keys)
            writer.writerows(csvutil.encodeDictFilter(genRows()))
            buf.flush()

            from nevow import inevow, static
            filename=str('%s_data.csv'%formItem.name)
            inevow.IRequest(ctx).setHeader('Cache-Control',
                    'no-cache, must-revalidate, no-store')
            inevow.IRequest(ctx).setHeader('Content-disposition',
                    'attachement ; filename=%s'%filename)
            return static.Data(buf.getvalue(), mimetypes.guess_type(filename)[0])
Esempio n. 2
0
        def gotAnswers(answers):

            questionnaire, questions = csvpack.parse(self.questionnaire._CSVPackDir())
            keys = [n[-1].fullKey for n in questionnaire.walk() if n[-1].isQuestion()]

            def genRows():

                # Headers
                yield dict([(k,k) for k in keys])

                # Answer set
                for answer in answers:
                    yield dict([(key,answer.answers.get(key,'') or '') for key in keys])

            buf = StringIO()
            writer = csv.DictWriter(buf, keys)
            writer.writerows(csvutil.encodeDictFilter(genRows()))
            buf.flush()

            from nevow import inevow, static
            inevow.IRequest(ctx).setHeader('Cache-Control',
                    'no-cache, must-revalidate, no-store')
            return static.Data(buf.getvalue(), mimetypes.guess_type(name)[0])