3
from horizon import tables
4
from .base import BaseUsage
7
LOG = logging.getLogger(__name__)
10
class UsageView(tables.DataTableView):
12
show_terminated = True
14
def __init__(self, *args, **kwargs):
15
super(UsageView, self).__init__(*args, **kwargs)
16
if not issubclass(self.usage_class, BaseUsage):
17
raise AttributeError("You must specify a usage_class attribute "
18
"which is a subclass of BaseUsage.")
20
def get_template_names(self):
21
if self.request.GET.get('format', 'html') == 'csv':
22
return ".".join((self.template_name.rsplit('.', 1)[0], 'csv'))
23
return self.template_name
25
def get_content_type(self):
26
if self.request.GET.get('format', 'html') == 'csv':
31
tenant_id = self.kwargs.get('tenant_id', self.request.user.tenant_id)
32
self.usage = self.usage_class(self.request, tenant_id)
33
self.usage.summarize(*self.usage.get_date_range())
34
self.kwargs['usage'] = self.usage
35
return self.usage.usage_list
37
def get_context_data(self, **kwargs):
38
context = super(UsageView, self).get_context_data(**kwargs)
39
context['table'].kwargs['usage'] = self.usage
40
context['form'] = self.usage.form
41
context['usage'] = self.usage
44
def render_to_response(self, context, **response_kwargs):
45
resp = self.response_class(request=self.request,
46
template=self.get_template_names(),
48
content_type=self.get_content_type(),
50
if self.request.GET.get('format', 'html') == 'csv':
51
resp['Content-Disposition'] = 'attachment; filename=usage.csv'
52
resp['Content-Type'] = 'text/csv'