52
52
class OfferingAPIIndex(View):
55
class OfferingProjectsIndex(View):
56
59
def root_to_subject(root, name):
58
return root.subjects[name]
60
raise NotFound(root, name)
60
return root.subjects.get(name)
62
62
def subject_to_offering(subject, year, semester):
64
return subject.offerings[(int(year), int(semester))]
65
except (KeyError, ValueError):
66
raise NotFound(subject, (year, semester))
63
return subject.offerings.get((int(year), int(semester)))
68
65
def offering_to_projects(offering):
69
66
return OfferingProjects(offering)
114
111
self.rtr.add_view(Subject, '+edit', SubjectEdit, viewset='browser')
115
112
self.rtr.add_view(Offering, '+index', OfferingIndex, viewset='browser')
116
113
self.rtr.add_view(Offering, '+index', OfferingAPIIndex, viewset='api')
114
self.rtr.add_view(OfferingProjects, '+index', OfferingProjectsIndex,
118
117
def testOneRoute(self):
119
118
assert_equal(self.rtr.resolve('/info1'),
154
153
(self.r.subjects['info1'], SubjectEdit, ('foo', 'bar'))
156
def testNoDefaultView(self):
158
self.rtr.default = 'not+index'
159
self.rtr.resolve('/info1')
161
assert_equal(e.args, (self.r.subjects['info1'], '+index', ()))
165
raise AssertionError('did not raise NotFound')
167
self.rtr.default = '+index'
169
def testMissingView(self):
171
self.rtr.resolve('/info1/+foo')
173
assert_equal(e.args, (self.r.subjects['info1'], '+foo', ()))
177
raise AssertionError('did not raise NotFound')
158
179
def testViewSetSeparation(self):
159
self.rtr.resolve('/api/info1/+edit')
181
self.rtr.resolve('/api/info1/+edit')
183
assert_equal(e.args, (self.r.subjects['info1'], '+edit', ()))
187
raise AssertionError('did not raise NotFound')
189
def testRouteReturningNone(self):
191
self.rtr.resolve('/info9/+index')
193
assert_equal(e.args, (self.r, 'info9', ('+index',)))
197
raise AssertionError('did not raise NotFound')
161
199
def testAlternateViewSetWithDefault(self):
162
200
assert_equal(self.rtr.resolve('/info1/2009/1'),