Renamed model .url() methods to .json_url() or .base_url(), depending on function. Replaced the use of custom django method request.get_host_protocol() with standard request.build_absolute_uri(). Removed an uncaught Http403 exception. Fixed a typo /venus_addr/venue_addr/. Removed relurl() methods; no longer needed. Removed some debug functions.

- Legacy-Id: 6309
This commit is contained in:
Henrik Levkowetz 2013-09-29 21:14:07 +00:00
parent 127deda3c7
commit 083f60dd93
9 changed files with 91 additions and 117 deletions

View file

@ -16,8 +16,8 @@ log = logging.getLogger(__name__)
def group_json(request, groupname):
group = get_object_or_404(Group, acronym=groupname)
#print "group request is: %s\n" % (request.get_host_protocol())
return HttpResponse(json.dumps(group.json_dict(request.get_host_protocol()),
#print "group request is: %s\n" % (request.build_absolute_uri('/'))
return HttpResponse(json.dumps(group.json_dict(request.build_absolute_uri('/')),
sort_keys=True, indent=2),
mimetype="text/json")

View file

@ -1,5 +1,7 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from urlparse import urljoin
from django.db import models
from django.db.models import Q
@ -8,7 +10,8 @@ from ietf.person.models import Email, Person
from ietf.group.colors import fg_group_colors, bg_group_colors
import datetime
import debug
class GroupInfo(models.Model):
time = models.DateTimeField(default=datetime.datetime.now)
name = models.CharField(max_length=80)
@ -88,20 +91,20 @@ class Group(GroupInfo):
def bg_color(self):
return bg_group_colors[self.upcase_acronym]
def url(self, sitefqdn):
return "%s/group/%s.json" % (sitefqdn, self.acronym)
def json_url(self):
return "/group/%s.json" % (self.acronym,)
def json_dict(self, sitefqdn):
def json_dict(self, host_scheme):
group1= dict()
group1['href'] = self.url(sitefqdn)
group1['href'] = urljoin(host_scheme, self.json_url())
group1['acronym'] = self.acronym
group1['name'] = self.name
group1['state'] = self.state.slug
group1['type'] = self.type.slug
group1['parent_href'] = self.parent.url(sitefqdn)
group1['parent_href'] = urljoin(host_scheme, self.parent.json_url())
# uncomment when people URL handle is created
#if self.ad is not None:
# group1['ad_href'] = self.ad.url(sitefqdn)
# group1['ad_href'] = urljoin(host_scheme, self.ad.url())
group1['list_email'] = self.list_email
group1['list_subscribe'] = self.list_subscribe
group1['list_archive'] = self.list_archive

View file

@ -1,3 +1,5 @@
from urlparse import urljoin
from django.utils import simplejson as json
from dajaxice.core import dajaxice_functions
from dajaxice.decorators import dajaxice_register
@ -8,7 +10,7 @@ from django.shortcuts import get_object_or_404
from ietf.ietfauth.decorators import group_required, has_role
from ietf.name.models import TimeSlotTypeName
from django.http import HttpResponseRedirect, HttpResponse, Http404, QueryDict, Http403
from django.http import HttpResponseRedirect, HttpResponse, Http404, QueryDict
from ietf.meeting.helpers import get_meeting, get_schedule, get_schedule_by_id, agenda_permissions
from ietf.meeting.views import edit_timeslots, edit_agenda
@ -56,7 +58,7 @@ def readonly(request, meeting_num, schedule_id):
return json.dumps(
{'secretariat': secretariat,
'write_perm': write_perm,
'owner_href': schedule.owner.url(request.get_host_protocol()),
'owner_href': request.build_absolute_uri(schedule.owner.json_url()),
'read_only': read_only})
@group_required('Area Director','Secretariat')
@ -73,7 +75,7 @@ def update_timeslot(request, schedule_id, session_id, scheduledsession_id=None,
cansee,canedit = agenda_permissions(meeting, schedule, request.user)
if not canedit:
raise Http403
#raise Exception("Not permitted")
return json.dumps({'error':'no permission'})
session_id = int(session_id)
@ -136,7 +138,7 @@ def update_timeslot_purpose(request, timeslot_id=None, purpose=None):
timeslot.type = timeslottypename
timeslot.save()
return json.dumps(timeslot.json_dict(request.get_host_protocol))
return json.dumps(timeslot.json_dict(request.build_absolute_uri('/')))
#############################################################################
## ROOM API
@ -149,7 +151,7 @@ def timeslot_roomlist(request, mtg):
rooms = mtg.room_set.all()
json_array=[]
for room in rooms:
json_array.append(room.json_dict(request.get_host_protocol))
json_array.append(room.json_dict(request.build_absolute_uri('/')))
return HttpResponse(json.dumps(json_array),
mimetype="application/json")
@ -199,7 +201,7 @@ def timeslot_roomurl(request, num=None, roomid=None):
if request.method == 'GET':
room = get_object_or_404(meeting.room_set, pk=roomid)
return HttpResponse(json.dumps(room.json_dict(request.get_host_protocol())),
return HttpResponse(json.dumps(room.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
elif request.method == 'PUT':
return timeslot_updroom(request, meeting)
@ -216,7 +218,7 @@ def timeslot_slotlist(request, mtg):
slots = mtg.timeslot_set.all()
json_array=[]
for slot in slots:
json_array.append(slot.json_dict(request.get_host_protocol()))
json_array.append(slot.json_dict(request.build_absolute_uri('/')))
return HttpResponse(json.dumps(json_array),
mimetype="application/json")
@ -267,7 +269,7 @@ def timeslot_sloturl(request, num=None, slotid=None):
if request.method == 'GET':
slot = get_object_or_404(meeting.timeslot_set, pk=slotid)
return HttpResponse(json.dumps(slot.json_dict(request.get_host_protocol())),
return HttpResponse(json.dumps(slot.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
elif request.method == 'PUT':
# not yet implemented!
@ -287,7 +289,7 @@ def agenda_list(request, mtg):
agendas = mtg.schedule_set.all()
json_array=[]
for agenda in agendas:
json_array.append(agenda.json_dict(request.get_host_protocol))
json_array.append(agenda.json_dict(request.build_absolute_uri('/')))
return HttpResponse(json.dumps(json_array),
mimetype="application/json")
@ -355,7 +357,7 @@ def agenda_update(request, meeting, schedule):
meeting.save()
if "HTTP_ACCEPT" in request.META and "application/json" in request.META['HTTP_ACCEPT']:
return HttpResponse(json.dumps(schedule.json_dict(request.get_host_protocol())),
return HttpResponse(json.dumps(schedule.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
else:
return HttpResponseRedirect(
@ -390,7 +392,7 @@ def agenda_infourl(request, num=None, schedule_name=None):
#log.debug("results in agenda: %u / %s" % (schedule.id, request.method))
if request.method == 'GET':
return HttpResponse(json.dumps(schedule.json_dict(request.get_host_protocol())),
return HttpResponse(json.dumps(schedule.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
elif request.method == 'PUT':
return agenda_update(request, meeting, schedule)
@ -404,7 +406,7 @@ def agenda_infourl(request, num=None, schedule_name=None):
#############################################################################
def meeting_get(request, meeting):
return HttpResponse(json.dumps(meeting.json_dict(request.get_host_protocol()),
return HttpResponse(json.dumps(meeting.json_dict(request.build_absolute_uri('/')),
sort_keys=True, indent=2),
mimetype="application/json")
@ -458,7 +460,7 @@ def session_json(request, num, sessionid):
except Session.DoesNotExist:
return json.dumps({'error':"no such session %s" % sessionid})
sess1 = session.json_dict(request.get_host_protocol())
sess1 = session.json_dict(request.build_absolute_uri('/'))
return HttpResponse(json.dumps(sess1, sort_keys=True, indent=2),
mimetype="application/json")
@ -473,7 +475,7 @@ def session_constraints(request, num, sessionid):
except Session.DoesNotExist:
return json.dumps({"error":"no such session"})
constraint_list = session.constraints_dict(request.get_host_protocol())
constraint_list = session.constraints_dict(request.build_absolute_uri('/'))
json_str = json.dumps(constraint_list,
sort_keys=True, indent=2),

View file

@ -1,6 +1,8 @@
# old meeting models can be found in ../proceedings/models.py
import pytz, datetime
from urlparse import urljoin
import copy
from django.db import models
from django.conf import settings
@ -110,21 +112,20 @@ class Meeting(models.Model):
return qs[0]
return None
def url(self, sitefqdn, exten=".json"):
return "%s/meeting/%s%s" % (sitefqdn, self.number, exten)
def json_url(self):
return "/meeting/%s.json" % (self.number, )
@property
def relurl(self):
return self.url("")
def base_url(self):
return "/meeting/%s" % (self.number, )
def json_dict(self, sitefqdn):
def json_dict(self, host_scheme):
# unfortunately, using the datetime aware json encoder seems impossible,
# so the dates are formatted as strings here.
agenda_url = ""
if self.agenda:
agenda_url = self.agenda.url(sitefqdn)
agenda_url = urljoin(host_scheme, self.agenda.base_url())
return {
'href': self.url(sitefqdn),
'href': urljoin(host_scheme, self.base_url()),
'name': self.number,
'submission_start_date': fmt_date(self.get_submission_start_date()),
'submission_cut_off_date': fmt_date(self.get_submission_cut_off_date()),
@ -135,7 +136,7 @@ class Meeting(models.Model):
'country': self.country,
'time_zone': self.time_zone,
'venue_name': self.venue_name,
'venus_addr': self.venue_addr,
'venue_addr': self.venue_addr,
'break_area': self.break_area,
'reg_area': self.reg_area
}
@ -205,16 +206,12 @@ class Room(models.Model):
duration=ts.duration)
self.meeting.create_all_timeslots()
def url(self, sitefqdn):
return "%s/meeting/%s/room/%s.json" % (sitefqdn, self.meeting.number, self.id)
def json_url(self):
return "/meeting/%s/room/%s.json" % (self.meeting.number, self.id)
@property
def relurl(self):
return self.url("")
def json_dict(self, sitefqdn):
def json_dict(self, host_scheme):
return {
'href': self.url(sitefqdn),
'href': urljoin(host_scheme, self.json_url()),
'name': self.name,
'capacity': self.capacity,
}
@ -363,12 +360,8 @@ class TimeSlot(models.Model):
ts["domid"] = self.js_identifier
return ts
def url(self, sitefqdn):
return "%s/meeting/%s/timeslot/%s.json" % (sitefqdn, self.meeting.number, self.id)
@property
def relurl(self):
return self.url("")
def json_url(self):
return "/meeting/%s/timeslot/%s.json" % (self.meeting.number, self.id)
"""
@ -377,12 +370,14 @@ class TimeSlot(models.Model):
rooms.
"""
def create_concurrent_timeslots(self):
ts = self
for room in self.meeting.room_set.all():
rooms = self.meeting.room_set.all()
self.room = rooms[0]
self.save()
for room in rooms[1:]:
ts = copy.copy(self)
ts.id = None
ts.location = room
ts.save()
# this is simplest way to "clone" an object...
ts.id = None
self.meeting.create_all_timeslots()
"""
@ -438,19 +433,11 @@ class Schedule(models.Model):
def __unicode__(self):
return u"%s:%s(%s)" % (self.meeting, self.name, self.owner)
def url(self, sitefqdn):
return "%s/meeting/%s/agenda/%s" % (sitefqdn, self.meeting.number, self.name)
def base_url(self):
return "/meeting/%s/agenda/%s" % (self.meeting.number, self.name)
@property
def relurl(self):
return self.url("")
def url_edit(self, sitefqdn):
return "%s/meeting/%s/agenda/%s/edit" % (sitefqdn, self.meeting.number, self.name)
@property
def relurl_edit(self):
return self.url_edit("")
def url_edit(self):
return "/meeting/%s/agenda/%s/edit" % (self.meeting.number, self.name)
@property
def visible_token(self):
@ -489,14 +476,14 @@ class Schedule(models.Model):
# I'm loath to put calls to reverse() in there.
# is there a better way?
def url(self, sitefqdn):
def json_url(self):
# XXX need to include owner.
return "%s/meeting/%s/agendas/%s.json" % (sitefqdn, self.meeting.number, self.name)
return "/meeting/%s/agendas/%s.json" % (self.meeting.number, self.name)
def json_dict(self, sitefqdn):
def json_dict(self, host_scheme):
sch = dict()
sch['schedule_id'] = self.id
sch['href'] = self.url(sitefqdn)
sch['href'] = urljoin(host_scheme, self.json_url())
if self.visible:
sch['visible'] = "visible"
else:
@ -505,7 +492,7 @@ class Schedule(models.Model):
sch['public'] = "public"
else:
sch['public'] = "private"
sch['owner'] = self.owner.url(sitefqdn)
sch['owner'] = urljoin(host_scheme, self.owner.json_url())
# should include href to list of scheduledsessions, but they have no direct API yet.
return sch
@ -631,7 +618,7 @@ class ScheduledSession(models.Model):
def json_dict(self, selfurl):
ss = dict()
ss['scheduledsession_id'] = self.id
#ss['href'] = self.url(sitefqdn)
#ss['href'] = self.url(host_scheme)
ss['empty'] = self.empty_str
ss['timeslot_id'] = self.timeslot.id
if self.session:
@ -664,21 +651,21 @@ class Constraint(models.Model):
def __unicode__(self):
return u"%s %s %s" % (self.source, self.name.name.lower(), self.target)
def url(self, sitefqdn):
return "%s/meeting/%s/constraint/%s.json" % (sitefqdn, self.meeting.number, self.id)
def json_url(self):
return "/meeting/%s/constraint/%s.json" % (self.meeting.number, self.id)
def json_dict(self, sitefqdn):
def json_dict(self, host_scheme):
ct1 = dict()
ct1['constraint_id'] = self.id
ct1['href'] = self.url(sitefqdn)
ct1['href'] = urljoin(host_scheme, self.json_url())
ct1['name'] = self.name.slug
if self.person is not None:
ct1['person_href'] = self.person.url(sitefqdn)
ct1['person_href'] = urljoin(host_scheme, self.person.json_url())
if self.source is not None:
ct1['source_href'] = self.source.url(sitefqdn)
ct1['source_href'] = urljoin(host_scheme, self.source.json_url())
if self.target is not None:
ct1['target_href'] = self.target.url(sitefqdn)
ct1['meeting_href'] = self.meeting.url(sitefqdn)
ct1['target_href'] = urljoin(host_scheme, self.target.json_url())
ct1['meeting_href'] = urljoin(host_scheme, self.meeting.json_url())
return ct1
@ -763,24 +750,24 @@ class Session(models.Model):
def official_scheduledsession(self):
return self.scheduledsession_for_agenda(self.meeting.agenda)
def constraints_dict(self, sitefqdn):
def constraints_dict(self, host_scheme):
constraint_list = []
for constraint in self.group.constraint_source_set.filter(meeting=self.meeting):
ct1 = constraint.json_dict(sitefqdn)
ct1 = constraint.json_dict(host_scheme)
constraint_list.append(ct1)
for constraint in self.group.constraint_target_set.filter(meeting=self.meeting):
ct1 = constraint.json_dict(sitefqdn)
ct1 = constraint.json_dict(host_scheme)
constraint_list.append(ct1)
return constraint_list
def url(self, sitefqdn):
return "%s/meeting/%s/session/%s.json" % (sitefqdn, self.meeting.number, self.id)
def json_url(self):
return "/meeting/%s/session/%s.json" % (self.meeting.number, self.id)
def json_dict(self, sitefqdn):
def json_dict(self, host_scheme):
sess1 = dict()
sess1['href'] = self.url(sitefqdn)
sess1['group_href'] = self.group.url(sitefqdn)
sess1['href'] = urljoin(host_scheme, self.json_url())
sess1['group_href'] = urljoin(host_scheme, self.group.json_url())
sess1['group_acronym'] = str(self.group.acronym)
sess1['name'] = str(self.name)
sess1['short_name'] = str(self.name)

View file

@ -46,8 +46,7 @@ from ietf.meeting.helpers import get_areas, get_area_list_from_sessions, get_pse
from ietf.meeting.helpers import build_all_agenda_slices, get_wg_name_list
from ietf.meeting.helpers import get_scheduledsessions_from_schedule, get_all_scheduledsessions_from_schedule
from ietf.meeting.helpers import get_modified_from_scheduledsessions
from ietf.meeting.helpers import get_wg_list, session_draft_list
from ietf.meeting.helpers import get_meeting, get_schedule, read_agenda_file, agenda_permissions
from ietf.meeting.helpers import get_wg_list, get_meeting, get_schedule, agenda_permissions
@decorator_from_middleware(GZipMiddleware)
@ -240,8 +239,8 @@ def edit_timeslots(request, num=None):
time_slices,date_slices,slots = meeting.build_timeslices()
meeting_base_url = meeting.url(request.get_host_protocol(), "")
site_base_url =request.get_host_protocol()
meeting_base_url = request.build_absolute_uri(meeting.base_url())
site_base_url =request.build_absolute_uri('/')
rooms = meeting.room_set.order_by("capacity")
rooms = rooms.all()
@ -289,8 +288,8 @@ def edit_agenda(request, num=None, schedule_name=None):
schedule = get_schedule(meeting, schedule_name)
#sys.stdout.write("2 requestor: %u for sched owned by: %u \n" % ( requestor.id, schedule.owner.id ))
meeting_base_url = meeting.url(request.get_host_protocol(), "")
site_base_url =request.get_host_protocol()
meeting_base_url = request.build_absolute_uri(meeting.base_url())
site_base_url =request.build_absolute_uri('/')
rooms = meeting.room_set.order_by("capacity")
rooms = rooms.all()
saveas = SaveAsForm()
@ -380,7 +379,6 @@ def edit_agendas(request, num=None, order=None):
return HttpResponse(render_to_string("meeting/agenda_list.html",
{"meeting": meeting,
"sitefqdn": request.get_host_protocol(),
"schedules": schedules.all()
},
RequestContext(request)),
@ -615,20 +613,6 @@ def session_draft_pdf(request, num, session):
os.unlink(pdfn)
return HttpResponse(pdf_contents, mimetype="application/pdf")
def get_meeting(num=None):
if (num == None):
meeting = Meeting.objects.filter(type="ietf").order_by("-date")[:1].get()
else:
meeting = get_object_or_404(Meeting, number=num)
return meeting
def get_schedule(meeting, name=None):
if name is None:
schedule = meeting.agenda
else:
schedule = get_object_or_404(meeting.schedule_set, name=name)
return schedule
def week_view(request, num=None):
meeting = get_meeting(num)
timeslots = TimeSlot.objects.filter(meeting__id = meeting.id)
@ -681,9 +665,7 @@ def ical_agenda(request, num=None, schedule_name=None):
tzfn = os.path.join(settings.TZDATA_ICS_PATH, meeting.time_zone + ".ics")
tzf = open(tzfn)
icstext = tzf.read()
debug.show('icstext[:128]')
vtimezone = re.search("(?sm)(\nBEGIN:VTIMEZONE.*\nEND:VTIMEZONE\n)", icstext).group(1).strip()
debug.show('vtimezone[:128]')
tzf.close()
except IOError:
vtimezone = None

View file

@ -92,14 +92,14 @@ class Person(PersonInfo):
def person(self): # little temporary wrapper to help porting to new schema
return self
def url(self, sitefqdn):
return "%s/people/%s.json" % (sitefqdn, self.id)
def json_url(self):
return "/person/%s.json" % (self.id, )
# person json not yet implemented
#def json_dict(self, sitefqdn):
#def json_dict(self, host_scheme):
# ct1 = dict()
# ct1['person_id'] = self.id
# ct1['href'] = self.url(sitefqdn)
# ct1['href'] = self.url(host_scheme)
# ct1['name'] = self.name
# ct1['ascii'] = self.ascii
# ct1['affliation']= self.affliation

View file

@ -36,7 +36,7 @@
<
</div>
<div href="{{ meeting.relurl }}" class="agenda_list_title">
<div href="{{ meeting.json_url }}" class="agenda_list_title">
<p>Meeting {{meeting.number}}</p>
</div>
@ -54,7 +54,7 @@
<th>Public</th>
</tr>
{% for agenda in schedules %}
<tr agenda_name="{{agenda.name}}" id="agenda_name_{{agenda.name|slugify}}" href="{{agenda|args:sitefqdn|call:"url"}}" class="{{agenda.official_class}}_row">
<tr agenda_name="{{agenda.name}}" id="agenda_name_{{agenda.name|slugify}}" href="{{agenda.base_url}}" class="{{agenda.official_class}}_row">
<td class="agenda_mark agenda_data"> <span class="styled_button agenda_official_mark {{agenda.official_class}}">{{ agenda.official_token }}</span></td>
<td class="agenda_data"> <span class="agenda_owner">{{ agenda.owner }}</span> </td>
<td class="agenda_data">

View file

@ -37,7 +37,7 @@
&lt;
</div>
<div href="{{ meeting.relurl }}" class="agenda_list_title">
<div href="{{ meeting.json_url }}" class="agenda_list_title">
<p>Meeting {{meeting.number}}</p>
</div>
@ -50,7 +50,7 @@
</td></tr></table>
</div>
<form action="{{schedule.relurl}}" method="PUT">
<form action="{{schedule.json_url}}" method="PUT">
<fieldset>
<table>
{{ form.as_table }}

View file

@ -102,7 +102,7 @@ function setup_slots(){
{% for slot in slot_slices|lookup:day %}
<th class="day_{{day}} room_title">
<div
href="{{slot.relurl}}"
href="{{slot.json_url}}"
timeslot_id="{{slot.pk}}"
class="delete delete_slot bottom_left"
id="delete_{{day|date:'Y-m-d'}}_{{slot.time|date:'Hi'}}">X</div>
@ -120,7 +120,7 @@ function setup_slots(){
<th class="vert_time">
<div class="delete delete_room bottom_left"
id="delete_{{r|to_acceptable_id}}"
href="{{r.relurl}}"
href="{{r.json_url}}"
roomid="{{r.pk}}">X</div>
<div class="right room_name">{{r}} <span class="capacity">({{r.capacity}})</span></div>