[open-ils-commits] r617 - servres/trunk/conifer/syrup/views (artunit)
svn at svn.open-ils.org
svn at svn.open-ils.org
Sun Aug 16 07:38:51 EDT 2009
Author: artunit
Date: 2009-08-16 07:38:50 -0400 (Sun, 16 Aug 2009)
New Revision: 617
Modified:
servres/trunk/conifer/syrup/views/general.py
Log:
using xslt for formatting z39.50 results
Modified: servres/trunk/conifer/syrup/views/general.py
===================================================================
--- servres/trunk/conifer/syrup/views/general.py 2009-08-13 18:59:23 UTC (rev 616)
+++ servres/trunk/conifer/syrup/views/general.py 2009-08-16 11:38:50 UTC (rev 617)
@@ -1,148 +1,172 @@
-from _common import *
-from django.utils.translation import ugettext as _
-from search import *
-
-#-----------------------------------------------------------------------------
-
-def welcome(request):
- return g.render('welcome.xhtml')
-
-# MARK: propose we get rid of this. We already have a 'Courses' browser.
-def open_courses(request):
- page_num = int(request.GET.get('page', 1))
- count = int(request.GET.get('count', 5))
- paginator = Paginator(models.Course.objects.all(), count) # fixme, what filter?
- return g.render('open_courses.xhtml', paginator=paginator,
- page_num=page_num,
- count=count)
-# MARK: propose we drop this too. We have a browse.
-def instructors(request):
- page_num = int(request.GET.get('page', 1))
- count = int(request.GET.get('count', 5))
- action = request.GET.get('action', 'browse')
- if action == 'join':
- paginator = Paginator(models.User.active_instructors(), count)
- elif action == 'drop':
- paginator = Paginator(models.Course.objects.all(), count) # fixme, what filter?
- else:
- paginator = Paginator(models.Course.objects.all(), count) # fixme, what filter?
-
- return g.render('instructors.xhtml', paginator=paginator,
- page_num=page_num,
- count=count)
-
-def instructor_search(request, instructor):
- return search(request, with_instructor=instructor)
-
-# MARK: propose we get rid of this. We have browse.
-def departments(request):
- raise NotImplementedError
-
-
-def user_prefs(request):
- if request.method != 'POST':
- return g.render('prefs.xhtml')
- else:
- profile = request.user.get_profile()
- profile.wants_email_notices = bool(request.POST.get('wants_email_notices'))
- profile.save()
- return HttpResponseRedirect('../')
-
-def z3950_test(request):
- #testing JZKitZ3950 - it seems to work, but i have a character set problem
- #with the returned marc
- #nope - the problem is weak mapping with the limited solr test set
- #i think this can be sorted out
-
- #conn = zoom.Connection ('z3950.loc.gov', 7090)
- #conn = zoom.Connection ('webvoy.uwindsor.ca', 9000)
- #solr index with JZKitZ3950 wrapping
- conn = zoom.Connection ('127.0.0.1', 2100)
- # conn = zoom.Connection ('127.0.0.1', 2100)
- print("connecting...")
- conn.databaseName = 'Test'
- # conn.preferredRecordSyntax = 'XML'
- conn.preferredRecordSyntax = 'USMARC'
- query = zoom.Query ('CCL', 'ti="agar"')
- res = conn.search (query)
- collector = []
- # if we wanted to get into funkiness
- m = zmarc.MARC8_to_Unicode ()
- for r in res:
- print(type(r.data))
- print(type(m.translate(r.data)))
- rec = zmarc.MARC (r.data, strict=0)
- # rec = zmarc.MARC (rec, strict=0)
- collector.append(str(rec))
-
- conn.close ()
- res_str = "" . join(collector)
- return g.render('z3950_test.xhtml', res_str=res_str)
-
-def browse(request, browse_option=''):
- #the defaults should be moved into a config file or something...
- page_num = int(request.GET.get('page', 1))
- count = int(request.GET.get('count', 5))
-
- if browse_option == '':
- queryset = None
- template = 'browse_index.xhtml'
- elif browse_option == 'instructors':
- queryset = models.User.active_instructors()
- queryset = queryset.filter(user_filters(request.user)['instructors'])
- template = 'instructors.xhtml'
- elif browse_option == 'departments':
- queryset = models.Department.objects.filter(active=True)
- template = 'departments.xhtml'
- elif browse_option == 'courses':
- # fixme, course filter should not be (active=True) but based on user identity.
- for_courses = user_filters(request.user)['courses']
- queryset = models.Course.objects.filter(for_courses)
- template = 'courses.xhtml'
-
- queryset = queryset and queryset.distinct()
- paginator = Paginator(queryset, count)
- return g.render(template, paginator=paginator,
- page_num=page_num,
- count=count)
-
- at login_required
-def my_courses(request):
- return g.render('my_courses.xhtml')
-
-def instructor_detail(request, instructor_id):
- page_num = int(request.GET.get('page', 1))
- count = int(request.GET.get('count', 5))
- '''
- i am not sure this is the best way to go from instructor
- to course
- '''
- courses = models.Course.objects.filter(member__user=instructor_id,
- member__role='INSTR')
- filters = user_filters(request.user)
- courses = courses.filter(filters['courses'])
- paginator = Paginator(courses.order_by('title'), count)
-
- '''
- no concept of active right now, maybe suppressed is a better
- description anyway?
- '''
- # filter(active=True).order_by('title'), count)
- instructor = models.User.objects.get(pk=instructor_id)
- return g.render('courses.xhtml',
- custom_title=_('Courses taught by %s') % instructor.get_full_name(),
- paginator=paginator,
- page_num=page_num,
- count=count)
-
-def department_detail(request, department_id):
- page_num = int(request.GET.get('page', 1))
- count = int(request.GET.get('count', 5))
- paginator = Paginator(models.Course.objects.
- filter(department__id=department_id).
- filter(active=True).order_by('title'), count)
-
- return g.render('courses.xhtml', paginator=paginator,
- page_num=page_num,
- count=count)
-
+from _common import *
+from django.utils.translation import ugettext as _
+from search import *
+from lxml import etree
+import libxml2
+import libxslt
+import os
+
+
+BASE_DIRECTORY = os.path.abspath(os.path.dirname(__file__))
+HERE = lambda s: os.path.join(BASE_DIRECTORY, s)
+
+
+#-----------------------------------------------------------------------------
+
+def welcome(request):
+ return g.render('welcome.xhtml')
+
+# MARK: propose we get rid of this. We already have a 'Courses' browser.
+def open_courses(request):
+ page_num = int(request.GET.get('page', 1))
+ count = int(request.GET.get('count', 5))
+ paginator = Paginator(models.Course.objects.all(), count) # fixme, what filter?
+ return g.render('open_courses.xhtml', paginator=paginator,
+ page_num=page_num,
+ count=count)
+# MARK: propose we drop this too. We have a browse.
+def instructors(request):
+ page_num = int(request.GET.get('page', 1))
+ count = int(request.GET.get('count', 5))
+ action = request.GET.get('action', 'browse')
+ if action == 'join':
+ paginator = Paginator(models.User.active_instructors(), count)
+ elif action == 'drop':
+ paginator = Paginator(models.Course.objects.all(), count) # fixme, what filter?
+ else:
+ paginator = Paginator(models.Course.objects.all(), count) # fixme, what filter?
+
+ return g.render('instructors.xhtml', paginator=paginator,
+ page_num=page_num,
+ count=count)
+
+def instructor_search(request, instructor):
+ return search(request, with_instructor=instructor)
+
+# MARK: propose we get rid of this. We have browse.
+def departments(request):
+ raise NotImplementedError
+
+
+def user_prefs(request):
+ if request.method != 'POST':
+ return g.render('prefs.xhtml')
+ else:
+ profile = request.user.get_profile()
+ profile.wants_email_notices = bool(request.POST.get('wants_email_notices'))
+ profile.save()
+ return HttpResponseRedirect('../')
+
+def z3950_test(request):
+ styledoc = libxml2.parseFile('/conifer/syrupsvn/trunk/conifer/static/xslt/test.xsl')
+ styledoc = libxml2.parseFile(HERE('../../static/xslt/test.xsl'))
+ test = libxslt.parseStylesheetDoc(styledoc)
+ #return g.render('z3950_test.xhtml', res_str="")
+
+ #testing JZKitZ3950 - it seems to work, but i have a character set problem
+ #with the returned marc
+ #nope - the problem is weak mapping with the limited solr test set
+ #i think this can be sorted out
+
+ #conn = zoom.Connection ('z3950.loc.gov', 7090)
+ #conn = zoom.Connection ('webvoy.uwindsor.ca', 9000)
+ #solr index with JZKitZ3950 wrapping
+ conn = zoom.Connection ('zed.concat.ca', 210)
+ # conn = zoom.Connection ('127.0.0.1', 2100)
+ print("connecting...")
+ conn.databaseName = 'OWA'
+ conn.preferredRecordSyntax = 'XML'
+ # conn.preferredRecordSyntax = 'USMARC'
+ query = zoom.Query ('CCL', 'ti="agar"')
+ res = conn.search (query)
+ collector = []
+ # if we wanted to get into funkiness
+ m = zmarc.MARC8_to_Unicode ()
+ for r in res:
+ print(type(r.data))
+ print(type(m.translate(r.data)))
+ #rec = zmarc.MARC (r.data, strict=0)
+ # rec = zmarc.MARC (rec, strict=0)
+ #collector.append(str(rec))
+ #collector.append((m.translate(r.data)))
+ # print("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
+ zhit = str("<?xml version=\"1.0\"?>") + (m.translate(r.data))
+ #zhit = m.translate(r.data)
+ #doc = etree.fromstring(zhit)
+ #doc = libxml2.xmlNode(zhit)
+ doc = libxml2.parseDoc(zhit)
+ #print(str("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") + (m.translate(r.data)))
+ #print(zhit)
+ print(test.applyStylesheet(doc, None))
+
+ conn.close ()
+ res_str = "" . join(collector)
+ return g.render('z3950_test.xhtml', res_str=res_str)
+
+def browse(request, browse_option=''):
+ #the defaults should be moved into a config file or something...
+ page_num = int(request.GET.get('page', 1))
+ count = int(request.GET.get('count', 5))
+
+ if browse_option == '':
+ queryset = None
+ template = 'browse_index.xhtml'
+ elif browse_option == 'instructors':
+ queryset = models.User.active_instructors()
+ queryset = queryset.filter(user_filters(request.user)['instructors'])
+ template = 'instructors.xhtml'
+ elif browse_option == 'departments':
+ queryset = models.Department.objects.filter(active=True)
+ template = 'departments.xhtml'
+ elif browse_option == 'courses':
+ # fixme, course filter should not be (active=True) but based on user identity.
+ for_courses = user_filters(request.user)['courses']
+ queryset = models.Course.objects.filter(for_courses)
+ template = 'courses.xhtml'
+
+ queryset = queryset and queryset.distinct()
+ paginator = Paginator(queryset, count)
+ return g.render(template, paginator=paginator,
+ page_num=page_num,
+ count=count)
+
+ at login_required
+def my_courses(request):
+ return g.render('my_courses.xhtml')
+
+def instructor_detail(request, instructor_id):
+ page_num = int(request.GET.get('page', 1))
+ count = int(request.GET.get('count', 5))
+ '''
+ i am not sure this is the best way to go from instructor
+ to course
+ '''
+ courses = models.Course.objects.filter(member__user=instructor_id,
+ member__role='INSTR')
+ filters = user_filters(request.user)
+ courses = courses.filter(filters['courses'])
+ paginator = Paginator(courses.order_by('title'), count)
+
+ '''
+ no concept of active right now, maybe suppressed is a better
+ description anyway?
+ '''
+ # filter(active=True).order_by('title'), count)
+ instructor = models.User.objects.get(pk=instructor_id)
+ return g.render('courses.xhtml',
+ custom_title=_('Courses taught by %s') % instructor.get_full_name(),
+ paginator=paginator,
+ page_num=page_num,
+ count=count)
+
+def department_detail(request, department_id):
+ page_num = int(request.GET.get('page', 1))
+ count = int(request.GET.get('count', 5))
+ paginator = Paginator(models.Course.objects.
+ filter(department__id=department_id).
+ filter(active=True).order_by('title'), count)
+
+ return g.render('courses.xhtml', paginator=paginator,
+ page_num=page_num,
+ count=count)
+
More information about the open-ils-commits
mailing list