department = Department.objects.get(organization=organization, name=department_name)
return [course.to_dict() for course in Course.objects.filter(department=department)]
- def pull(request, organization_name, department_name):
+ def pull(request, organization_name):
+ from teleforma.models import Organization, Department
organization = Organization.objects.get(name=organization_name)
- department = Department.objects.get(name=department_name, organization=organization)
- url = 'http://' + department.domain + '/json/'
- s = ServiceProxy(url)
-
- remote_list = s.teleforma.get_course_list(organization_name, department.name)
- for course_dict in remote_list['result']:
- course = Course.objects.filter(code=course_dict['code'])
- if not course:
- course = Course()
- else:
- course = course[0]
- course.from_dict(course_dict)
+ departments = Department.objects.filter(organization=organization)
+ for department in departments:
+ url = 'http://' + department.domain + '/json/'
+ s = ServiceProxy(url)
+ remote_list = s.teleforma.get_course_list(organization_name, department.name)
+ if remote_list['result']:
+ for course_dict in remote_list['result']:
+ course = Course.objects.filter(code=course_dict['code'], department=department)
+ if not course:
+ course = Course()
+ else:
+ course = course[0]
+ course.from_dict(course_dict)
-
+
@jsonrpc_method('teleforma.get_dep_courses')
def get_dep_courses(request, id):
department = Department.objects.get(id=id)
return [p.to_json_dict() for p in professors]
def pull(request, host=None):
- if host:
- url = 'http://' + host + '/json/'
- else:
- url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/'
- s = ServiceProxy(url)
-
- remote_list = s.teleforma.get_professor_list()
- for professor_dict in remote_list['result']:
- user, c = User.objects.get_or_create(username=professor_dict['username'])
- user.first_name = professor_dict['first_name']
- user.last_name = professor_dict['last_name']
- user.email = professor_dict['email']
- user.save()
+ from teleforma.models import Organization, Department
+ departments = Department.objects.all()
+ professors_old = Professor.objects.all()
+ professors_new = []
- professor, c = Professor.objects.get_or_create(user=user)
- for course_code in professor_dict['courses']:
- course = Course.objects.filter(code=course_code)
- if course:
- if not course[0] in professor.courses.all():
- professor.courses.add(course[0])
- professor.save()
+ for department in departments:
+ url = 'http://' + department.domain + '/json/'
+ s = ServiceProxy(url)
+ remote_list = s.teleforma.get_professor_list()
+ for professor_dict in remote_list['result']:
+ user, c = User.objects.get_or_create(username=professor_dict['username'])
+ user.first_name = professor_dict['first_name']
+ user.last_name = professor_dict['last_name']
+ user.email = professor_dict['email']
+ user.save()
+
+ professor, c = Professor.objects.get_or_create(user=user)
+ for course_code in professor_dict['courses']:
+ course = Course.objects.filter(code=course_code)
+ if course:
+ if not course[0] in professor.courses.all():
+ professor.courses.add(course[0])
+ professor.save()
+ professors_new.append(professor)
+ #print professor
+
+ for professor in professors_old:
+ if not professor in professors_new:
+ professor.delete()
+ class WebClassGroupView(View):
+
+ @jsonrpc_method('teleforma.get_web_class_group_list')
+ def get_web_class_group_list(request):
+ web_class_groups = WebClassGroup.objects.all()
+ return [w.to_json_dict() for w in web_class_groups]
+
+ def pull(request, host=None):
+ if host:
+ url = 'http://' + host + '/json/'
+ else:
+ url = 'http://' + settings.TELECASTER_MASTER_SERVER + '/json/'
+ s = ServiceProxy(url)
+
+ remote_list = s.teleforma.get_web_class_group_list()
+ for web_class_group_dict in remote_list['result']:
+ web_class_group, c = WebClassGroup.objects.get_or_create(name=web_class_group_dict['name'])
+
+
class HelpView(TemplateView):
template_name='teleforma/help.html'
return super(HelpView, self).dispatch(*args, **kwargs)
+class SourcesStatusView(ListView):
+
+ model = Source
+ template_name='teleforma/source_monitors.html'
+
+ @jsonrpc_method('telecaster.get_source_status')
+ def get_source_status(request, public_id):
+ source = Source.objects.get(public_id=public_id)
+ url = 'http://' + source.ip + '/json/'
+ service = ServiceProxy(url)
+ status = s.teleforma.get_server_status()
+ return status
+
+ @jsonrpc_method('telecaster.get_source_station_status')
+ def get_source_station_status(request, public_id):
+ source = Source.objects.get(public_id=public_id)
+ url = 'http://' + source.ip + '/json/'
+ service = ServiceProxy(url)
+ station = s.teleforma.get_station_status()
+ return station
+
+ @jsonrpc_method('telecaster.source_station_start')
+ def start(request, station_dict):
+ pass
+
+ @jsonrpc_method('telecaster.source_station_stop')
+ def stop(request):
+ pass
+
++
+ class PDFTemplateResponseMixin(TemplateResponseMixin):
+ """
+ Mixin for Django class based views.
+ Switch normal and pdf template based on request.
+
+ The switch is made when the request has a particular querydict, e.g.::
+
+ http://www.example.com?format=pdf
+
+ The key and value of the querydict can be overridable using *as_view()*.
+ That pdf url will be present in the context as *pdf_url*.
+
+ For example it is possible to define a view like this::
+
+ from django.views.generic import View
+
+ class MyView(PDFTemplateResponseMixin, View):
+ template_name = 'myapp/myview.html'
+ pdf_filename = 'report.pdf'
+
+ The pdf generation is automatically done by *xhtml2pdf* using
+ the *myapp/myview_pdf.html* template.
+
+ Note that the pdf template takes the same context as the normal template.
+ """
+ pdf_template_name = None
+ pdf_template_name_suffix = '_pdf'
+ pdf_querydict_key = 'format'
+ pdf_querydict_value = 'pdf'
+ pdf_encoding = 'utf-8'
+ pdf_filename = None
+ pdf_url_varname = 'pdf_url'
+ pdf_kwargs = {}
+
+ def is_pdf(self):
+ value = self.request.REQUEST.get(self.pdf_querydict_key, '')
+ return value.lower() == self.pdf_querydict_value.lower()
+
+ def _get_pdf_template_name(self, name):
+ base, ext = os.path.splitext(name)
+ return '%s%s%s' % (base, self.pdf_template_name_suffix, ext)
+
+ def get_pdf_template_names(self):
+ """
+ If the template name is not given using the class attribute
+ *pdf_template_name*, then it is obtained using normal template
+ names, appending *pdf_template_name_suffix*, e.g.::
+
+ path/to/detail.html -> path/to/detail_pdf.html
+ """
+ if self.pdf_template_name is None:
+ names = super(PDFTemplateResponseMixin, self).get_template_names()
+ return map(self._get_pdf_template_name, names)
+ return [self.pdf_template_name]
+
+ def get_pdf_filename(self):
+ """
+ Return the pdf attachment filename.
+ If the filename is None, the pdf will not be an attachment.
+ """
+ return self.pdf_filename
+
+ def get_pdf_url(self):
+ """
+ This method is used to put the pdf url in the context.
+ """
+ querydict = self.request.GET.copy()
+ querydict[self.pdf_querydict_key] = self.pdf_querydict_value
+ return '%s?%s' % (self.request.path, querydict.urlencode())
+
+ def get_pdf_response(self, context, **response_kwargs):
+ return render_to_pdf(
+ request=self.request,
+ template=self.get_pdf_template_names(),
+ context=context,
+ encoding=self.pdf_encoding,
+ filename=self.get_pdf_filename(),
+ **self.pdf_kwargs
+ )
+
+ def render_to_response(self, context, **response_kwargs):
+ if self.is_pdf():
+ from django.conf import settings
+ context['STATIC_ROOT'] = settings.STATIC_ROOT
+ return self.get_pdf_response(context, **response_kwargs)
+ context[self.pdf_url_varname] = self.get_pdf_url()
+ return super(PDFTemplateResponseMixin, self).render_to_response(
+ context, **response_kwargs)