diff --git a/.gitignore b/.gitignore index 2af83af539628e56987e15ef9d3bcaac1d40815b..c1b5e24029c97d63d9c5ee2521fbb848dd5c8800 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ *.pyc django-*.wsgi static-collected +static/admin/ +static/rest_framework/ diff --git a/gracedb/api.py b/gracedb/api.py index f14228c0ba7853df638d022b4d71075c4738d2b1..df040313e0ade7f69db18d40683c604f042d54ac 100644 --- a/gracedb/api.py +++ b/gracedb/api.py @@ -1517,6 +1517,8 @@ class Files(APIView): except Exception, e: # XXX This needs some thought. response = Response(str(e), status=status.HTTP_400_BAD_REQUEST) + # XXX Uhm, we don't to try creating a log message for this, right? + return response # Create a log entry to document the file upload. logentry = EventLog(event=event, diff --git a/gracedb/forms.py b/gracedb/forms.py index f89210aef13365a7f9899caccd06aa10a97d4122..5549884197135a3aac02349a55c27381cfde2484 100644 --- a/gracedb/forms.py +++ b/gracedb/forms.py @@ -22,11 +22,7 @@ class GraceQueryField(forms.CharField): from django.db.models import Q queryString = forms.CharField.clean(self, queryString) try: - if self.select_subclasses: - return Event.objects.filter(parseQuery(queryString)).select_subclasses() - else: - return Event.objects.filter(parseQuery(queryString)).distinct() - + return Event.objects.filter(parseQuery(queryString)).distinct() except ParseException, e: err = "Error: " + escape(e.pstr[:e.loc]) + errorMarker + escape(e.pstr[e.loc:]) raise forms.ValidationError(mark_safe(err)) @@ -38,20 +34,9 @@ class GraceQueryField(forms.CharField): # What could this be and how can we handle it better? XXX raise forms.ValidationError(str(e)+str(type(e))) - def __init__(self, *args, **kwargs): - self.select_subclasses = False - if 'select_subclasses' in kwargs.keys(): - self.select_subclasses = kwargs.pop('select_subclasses') - super(GraceQueryField, self).__init__(*args, **kwargs) - class SimpleSearchForm(forms.Form): query = GraceQueryField(required=False, widget=forms.TextInput(attrs={'size':60})) -# XXX There must be a better way of doing this. -class SimpleSearchFormWithSubclasses(forms.Form): - query = GraceQueryField(required=False, widget=forms.TextInput(attrs={'size':60}), - select_subclasses=True) - class CreateEventForm(forms.Form): groupChoices = [("","")]+[(g.name, g.name) for g in Group.objects.all()] typeChoices= [("","")]+list(Event.ANALYSIS_TYPE_CHOICES) diff --git a/gracedb/models.py b/gracedb/models.py index 9999fcf6a2eedf1acbe1b70930cf960b652e0dfe..28d54b60da459ef20b9c1c407730147e968add6c 100644 --- a/gracedb/models.py +++ b/gracedb/models.py @@ -112,10 +112,12 @@ class Event(models.Model): def weburl(self): # XXX Not good. But then, it never was. - return "https://losc-gracedb.ligo.org/gracedb/events/%s" % self.graceid() - return "https://gracedb.ligo.org/gracedb-files/%s" % self.graceid() - return "https://ldas-jobs.phys.uwm.edu/gracedb/data/%s" % self.graceid() +# return "https://losc-gracedb.ligo.org/gracedb/events/%s" % self.graceid() +# return "https://gracedb.ligo.org/gracedb-files/%s" % self.graceid() +# return "https://ldas-jobs.phys.uwm.edu/gracedb/data/%s" % self.graceid() + return reverse('file_list', args=[self.graceid()]) + # XXX This should be considered deprecated. (Branson, July 22, 2014.) def clusterurl(self): #return "pcdev1.phys.uwm.edu:/archive/gracedb/data/%s" % self.graceid() return "file://pcdev1.phys.uwm.edu/archive/gracedb/data/%s" % self.graceid() diff --git a/gracedb/reports.py b/gracedb/reports.py index d4eaefe24b735a3f4d9641b3981dfc8e2e4bace6..3e97111cd761e284e293adfff5c9162d2160f882 100644 --- a/gracedb/reports.py +++ b/gracedb/reports.py @@ -13,7 +13,7 @@ import os, json from django.core.urlresolvers import reverse from models import CoincInspiralEvent ,SingleInspiral -from forms import SimpleSearchFormWithSubclasses +from forms import SimpleSearchForm from query import parseQuery @@ -129,6 +129,7 @@ def to_png_image(out = sys.stdout): return base64.b64encode(f.getvalue()) def gstlalcbc_report(request, format=""): + if not request.user or not request.user.is_authenticated(): return HttpResponseForbidden("Forbidden") @@ -142,22 +143,25 @@ def gstlalcbc_report(request, format=""): t_low = posixToGpsTime(time.mktime(t_low.timetuple())) query = 'CBC LowMass %d .. %d' % (t_low, t_high) rawquery = query - form = SimpleSearchFormWithSubclasses({'query': query}) + form = SimpleSearchForm({'query': query}) else: - form = SimpleSearchFormWithSubclasses(request.GET) + form = SimpleSearchForm(request.GET) rawquery = request.GET['query'] else: - form = SimpleSearchFormWithSubclasses(request.POST) + form = SimpleSearchForm(request.POST) rawquery = request.POST['query'] if form.is_valid(): objects = form.cleaned_data['query'] + object_list = list(objects) - # Check for foreign objects. - for obj in objects: - if not isinstance(obj, CoincInspiralEvent): + # Try upcasting to CoincInspiralEvents + for i in range(len(object_list)): + try: + object_list[i] = CoincInspiralEvent.objects.get(id=object_list[i].id) + except: errormsg = 'Your query returned items that are not CoincInspiral Events. ' errormsg += 'Please try again.' - form = SimpleSearchFormWithSubclasses() + form = SimpleSearchForm() return render_to_response('gracedb/gstlalcbc_report.html', { 'form':form, 'message':errormsg}, context_instance=RequestContext(request)) @@ -175,7 +179,7 @@ def gstlalcbc_report(request, format=""): if not gpsrange: # Bounce back to the user with an error message errormsg = 'Your query does not have a gpstime range. Please try again.' - form = SimpleSearchFormWithSubclasses() + form = SimpleSearchForm() return render_to_response('gracedb/gstlalcbc_report.html', { 'form':form, 'message':errormsg}, context_instance=RequestContext(request)) @@ -196,7 +200,8 @@ def gstlalcbc_report(request, format=""): { 'form':form, 'message':errormsg}, context_instance=RequestContext(request)) - clustered_events = cluster(objects) + #clustered_events = cluster(objects) + clustered_events = cluster(object_list) clustered_events = sorted(clustered_events, None, key=lambda x: x.far) # Make IFAR plot. @@ -212,7 +217,8 @@ def gstlalcbc_report(request, format=""): plot.figure(figsize=(6,5)) plot.loglog(ifars[::-1], N[::-1]) - plot.fill_between(expected_ifars[::-1], down[::-1], up[::-1], alpha=0.1) + #XXX This call to fill_between was causing the entire thread to hang. + #plot.fill_between(expected_ifars[::-1], down[::-1], up[::-1], alpha=0.1) plot.loglog(expected_ifars[::-1], eN[::-1]) plot.ylim([0.9, len(ifars)]) plot.xlabel('IFAR (s)') diff --git a/gracedb/urls.py b/gracedb/urls.py index 62a4daadddcae14d57ecdef84894d75ba5ad44c1..b1c174b0b50ea277f1bdfa10d5d0b6291483f360 100644 --- a/gracedb/urls.py +++ b/gracedb/urls.py @@ -1,5 +1,7 @@ -from django.conf.urls.defaults import * +# Changed for Django 1.6 +#from django.conf.urls.defaults import * +from django.conf.urls import patterns, url, include #import django.views.generic.list_detail @@ -14,7 +16,7 @@ urlpatterns = patterns('gracedb.views', url (r'^skyalert/(?P<graceid>[GEHT]\d+)', 'skyalert', name="skyalert"), url (r'^neighbors/(?P<graceid>[GEHT]\d+)/\(?(?P<delta1>[-+]?\d+)(,(?P<delta2>[-+]?\d+)\)?)?', 'neighbors', name="neighbors"), url (r'^(?P<graceid>[GEHT]\d+)$', 'view', name="view2"), - url (r'^skymapViewer/(?P<graceid>[GEHT]\d+)$', 'skymap_view', name="skymap_view"), + url (r'^(?P<graceid>[GEHT]\d+)/files/$', 'file_list', name="file_list"), url (r'^(?P<graceid>[GEHT]\d+)/files/(?P<filename>.*)$', download, name="file"), url (r'^(?P<graceid>[GEHT]\d+)/log/(?P<num>([\d]*|preview))$', 'logentry', name="logentry"), url (r'^(?P<graceid>[GEHT]\d+)/log/(?P<num>\d+)/tag/(?P<tagname>\w+)$', 'taglogentry', name="taglogentry"), diff --git a/gracedb/urls_rest.py b/gracedb/urls_rest.py index 53cd4ea07ea0c8a09abec80aec05b051ab2d344b..1f40a6ead51b55eb88cb8fa523195bade01dc88d 100644 --- a/gracedb/urls_rest.py +++ b/gracedb/urls_rest.py @@ -1,5 +1,7 @@ -from django.conf.urls.defaults import patterns, url +# Changed for Django 1.6 +from django.conf.urls import patterns, url +#from django.conf.urls.defaults import patterns, url # rest_framework from gracedb.api import GracedbRoot diff --git a/gracedb/views.py b/gracedb/views.py index c556b8e35e480c67e27cbc00355ac8ef3f11faa6..6d06d1bb688f52d3c996e937d59455afa9c21761 100644 --- a/gracedb/views.py +++ b/gracedb/views.py @@ -9,7 +9,9 @@ from django.contrib.sites.models import Site from django.utils.html import strip_tags, escape, urlize from django.utils.safestring import mark_safe -from django.views.generic.list_detail import object_detail, object_list +# Upgrade to Django 1.5: No more function-based generic views. +#from django.views.generic.list_detail import object_list +from django.views.generic.list import ListView from django.contrib.auth.decorators import login_required from models import Event, Group, EventLog, Labelling, Label, Tag @@ -18,7 +20,6 @@ from models import MultiBurstEvent from models import GrbEvent from models import SingleInspiral from forms import CreateEventForm, EventSearchForm, SimpleSearchForm -from forms import SimpleSearchFormWithSubclasses from alert import issueAlert, issueAlertForLabel, issueAlertForUpdate from translator import handle_uploaded_data from query import parseQuery @@ -261,8 +262,12 @@ def _createEventFromForm(request, form): temp_data_loc = handle_uploaded_data(event, uploadDestination) try: # Send an alert. + # XXX This reverse will give the web-interface URL, not the REST URL. + # This could be a problem if anybody ever tries to use it. + # NOTE: The clusterurl method should be considered deprecated. issueAlert(event, - os.path.join(event.clusterurl(), "private", f.name), + #os.path.join(event.clusterurl(), "private", f.name), + request.build_absolute_uri(reverse("file", args=[event.graceid(),f.name])), temp_data_loc) except Exception, e: warnings += ["Problem issuing an alert (%s)" % e] @@ -784,14 +789,36 @@ def search(request, format=""): title = "Query Results. %s event" % objects.count() else: title = "Query Results. %s events" % objects.count() - context = { - 'title': title, - 'form': form, - 'formAction': reverse(search), - 'maxCount': limit, - 'rawquery' : rawquery, - } - return object_list(request, objects, extra_context=context) + # XXX This seems like a hacky misuse of generic views. + # In Django 1.3 and earlier, things were simpler: + # + # return object_list(request, objects, extra_context=context) + # + # But with for compatibility, with Django 1.6, this becomes: + class EventListView(ListView): + queryset = objects + template_name = "gracedb/event_list.html" + + def dispatch(self, request, *args, **kwargs): + # NOTE: We have to hack around the handler selector, because + # the actual request might have been a POST. + handler = getattr(self, 'get', self.http_method_not_allowed) + return handler(request, *args, **kwargs) + + # This is how to get the extra context in, according to the django docs. + def get_context_data(self, **kwargs): + context = super(EventListView, self).get_context_data(**kwargs) + # Insert the extra context. + context.update({ + 'title' : title, + 'form' : form, + 'formAction' : reverse(search), + 'maxCount' : limit, + 'rawquery' : rawquery, + }) + return context + + return EventListView.as_view()(request) return render_to_response('gracedb/query.html', { 'form' : form, @@ -889,15 +916,39 @@ def oldsearch(request): title = "Query Results. %s event" % objects.count() else: title = "Query Results. %s events" % objects.count() - extra_context = {'title': title } textQuery = " ".join(textQuery) simple_form = SimpleSearchForm({'query': textQuery}) - extra_context['form'] = simple_form - extra_context['maxCount'] = MAX_QUERY_RESULTS - extra_context['rawquery' ] = textQuery - return object_list(request, objects, extra_context=extra_context) + # XXX This seems like a hacky misuse of generic views. + # In Django 1.3 and earlier, things were simpler: + # + # return object_list(request, objects, extra_context=context) + # + # But with for compatibility, with Django 1.6, this becomes: + class EventListView(ListView): + queryset = objects + template_name = "gracedb/event_list.html" + + def dispatch(self, request, *args, **kwargs): + # NOTE: We have to hack around the handler selector, because + # the actual request might have been a POST. + handler = getattr(self, 'get', self.http_method_not_allowed) + return handler(request, *args, **kwargs) + + # This is how to get the extra context in, according to the django docs. + def get_context_data(self, **kwargs): + context = super(EventListView, self).get_context_data(**kwargs) + # Insert the extra context. + context.update({ + 'title' : title, + 'form' : simple_form, + 'maxCount' : MAX_QUERY_RESULTS, + 'rawquery' : textQuery, + }) + return context + + return EventListView.as_view()(request) return render_to_response('gracedb/query.html', @@ -1235,42 +1286,27 @@ def performance(request): context, context_instance=RequestContext(request)) -def skymap_view(request, graceid): - filename=request.GET.get('filename','skymap.json') - file_version=request.GET.get('version', None) - viewer=request.GET.get('viewer','aladin') - context = {} +# A view for the list of files associated with an event. +# We're deliberately leaving out the /general directory. +# The idea is to get rid of that horrible /gracedb-files/ url. +def file_list(request, graceid): try: event = Event.getByGraceid(graceid) except Event.DoesNotExist: - raise Http404 + return HttpResponseNotFound("Event not found") - if viewer not in ['aladin','wwt',]: - return HttpResponseBadRequest("Unsupported viewer. Choices are 'aladin' or 'wwt'.") - - # Now look for the JSON skymap contours file. - if file_version: - filename += ',%s' % file_version - filepath = os.path.join(event.datadir(), filename) - - content = None - if not os.path.exists(filepath): - response = HttpResponseNotFound("File and/or version does not exist") - elif not os.access(filepath, os.R_OK): - response = HttpResponseNotFound("File not readable") - elif os.path.isfile(filepath): - f = open(filepath, "r") - content = f.read() - # XXX Removing the newlines is necessary for some reason. - content = content.replace('\n','') - f.close() - - context['content'] = content - context['graceid'] = graceid - # I wonder if there is a nicer way to get it into the context - context['SKYMAP_VIEWER_MEDIA_URL'] = settings.SKYMAP_VIEWER_MEDIA_URL; - return render_to_response( - 'gracedb/%s_skymap_viewer.html' % viewer, context, - context_instance=RequestContext(request)) + f = [] + for dirname, dirnames, filenames in os.walk(event.datadir()): + f.extend(filenames) + break + context = {} + context['file_list'] = f + context['title'] = 'Files for %s' % graceid + context['graceid'] = graceid + + return render_to_response( + 'gracedb/event_filelist.html', + context, + context_instance=RequestContext(request)) diff --git a/ligoauth/management/commands/refresh_users_from_ldap.py b/ligoauth/management/commands/refresh_users_from_ldap.py index 5a115eee078107b63a5edcdc245818890030ba7d..a24d611b8f30e9b12c671fe0cb23251f525c0f55 100644 --- a/ligoauth/management/commands/refresh_users_from_ldap.py +++ b/ligoauth/management/commands/refresh_users_from_ldap.py @@ -39,7 +39,15 @@ class Command(NoArgsCommand): principal = ldap_result['krbPrincipalName'][0] # Update/Create LigoLdapUser entry - user, created = LigoLdapUser.objects.get_or_create(ldap_dn=ldap_dn) + # This is breaking. XXX Do we need to pass in default values for the underlying User object? + defaults = { + 'first_name' : first_name, + 'last_name' : last_name, + 'email' : email, + 'username' : principal, + 'is_active' : is_active + } + user, created = LigoLdapUser.objects.get_or_create(ldap_dn=ldap_dn, defaults=defaults) changed = created \ or (user.first_name != first_name) \ @@ -61,6 +69,7 @@ class Command(NoArgsCommand): user.save() except Exception, e: print "Failed to save user '%s'. (%s)" % (ldap_dn, first_name+" "+last_name) + print "Reason: %s" % str(e) # update X509 certs for user current_dns = set([ cert.subject for cert in user.x509cert_set.all() ]) diff --git a/manage.py b/manage.py index 52e24d629323162944fb66354a392cef26bb850e..c632a8a38923012b836655195baeadd5c2ffd930 100755 --- a/manage.py +++ b/manage.py @@ -1,14 +1,9 @@ #!/usr/bin/env python -from django.core.management import execute_manager -import os - -try: - import settings # Assumed to be in the same directory. -except ImportError: - import sys - sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) - sys.exit(1) +import os, sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") - execute_manager(settings) + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/settingsdir/branson.py b/settingsdir/branson.py index 10230554f6cbe1cddfe029fd36d475c61ae18423..dd1889e86c14af521be7217f33e0a03e2d47e480 100644 --- a/settingsdir/branson.py +++ b/settingsdir/branson.py @@ -1,7 +1,3 @@ -# XXX I know import * is ugly, but I want the stuff from logSettings to be -# in this namespace. -from logSettings import * - CONFIG_NAME = "Branson" DEBUG = True @@ -16,7 +12,9 @@ DATABASES = { } } -MEDIA_URL = "/branson-static/" +#MEDIA_URL = "/branson-static/" +STATIC_URL = "/branson-static/" +STATIC_ROOT = "/home/branson/gracedbdev/static/" GRACEDB_DATA_DIR = "/home/branson/fake_data" @@ -66,7 +64,7 @@ MIDDLEWARE_CLASSES = [ # 'ligodjangoauth.LigoShibbolethMiddleware', 'ligoauth.middleware.auth.LigoAuthMiddleware', 'maintenancemode.middleware.MaintenanceModeMiddleware', - 'debug_toolbar.middleware.DebugToolbarMiddleware', +# 'debug_toolbar.middleware.DebugToolbarMiddleware', ] INSTALLED_APPS = ( @@ -81,9 +79,150 @@ INSTALLED_APPS = ( 'ligoauth', 'rest_framework', 'south', - 'debug_toolbar', +# 'debug_toolbar', ) -INTERNAL_IPS = ( - '129.89.61.55', -) +#INTERNAL_IPS = ( +# '129.89.61.55', +#) + + +# Settings for Logging. +import logging + +LOG_ROOT = '/home/branson/logs' +LOG_FILE_SIZE = 1024*1024 # 1 MB +LOG_FILE_BAK_CT = 3 +LOG_FORMAT = 'verbose' +LOG_LEVEL = 'DEBUG' + +# Filter objects to separate out each level of alert. +# Otherwise the log files for each level would contain the +# output for each higher level. +class debugOnlyFilter(logging.Filter): + def filter(self,record): + if record.levelname=='DEBUG': + return 1 + return 0 +class infoOnlyFilter(logging.Filter): + def filter(self,record): + if record.levelname=='INFO': + return 1 + return 0 +class debugPlusInfo(logging.Filter): + def filter(self,record): + if record.levelname=='INFO' or record.levelname=='DEBUG': + return 1 + return 0 +class warningOnlyFilter(logging.Filter): + def filter(self,record): + if record.levelname=='WARNING': + return 1 + return 0 +class errorOnlyFilter(logging.Filter): + def filter(self,record): + if record.levelname=='ERROR': + return 1 + return 0 + +# Note that mode for log files is 'a' (append) by default +# The 'level' specifier on the handle is optional, and we +# don't need it since we're using custom filters. +LOGGING = { + 'version': 1, + 'disable_existing_loggers' : True, + 'formatters': { + 'simple': { + 'format': '%(levelname)s %(message)s', + }, + 'verbose': { + 'format': '%(asctime)s: %(name)s: %(message)s', + 'datefmt': '%Y-%m-%d %H:%M:%S', + }, + }, +# 'filters': { +# 'debugOnly': { +# '()': 'settings.logSettings.debugOnlyFilter', +# }, +# 'infoOnly': { +# '()': 'settings.logSettings.infoOnlyFilter', +# }, +# 'debugPlusInfo': { +# '()': 'settings.logSettings.debugPlusInfo', +# }, +# 'warningOnly': { +# '()': 'settings.logSettings.warningOnlyFilter', +# }, +# 'errorOnly': { +# '()': 'settings.logSettings.errorOnlyFilter', +# }, +# }, + 'handlers': { + 'null': { + 'level':'DEBUG', + 'class':'django.utils.log.NullHandler', + }, + 'debug_file': { + 'class': 'logging.handlers.RotatingFileHandler', + 'formatter': LOG_FORMAT, +# Commented out so that the debug file will have *everything* +# That should make it somewhat easier to read through. +# 'filters': ['debugPlusInfo'], + 'filename': '%s/gracedb_debug.log' % LOG_ROOT, + 'maxBytes': LOG_FILE_SIZE, + 'backupCount': LOG_FILE_BAK_CT, + }, +# 'info_file': { +# 'class': 'logging.handlers.RotatingFileHandler', +# 'formatter': LOG_FORMAT, +# 'filters': ['infoOnly'], +# 'filename': '%s/gracedb_info.log' % LOG_ROOT, +# 'maxBytes': LOG_FILE_SIZE, +# 'backupCount': LOG_FILE_BAK_CT, +# }, +# 'warning_file': { +# 'class': 'logging.handlers.RotatingFileHandler', +# 'formatter': LOG_FORMAT, +# 'filters': ['warningOnly'], +# 'filename': '%s/gracedb_warning.log' % LOG_ROOT, +# 'maxBytes': LOG_FILE_SIZE, +# 'backupCount': LOG_FILE_BAK_CT, +# }, +# 'error_file': { +# 'class': 'logging.handlers.RotatingFileHandler', +# 'formatter': LOG_FORMAT, +# 'filters': ['errorOnly'], +# 'filename': '%s/gracedb_error.log' % LOG_ROOT, +# 'maxBytes': LOG_FILE_SIZE, +# 'backupCount': LOG_FILE_BAK_CT, +# }, + 'performance_file': { + 'class': 'logging.FileHandler', + 'formatter': 'simple', + 'filename': '%s/gracedb_performance.log' % LOG_ROOT, + }, + }, + 'loggers': { + 'django': { + 'handlers': ['null'], + 'propagate': True, + 'level': 'INFO', + }, + 'gracedb': { +# 'handlers': ['debug_file', 'info_file', 'warning_file', 'error_file'], + 'handlers': ['debug_file'], + 'propagate': True, + 'level': LOG_LEVEL, + }, + 'middleware': { + 'handlers': ['performance_file'], + 'propagate': True, + 'level': 'INFO', + }, +# 'userprofile': { +# 'handlers': ['debug_file', 'info_file', 'warning_file', 'error_file'], +# 'propagate': True, +# 'level': LOG_LEVEL, +# }, + }, +} diff --git a/settingsdir/default.py b/settingsdir/default.py index 3ecc5db1041c59825d848580c61236ff2cbe7991..6986f058214ec12eb333a8af9998315c3905fc13 100644 --- a/settingsdir/default.py +++ b/settingsdir/default.py @@ -1,5 +1,6 @@ # Suitable for production +ALLOWED_HOSTS = ['*'] DEBUG = False TEMPLATE_DEBUG = DEBUG @@ -136,12 +137,12 @@ USE_I18N = False # Absolute path to the directory that holds media. # Example: "/home/media/media.lawrence.com/" -MEDIA_ROOT = '' +#MEDIA_ROOT = '' # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash if there is a path component (optional in other cases). # Examples: "http://media.lawrence.com", "http://example.com/media/" -MEDIA_URL = '/gracedb-static/' +#MEDIA_URL = '/gracedb-static/' # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a # trailing slash. @@ -156,7 +157,9 @@ TEMPLATE_LOADERS = ( #'django.template.loaders.filesystem.load_template_source', # replaced by... 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.load_template_source', + # Upgrade to 1.4 + #'django.template.loaders.app_directories.load_template_source', + 'django.template.loaders.app_directories.Loader', # 'django.template.loaders.eggs.load_template_source', ) @@ -232,6 +235,7 @@ REST_FRAMEWORK = { STATIC_URL = "/gracedb-static/" +STATIC_ROOT = "/home/gracedb/graceproj/static/" STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html index 76e911a6721002ef1b8fb7547da575c2365c773d..c9894d6f2b7704cd0bf9b69250582ad8b406d9d9 100644 --- a/templates/admin/base_site.html +++ b/templates/admin/base_site.html @@ -2,7 +2,7 @@ {% load i18n %} {% block extrastyle %} - <link rel="stylesheet" href="{{MEDIA_URL}}css/admin-nav.css" /> + <link rel="stylesheet" href="{{STATIC_URL}}css/admin-nav.css" /> {% endblock %} @@ -14,12 +14,12 @@ {% block nav-global %} <ul id="nav"> - <li id="nav-home"><a href="{% url home %}">Home</a></li> - <li id="nav-search"><a href="{% url search %}">Search</a></li> - <li id="nav-create"><a href="{% url create %}">Create</a></li> - <li id="nav-reports"><a href="{% url reports %}">Reports</a></li> - <li id="nav-feeds"><a href="{% url feeds %}">RSS</a></li> - <li id="nav-userprofile"><a href="{% url userprofile-home %}">Options</a></li> + <li id="nav-home"><a href="{% url "home" %}">Home</a></li> + <li id="nav-search"><a href="{% url "search" %}">Search</a></li> + <li id="nav-create"><a href="{% url "create" %}">Create</a></li> + <li id="nav-reports"><a href="{% url "reports" %}">Reports</a></li> + <li id="nav-feeds"><a href="{% url "feeds" %}">RSS</a></li> + <li id="nav-userprofile"><a href="{% url "userprofile-home" %}">Options</a></li> {% if user %}<li id="nav-user">Authenticated as: {{ user.first_name }} {{ user.last_name }}</li>{% endif %} <ul> diff --git a/templates/base.html b/templates/base.html index 82a670103387515a93e6938d6e4474aa23885384..046c2273d1c7154473fc13d7360efe3d82d32427 100644 --- a/templates/base.html +++ b/templates/base.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> - <link rel="stylesheet" href="{{MEDIA_URL}}css/style.css" /> + <link rel="stylesheet" href="{{STATIC_URL}}css/style.css" /> <title>GraceDb | {% block title %}{% endblock %}</title> <!-- START TESTING --> <script type="text/javascript"> @@ -30,13 +30,13 @@ function changeTime(obj, label) { {% block nav %} <ul id="nav"> - <li id="nav-home"><a href="{% url home %}">Home</a></li> - <li id="nav-search"><a href="{% url search %}">Search</a></li> - <li id="nav-create"><a href="{% url create %}">Create</a></li> - <li id="nav-reports"><a href="{% url reports %}">Reports</a></li> - <li id="nav-feeds"><a href="{% url feeds %}">RSS</a></li> - <li id="nav-latest"><a href="{% url latest %}">Latest</a></li> - <li id="nav-userprofile"><a href="{% url userprofile-home %}">Options</a></li> + <li id="nav-home"><a href="{% url "home" %}">Home</a></li> + <li id="nav-search"><a href="{% url "search" %}">Search</a></li> + <li id="nav-create"><a href="{% url "create" %}">Create</a></li> + <li id="nav-reports"><a href="{% url "reports" %}">Reports</a></li> + <li id="nav-feeds"><a href="{% url "feeds" %}">RSS</a></li> + <li id="nav-latest"><a href="{% url "latest" %}">Latest</a></li> + <li id="nav-userprofile"><a href="{% url "userprofile-home" %}">Options</a></li> {% if user %}<li id="nav-user">Authenticated as: {{ user.first_name }} {{user.last_name }}</li>{% endif %} </ul> <center> @@ -68,28 +68,28 @@ function changeTime(obj, label) { <table align="center" width="90%%"> <tr> <td align="center"> - <img width="52" height="36" src="{{MEDIA_URL}}images/ligo-blue.gif"> + <img width="52" height="36" src="{{STATIC_URL}}images/ligo-blue.gif"> <!-- 673px 487px --> </td> <td align="center"> - <img width="164" height="30" src="{{MEDIA_URL}}images/Virgo_logo50.png"> + <img width="164" height="30" src="{{STATIC_URL}}images/Virgo_logo50.png"> <!-- 4,829px 884px --> </td> <td align="center"> {% if user and user.username == "chad.hanna@LIGO.ORG" %} - <img width="194" height="37" src="{{MEDIA_URL}}images/PI_Logo-anim.gif"> + <img width="194" height="37" src="{{STATIC_URL}}images/PI_Logo-anim.gif"> {% else %}{% if user and user.username == "kipp.cannon@LIGO.ORG" %} - <img width="194" height="37" src="{{MEDIA_URL}}images/CITA_logo-anim.gif"> + <img width="194" height="37" src="{{STATIC_URL}}images/CITA_logo-anim.gif"> {% else %} - <img width="107" height="37" src="{{MEDIA_URL}}images/anim2.gif"> + <img width="107" height="37" src="{{STATIC_URL}}images/anim2.gif"> {% endif %}{% endif %} <!-- 287px 101px --> </td> <td align="center"> - <img width="87" height="37" src="{{MEDIA_URL}}images/LSC_logo50.png"> + <img width="87" height="37" src="{{STATIC_URL}}images/LSC_logo50.png"> <!-- 6,261px 2,652px --> </td> </tr> diff --git a/templates/gracedb/event_detail.html b/templates/gracedb/event_detail.html index fe76f287466b5496c53dd1299f528b21cf32cb6b..e8c2b67ed64b760b8a66d235f854ddc6f205875c 100644 --- a/templates/gracedb/event_detail.html +++ b/templates/gracedb/event_detail.html @@ -13,8 +13,8 @@ src="https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"> </script> <script src="http{% if request.is_secure %}s{% endif %}://ajax.googleapis.com/ajax/libs/dojo/1.8.1/dojo/dojo.js" type="text/javascript"></script> - <script src="{{MEDIA_URL}}js/labeltips.js" type="text/javascript"></script> - <link rel="stylesheet" href="{{MEDIA_URL}}css/labeltips.css"> + <script src="{{STATIC_URL}}js/labeltips.js" type="text/javascript"></script> + <link rel="stylesheet" href="{{STATIC_URL}}css/labeltips.css"> <style> .emptyIcon{ background-image: none; @@ -57,13 +57,13 @@ dc += ' <td> \n'; dc += ' <table class="figures"> \n'; dc += ' <tr class="figrow"> \n'; - dc += ' <td> <a href="{{ log.fileurl|urlencode }}" dojoType="dojox.image.LightboxNano"><img height="180" src="{{ log.fileurl|urlencode }}"></a> \n'; + dc += ' <td> <a href="{{ log.fileurl }}" dojoType="dojox.image.LightboxNano"><img height="180" src="{{ log.fileurl }}"></a> \n'; dc += ' </td> \n'; dc += ' </tr> \n'; dc += ' <tr> \n'; dc += ' <td> {{log.comment|sanitize|escapejs}} \n'; {% if log.fileurl %} - dc += ' <a href="{{log.fileurl|urlencode}}">{{log.filename}}.</a> \n'; + dc += ' <a href="{{log.fileurl}}">{{log.filename}}.</a> \n'; {% endif %} dc += ' Submitted by {{log.issuer}} on {{log.created}} \n'; dc += ' </td> \n'; @@ -96,7 +96,7 @@ dc += ' <td>{{log.issuer.first_name}} {{log.issuer.last_name}}</td> \n'; dc += ' <td>{{log.comment|sanitize|escapejs}} \n'; {% if log.fileurl %} - dc += ' <a href="{{log.fileurl|urlencode}}">{{log.filename}}</a> \n'; + dc += ' <a href="{{log.fileurl}}">{{log.filename}}</a> \n'; {% endif %} dc += ' </td> \n'; dc += ' </tr> \n'; @@ -160,12 +160,12 @@ ret += ' {{log.comment|sanitize|escapejs}} \n'; {% if log.fileurl %} - ret += ' <a href="{{log.fileurl|urlencode}}">{{log.filename}}</a> \n'; + ret += ' <a href="{{log.fileurl}}">{{log.filename}}</a> \n'; {% endif %} ret += ' </td> \n'; ret += ' <td> \n'; {% if log.hasImage %} - ret += ' <a href="{{ log.fileurl|urlencode }}" dojoType="dojox.image.LightboxNano"><img height="60" src="{{ log.fileurl|urlencode }}"></a> \n'; + ret += ' <a href="{{ log.fileurl }}" dojoType="dojox.image.LightboxNano"><img height="60" src="{{ log.fileurl }}"></a> \n'; {% endif %} ret += ' </td> \n'; ret += ' </tr> \n'; @@ -228,7 +228,7 @@ //-------------------------------------------------------------------------------------------------------------------- function getTagDelCallback(tag) { return function() { - var tagUrl = "{% url taglogentry object.graceid "000" "temp" %}" + var tagUrl = "{% url "taglogentry" object.graceid "000" "temp" %}" tagUrl = tagUrl.replace("000",tag.n); tagUrl = tagUrl.replace("temp",tag.name); var tagResultDialog = new Dialog({ style: "width: 300px" }); @@ -314,7 +314,7 @@ formData = addTagForm.getValues(); var tagName = formData.existingTagSelect; var tagDispName = formData.tagDispName; - var tagUrl = "{% url taglogentry object.graceid "000" "temp" %}" + var tagUrl = "{% url "taglogentry" object.graceid "000" "temp" %}" tagUrl = tagUrl.replace("000",log.n); tagUrl = tagUrl.replace("temp",tagName); @@ -436,7 +436,7 @@ }, button_element); var savebutton = new Save({ - url: "{% url logentry object.graceid "" %}", + url: "{% url "logentry" object.graceid "" %}", onSuccess: function (resp, ioargs) { //this.inherited(resp, ioargs); this.button.set("disabled", false); @@ -547,7 +547,7 @@ <table class="event"> {% if skyalert_authorized %} <tr><td colspan="4"> - <a href="{% url skyalert object.graceid %}"><button type="button">Submit to Skyalert</button></a> + <a href="{% url "skyalert" object.graceid %}"><button type="button">Submit to Skyalert</button></a> </td></tr> {% endif %} @@ -612,7 +612,7 @@ alert("Bad neighborhood specified.") return; } - var neighborUrlPattern = "{% url neighbors object.graceid "000" %}" + var neighborUrlPattern = "{% url "neighbors" object.graceid "000" %}" var neighbor_div = dom.byId("neighbors"); neighborUrl = neighborUrlPattern.replace("000", delta); request(neighborUrl).then( @@ -646,9 +646,7 @@ var subm = document.getElementById('submitter').value; var faci = document.getElementById('facility').value; var filt = document.getElementById('filter').value; - var rahh = document.getElementById('ra1').value; - var ramm = document.getElementById('ra2').value; - var rass = document.getElementById('ra3').value; + var rahh = document.getElementById('ra').value; var decl = document.getElementById('dec').value; var tsta = document.getElementById('ts').value; var tend = document.getElementById('te').value; @@ -663,7 +661,7 @@ "</td><td>" + subm + "</td><td>" + faci + "</td><td>" + filt + - "</td><td>" + rahh + "hh" + ramm + "mm" + rass + "ss" + + "</td><td>" + ra + "</td><td>" + decl + "</td><td>" + tsta + "</td><td>" + tend + @@ -731,26 +729,16 @@ </tr> <tr> - <td><label for="ra">RA (Right Ascention):</label></td> - <td><input type="number" id="ra1" name="ra1" value="00" style="width: 3em;" min="0" - max="23" data-dojo-type="dijit/form/ValidationTextBox" required="true" - data-dojo-props="regExp:'\\d{2}', invalidMessage:'Two digit number only.'" /> - <label for="ra1">hh</label> - <input type="number" id="ra2" name="ra2" value="00" style="width: 3em;" min="0" - max="59" data-dojo-type="dijit/form/ValidationTextBox" required="true" - data-dojo-props="regExp:'\\d{2}', invalidMessage:'Two digit number only.'" /> - <label for="ra2">mm</label> - <input type="number" id="ra3" name="ra3" value="00" style="width: 3em;" min="0" - max="59" data-dojo-type="dijit/form/ValidationTextBox" required="true" - data-dojo-props="regExp:'\\d{2}', invalidMessage:'Two digit number only.'" /> - <label for="ra3">ss</label> + <td><label for="ra">RA (Right Ascension):</label></td> + <td><input type="number" ID="ra" name="ra" required="true" + data-dojo-type="dijit/form/ValidationTextBox" /> </td> </tr> <tr> - <td width="150"><label for="ra">Dec (Declination):</label> + <td><label for="ra">Dec (Declination):</label> </td> - <td><input type="text" ID="dec" name="dec" size="45" required="true" + <td><input type="number" ID="dec" name="dec" required="true" data-dojo-type="dijit/form/ValidationTextBox" /> </td> </tr> @@ -771,14 +759,6 @@ </td> </tr> - <tr> - <td width="150"><label for="ra">Limiting Mag:</label> - </td> - <td><input type="text" ID="lm" name="lm" size="45" - data-dojo-type="dijit/form/ValidationTextBox" /> - </td> - </tr> - <tr> <td width="150"><label for="ra">Comments:</label> </td> @@ -787,37 +767,6 @@ </td> </tr> - <tr> - <td width="150"><label for="ra">Target Galactic Lat:</label> - </td> - <td><input type="text" ID="tgla" name="tgla" size="45" - data-dojo-type="dijit/form/ValidationTextBox" /> - </td> - </tr> - - <tr> - <td width="150"><label for="ra">Target Galactic Lon:</label> - </td> - <td><input type="text" ID="tgln" name="tgln" size="45" - data-dojo-type="dijit/form/ValidationTextBox" /> - </td> - </tr> - - <tr> - <td width="150"><label for="ra">Target Ecliptic Lat:</label> - </td> - <td><input type="text" ID="tela" name="tela" size="45" - data-dojo-type="dijit/form/ValidationTextBox" /> - </td> - </tr> - - <tr> - <td width="200"><label for="ra">Target Ecliptic Lon:</label> - </td> - <td><input type="text" ID="teln" name="teln" size="45" - data-dojo-type="dijit/form/ValidationTextBox" /> - </td> - </tr> </table> <!-- <button data-dojo-type="dijit/form/Button" type="button" id="button2">Get Values from form!</button> @@ -861,12 +810,7 @@ <option value="utc" selected>UTC</option> </select> </form> Time End</th> - <th>Limiting Mag</th> <th>Comments</th> - <th>Target Galactic Lat</th> - <th>Target Galactic Lon</th> - <th>Target Ecliptic Lat</th> - <th>Target Ecliptic Lon</th> </tr> </thead> @@ -884,7 +828,7 @@ <div id="new_log_entry_form"> <noscript> <h3>Create a new log entry</h3> - <form id="newlog" action="{% url logentry object.graceid "" %}" method="POST"> + <form id="newlog" action="{% url "logentry" object.graceid "" %}" method="POST"> <p> <textarea id="newlogtext" name="comment" style="width:300px;display:block"></textarea> <input type="submit" value="Submit"/> diff --git a/templates/gracedb/event_detail_GRB.html b/templates/gracedb/event_detail_GRB.html index b4ef4a118b45943cc0ff57c72bb7c71c38fc0ef8..7796130f579a305e084365091693d2c0eb901380 100644 --- a/templates/gracedb/event_detail_GRB.html +++ b/templates/gracedb/event_detail_GRB.html @@ -7,7 +7,7 @@ <table class="event"> {% if skyalert_authorized %} <tr><td colspan="4"> - <a href="{% url skyalert object.graceid %}"><button type="button">Submit to Skyalert</button></a> + <a href="{% url "skyalert" object.graceid %}"><button type="button">Submit to Skyalert</button></a> </td></tr> {% endif %} diff --git a/templates/gracedb/event_filelist.html b/templates/gracedb/event_filelist.html new file mode 100644 index 0000000000000000000000000000000000000000..1f413294a77f60a7284c907017b44aa70fe39b20 --- /dev/null +++ b/templates/gracedb/event_filelist.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% block title %}{{ title }}{% endblock %} +{% block heading %}{{ title }}{% endblock %} +{% block pageid %}event files{% endblock %} + +{% block content %} +<p>{{ message }}</p> + +<ul> +{% for filename in file_list %} +<li><a href="{% url "file" graceid filename %}">{{ filename }}</a></li> +{% endfor %} +</ul> + +{% endblock %} diff --git a/templates/gracedb/event_list.html b/templates/gracedb/event_list.html index 5d654f273b56742d5ec14e6ec1012e8ddbfc49ee..56f789b9c83d0706d6b8bc17aaf2637a622e5d9e 100644 --- a/templates/gracedb/event_list.html +++ b/templates/gracedb/event_list.html @@ -8,27 +8,27 @@ {% block jscript %} <link rel="stylesheet" type="text/css" media="screen" - href="{{MEDIA_URL}}css/jqgrid/theme/jquery-ui.css"/> + href="{{STATIC_URL}}css/jqgrid/theme/jquery-ui.css"/> <link rel="stylesheet" type="text/css" media="screen" - href="{{MEDIA_URL}}css/jqgrid/theme/ui.all.css"/> + href="{{STATIC_URL}}css/jqgrid/theme/ui.all.css"/> <!-- <link rel="stylesheet" type="text/css" media="screen" - href="{{MEDIA_URL}}css/jqgrid/ui-lightness/jquery-ui-1.7.2.custom.css"/> + href="{{STATIC_URL}}css/jqgrid/ui-lightness/jquery-ui-1.7.2.custom.css"/> --> <link rel="stylesheet" type="text/css" media="screen" - href="{{MEDIA_URL}}css/jqgrid/ui.jqgrid.css"/> + href="{{STATIC_URL}}css/jqgrid/ui.jqgrid.css"/> -<script src="{{MEDIA_URL}}js/jquery-1.3.2.min.js" type="text/javascript"></script> -<script src="{{MEDIA_URL}}js/grid.locale-en.js" type="text/javascript"></script> -<script src="{{MEDIA_URL}}js/jquery.jqGrid.min.js" type="text/javascript"></script> -<script src="{{MEDIA_URL}}js/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script> +<script src="{{STATIC_URL}}js/jquery-1.3.2.min.js" type="text/javascript"></script> +<script src="{{STATIC_URL}}js/grid.locale-en.js" type="text/javascript"></script> +<script src="{{STATIC_URL}}js/jquery.jqGrid.min.js" type="text/javascript"></script> +<script src="{{STATIC_URL}}js/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script> -<script src="{{MEDIA_URL}}js/labeltips.js" type="text/javascript"></script> -<link rel="stylesheet" href="{{MEDIA_URL}}css/labeltips.css"> +<script src="{{STATIC_URL}}js/labeltips.js" type="text/javascript"></script> +<link rel="stylesheet" href="{{STATIC_URL}}css/labeltips.css"> <script type="text/javascript"> <!-- @@ -48,7 +48,7 @@ ( { sortable: true, - url: '{% url search %}flex?query={{rawquery|urlencode}}', + url: '{% url "search" %}flex?query={{rawquery|urlencode}}', datatype: 'json', mtype: "GET", colNames : ["UID", "Labels", "Neighbors (+/-5sec)", "Group", "Type", "Event Time", "Instruments", "FAR (Hz)", "Links", "Submitted", "Submitted By", @@ -112,8 +112,8 @@ <td> <a onClick="toggle_visibility('hints');">Hints on querying</a> {% if rawquery %} - | <a href="{% url search %}?query={{rawquery|urlencode}}">Link to current query</a> - | <a href="{% url search %}?query={{rawquery|urlencode}}&ligolw">Download LIGOLW File</a> + | <a href="{% url "search" %}?query={{rawquery|urlencode}}">Link to current query</a> + | <a href="{% url "search" %}?query={{rawquery|urlencode}}&ligolw">Download LIGOLW File</a> {% endif %} </td> </tr> @@ -144,7 +144,7 @@ <tbody> {% for obj in object_list %} <tr class={% cycle 'odd' 'even' %}> - <td><a href="{% url view obj.graceid %}">{{ obj.graceid }}</a></td> + <td><a href="{% url "view" obj.graceid %}">{{ obj.graceid }}</a></td> <td> {% for labelling in obj.labelling_set.all %} <span onmouseover="tooltip.show(tooltiptext('{{labelling.label.name}}', '{{labelling.creator.name}}', '{{labelling.created|utc}}'));" onmouseout="tooltip.hide();" style="color: {{labelling.label.defaultColor}}">{{ labelling.label.name }}</span> diff --git a/templates/gracedb/gstlalcbc_report.html b/templates/gracedb/gstlalcbc_report.html index 709199cfe3fd30642e3d7a34d702e0f790f80c5f..3429de9ce0b3b20dc8403647e7ee5ce687b0d3b8 100644 --- a/templates/gracedb/gstlalcbc_report.html +++ b/templates/gracedb/gstlalcbc_report.html @@ -96,7 +96,7 @@ onload="document.search_form.query.focus();" {% endif %} {% endfor %} <td>{{ forloop.counter }} </td> - <td><a href="{% url view obj.graceid %}">{{ obj.graceid }}</a></td> + <td><a href="{% url "view" obj.graceid %}">{{ obj.graceid }}</a></td> <td> {{ obj|end_time }} </td> <td> {{ obj.far|scientific }} </td> <td> {{ obj.instruments }} </td> diff --git a/templates/gracedb/histogram.html b/templates/gracedb/histogram.html index c3c52c61c9ee1ea5a5ecb7b9c7a3dc1b7b98d83b..f06505319750cd1262eeca7e215e04c590501cb3 100644 --- a/templates/gracedb/histogram.html +++ b/templates/gracedb/histogram.html @@ -82,7 +82,7 @@ function toggle(id) { {% block content %} <br/> -<a href="{% url gstlalcbc_report %}"><h3>Dynamic CBC Report</h3></a> +<a href="{% url "gstlalcbc_report" %}"><h3>Dynamic CBC Report</h3></a> <br/> <br/> @@ -140,6 +140,6 @@ function toggle(id) { <br/> <br/> -<a href="{% url performance %}"><h3>GraceDB 3-day performance summary</h3></a> +<a href="{% url "performance" %}"><h3>GraceDB 3-day performance summary</h3></a> {% endblock %} diff --git a/templates/gracedb/index.html b/templates/gracedb/index.html index bd87b3857210a26f54419a5059619f943781f013..3003a53599cfedbb5ae39a4e8a8f12f86c4ba3fd 100644 --- a/templates/gracedb/index.html +++ b/templates/gracedb/index.html @@ -26,7 +26,7 @@ You can read about using the service on the <div class="text"> To receive email alerts when GraCEDb events are created, sign up on the <a target="_blank" href="http://listserv.ligo.org/cgi-bin/mailman/listinfo/gracedb">gracedb mailing list</a> or set up your own alert under the -<a href="{% url userprofile-home %}">Options</a> menu item. +<a href="{% url "userprofile-home" %}">Options</a> menu item. </div> {% endblock %} diff --git a/templates/gracedb/latest.html b/templates/gracedb/latest.html index 11aad2ac4196b62bed9a51a122039ab58d20f5bb..12a78557117c6fe259bd97b10032f66e2d3e00f3 100644 --- a/templates/gracedb/latest.html +++ b/templates/gracedb/latest.html @@ -11,7 +11,7 @@ {% block jscript %} {% if not error %} - <meta http-equiv="refresh" content="300;url={% url latest %}/?query={{rawquery|urlencode}}"> + <meta http-equiv="refresh" content="300;url={% url "latest" %}/?query={{rawquery|urlencode}}"> {% endif %} {# http/https depending on this pages' protocol #} @@ -98,7 +98,7 @@ <table class="event"> {% if skyalert_authorized %} <tr><td colspan="4"> - <a href="{% url skyalert object.graceid %}"><button type="button">Submit to Skyalert</button></a> + <a href="{% url "skyalert" object.graceid %}"><button type="button">Submit to Skyalert</button></a> </td></tr> {% endif %} @@ -123,7 +123,7 @@ {% for object in objects %} <tr class={% cycle 'odd' 'even' %}> - <td><a href="{% url view object.graceid %}">{{ object.graceid }}</a></td> + <td><a href="{% url "view" object.graceid %}">{{ object.graceid }}</a></td> <td> {% for labelling in object.labelling_set.all %} <span title="{{labelling.creator.name}} {{labelling.created|utc}}" style="color: {{labelling.label.defaultColor}}">{{ labelling.label.name }}</span> diff --git a/templates/gracedb/latest_public.html b/templates/gracedb/latest_public.html index 59184781d007f2014cdf33decdd50c69f1d37455..833eef2d0dc3f0b499ec4a5e1127185795a9175a 100644 --- a/templates/gracedb/latest_public.html +++ b/templates/gracedb/latest_public.html @@ -11,7 +11,7 @@ {% block jscript %} {% if not error %} - <meta http-equiv="refresh" content="300;url={% url latest %}/?query={{rawquery|urlencode}}"> + <meta http-equiv="refresh" content="300;url={% url "latest" %}/?query={{rawquery|urlencode}}"> {% endif %} {# http/https depending on this pages' protocol #} diff --git a/templates/gracedb/neighbors_frag.html b/templates/gracedb/neighbors_frag.html index 40b12aec3c20b1078db704bd17c9828371605b78..4698c7821da7b3c731c4149e114d5e2f8cea5f15 100644 --- a/templates/gracedb/neighbors_frag.html +++ b/templates/gracedb/neighbors_frag.html @@ -30,7 +30,7 @@ </tr> {% for delta, object in nearby %} <tr class={% cycle 'odd' 'even' %}> - <td><a href="{% url view object.graceid %}">{{ object.graceid }}</a></td> + <td><a href="{% url "view" object.graceid %}">{{ object.graceid }}</a></td> <td> {% for labelling in object.labelling_set.all %} <span onmouseover="tooltip.show(tooltiptext('{{labelling.label.name}}', '{{labelling.creator.name}}', '{{labelling.created|utc}}'));" onmouseout="tooltip.hide();" style="color: {{labelling.label.defaultColor}}">{{ labelling.label.name }}</span> diff --git a/templates/profile/notifications.html b/templates/profile/notifications.html index ea4105918b918c6b2b5549c9ba768ffeab1174e9..100bb45ce0c6c57fe39f1572f10082df7491963f 100644 --- a/templates/profile/notifications.html +++ b/templates/profile/notifications.html @@ -9,26 +9,26 @@ {% for trigger in triggers %} <ul> <li> - <!-- <a href="{% url userprofile-edit trigger.id %}">Edit</a> --> - <a href="{% url userprofile-delete trigger.id %}">Delete</a> + <!-- <a href="{% url "userprofile-edit" trigger.id %}">Edit</a> --> + <a href="{% url "userprofile-delete" trigger.id %}">Delete</a> {{ trigger.userlessDisplay }} </li> </ul> {% endfor %} -<a href="{% url userprofile-create %}">Create New Notification</a> +<a href="{% url "userprofile-create" %}">Create New Notification</a> <h2>Contacts</h2> {% for contact in contacts %} <ul> <li> - <!-- <a href="{% url userprofile-edit-contact contact.id %}">Edit</a> --> - <a href="{% url userprofile-delete-contact contact.id %}">Delete</a> + <!-- <a href="{% url "userprofile-edit-contact" contact.id %}">Edit</a> --> + <a href="{% url "userprofile-delete-contact" contact.id %}">Delete</a> {{ contact.desc }} / {{ contact.email }} </li> </ul> {% endfor %} -<a href="{% url userprofile-create-contact %}">Create New Contact</a> +<a href="{% url "userprofile-create-contact" %}">Create New Contact</a> {% endblock %} diff --git a/templates/rest_framework/api.html b/templates/rest_framework/api.html index e89675deafff261fd4fcb2150a80479b213e8f1e..66e196a072961428fdf3864b4c96d1172afb498b 100644 --- a/templates/rest_framework/api.html +++ b/templates/rest_framework/api.html @@ -17,7 +17,7 @@ GraceDB — REST API {% block breadcrumbs %} <ul class="breadcrumb"> - <li><a href="{% url home %}">Home</a></li><span class="divider">›</span> + <li><a href="{% url "home" %}">Home</a></li><span class="divider">›</span> {% for breadcrumb_name, breadcrumb_url in breadcrumblist %} <li> <a href="{{ breadcrumb_url }}" {% if forloop.last %}class="active"{% endif %}>{{ breadcrumb_name }}</a> {% if not forloop.last %}<span class="divider">›</span>{% endif %} diff --git a/urls.py b/urls.py index 01f0eed25c6d2f404139a4c798c99badb0298b88..4cedf1c7de89423c8e298d8337ba6a2cbdc11607 100644 --- a/urls.py +++ b/urls.py @@ -1,5 +1,7 @@ -from django.conf.urls.defaults import * +# Changed for Django 1.6 upgrade +#from django.conf.urls.defaults import * +from django.conf.urls import patterns, url, include from django.conf import settings # Uncomment the next two lines to enable the admin: diff --git a/userprofile/urls.py b/userprofile/urls.py index e531245f3ca2cebb1a177dfa79f7d0dd2e3f20ff..48f9287789324fe0022a0adba0f60296011745c2 100644 --- a/userprofile/urls.py +++ b/userprofile/urls.py @@ -1,5 +1,7 @@ -from django.conf.urls.defaults import * +# Changed for Django 1.6 +#from django.conf.urls.defaults import * +from django.conf.urls import patterns, url, include urlpatterns = patterns('userprofile.views', diff --git a/branson.wsgi b/wsgi/branson.wsgi similarity index 100% rename from branson.wsgi rename to wsgi/branson.wsgi diff --git a/django.wsgi b/wsgi/django.wsgi similarity index 100% rename from django.wsgi rename to wsgi/django.wsgi