def _salva_arquivo(self):
     self.arquivo = Arquivo(
         periodo=self.periodo, arquivo=self.path,
         gerado_por=self.request.user
     )
     self.arquivo.save()
class QuerysetReporter(object):
    '''QuerysetReporter object'''

    def __init__(self, queryset, request, *args, **kwargs):

        self.queryset = queryset
        self.request = request
        
        if self._requisicao_valida(request):
            self.values = self.queryset.values()
            self._cria_arquivo()
            messages.error(request, _(u'arquivo criado: %s' % self.path))

    def _requisicao_valida(self, request):
        '''Método interno que verifica se a requisição é valida buscando
        por um período debugável na base.
        '''

        if request.method == 'GET':
            self.token = request.GET.get('token', None)
            self.now = datetime.now()
            if self.token:
                try:
                    self.periodo = Periodo.objects.get(
                        token=self.token, inicio__lte=self.now,
                        termino__gte=self.now, ativo=True
                    )
                    return True
                except Periodo.DoesNotExist:
                    pass
            
        return False

    def _renderiza_html(self):
        template = 'reporter.html'
        context = {
            'title': self.filename,
            'thead': [
                key for key in self.values[0]
            ] if self.values else None,
            'tbody': self.values,
        }
        return render_to_string(template, context)

    def _salva_arquivo(self):
        self.arquivo = Arquivo(
            periodo=self.periodo, arquivo=self.path,
            gerado_por=self.request.user
        )
        self.arquivo.save()

    def _cria_arquivo(self):
        self.filename = "%s_%s.html" % (self.token, str(uuid.uuid4())[:8])
        path = "%s%s" % (REPORTER_FILES, self.filename)

        self.path = default_storage.save(
            path, ContentFile(self._renderiza_html().encode('utf-8'))
        )

        self._salva_arquivo()

    def get_queryset(self):
        '''Retorna a queryset'''
        return self.queryset