def add(self, category_id): category = EvalCategory.find_by_id(int(category_id)) if category.card.is_authorized(): item_id = EvalItem.create(self.request.get('name'), int(category_id)).id() item = EvalItem.find_by_id(item_id) template = JinjaEnv.get().get_template('templates/item/edit_row.html') self.response.out.write(template.render({'item': item}))
def test_save(self): eval_id = Evaluation.create('Edit Test Name', self.card_id).id() category1_id = EvalCategory.create('Eval Save Test Cat 1', self.card_id).id() category2_id = EvalCategory.create('Eval Save Test Cat 2', self.card_id).id() item1_id = EvalItem.create('Eval Save Test Item 1', category1_id).id() item2_id = EvalItem.create('Eval Save Test Item 2', category1_id).id() item3_id = EvalItem.create('Eval Save Test Item 3', category2_id).id() text_line1_id = TextLine.create('Eval Save Test Text Line 1', self.card_id).id() text_line2_id = TextLine.create('Eval Save Test Text Line 2', self.card_id).id() response = self.testapp.post('/eval/%d/save' % eval_id, {'comments': 'Comments', 'item_%d_score' % item1_id: '1', 'item_%d_score' % item2_id: '2', 'item_%d_score' % item3_id: '3', 'text_%d_value' % text_line1_id: 'Text 1', 'text_%d_value' % text_line2_id: 'Text 2', } ) self.assertRedirect('/eval/\d*/fill$', response) eval = Evaluation.find_by_id(eval_id) data = eval.all_data() self.assertEqual('Comments', data['comments']) self.assertEqual('1', data['items'][item1_id]) self.assertEqual('2', data['items'][item2_id]) self.assertEqual('3', data['items'][item3_id]) self.assertEqual('Text 1', data['text'][text_line1_id]) self.assertEqual('Text 2', data['text'][text_line2_id])
def test_move_down(self): item1_id = EvalItem.create("Move Up Test Name 1", self.category_id).id() item2_id = EvalItem.create("Move Up Test Name 2", self.category_id).id() self.assertRaises(Exception, self.testapp.post, "/item/%d/move_down" % item2_id) response = self.testapp.post("/item/%d/move_down" % item1_id) self.assertSuccess(response) category = ReportCard.find_by_id(self.card_id).categories()[0] items = category.items() self.assertEqual(2, len(items)) self.assertEqual(item2_id, items[0].key().id()) self.assertEqual(item1_id, items[1].key().id())
def test_preview(self): e = Evaluation.create('Preview Test Name', self.card_id) category1_id = EvalCategory.create('Eval Preview Test Cat 1', self.card_id).id() category2_id = EvalCategory.create('Eval Preview Test Cat 2', self.card_id).id() item1_id = EvalItem.create('Eval Preview Test Item 1', category1_id).id() item2_id = EvalItem.create('Eval Preview Test Item 2', category1_id).id() item3_id = EvalItem.create('Eval Preview Test Item 3', category2_id).id() text_line1_id = TextLine.create('Eval Preview Test Text Line 1', self.card_id).id() text_line2_id = TextLine.create('Eval Preview Test Text Line 2', self.card_id).id() response = self.testapp.get('/eval/%d/preview' % e.id()) self.assertSuccess(response)
def test_edit(self): item_id = EvalItem.create("Edit Test Name", self.category_id).id() response = self.testapp.post("/item/%d/edit" % item_id, {"name": "Edit Test New Name"}) self.assertSuccess(response) category = ReportCard.find_by_id(self.card_id).categories()[0] self.assertEqual(1, len(category.items())) self.assertEqual("Edit Test New Name", category.items()[0].name)
def edit(self, item_id): item = EvalItem.find_by_id(int(item_id)) card = item.category.card if card.is_authorized(): item.name = self.request.get('name') item.save() template = JinjaEnv.get().get_template('templates/item/edit_row.html') self.response.out.write(template.render({'item': item}))
def all_data(self): from models.eval_category import EvalCategory from models.eval_item import EvalItem from models.eval_item_data import EvalItemData categories = self.card.categories() items = [] for category_sublist in [categories[i : i + MAX_IN_QUERY] for i in xrange(0, len(categories), MAX_IN_QUERY)]: items.extend( EvalItem.gql( "WHERE category IN :1 ORDER BY position ASC", map(lambda i: i.key(), category_sublist) ).fetch(100) ) item_data = [] for item_sublist in [items[i : i + MAX_IN_QUERY] for i in xrange(0, len(items), MAX_IN_QUERY)]: item_data.extend( EvalItemData.gql( "WHERE eval_item IN :1 AND evaluation = :2", map(lambda i: i.key(), item_sublist), self ).fetch(100) ) result = {"items": {}, "text": {}, "comments": ""} for item in items: # TODO: base default score on top grade, or allow card owner to set result["items"][item.key().id()] = "5" for item_datum in item_data: result["items"][item_datum.eval_item.key().id()] = item_datum.value from models.text_line import TextLine from models.text_line_data import TextLineData lines = self.card.text_lines() line_data = [] for line_sublist in [lines[i : i + MAX_IN_QUERY] for i in xrange(0, len(lines), MAX_IN_QUERY)]: line_data.extend( TextLineData.gql( "WHERE text_line IN :1 AND evaluation = :2", map(lambda i: i.key(), line_sublist), self ).fetch(100) ) for line in lines: result["text"][line.key().id()] = "" for line_datum in line_data: result["text"][line_datum.text_line.key().id()] = line_datum.value from models.comment_data import CommentData comment_data = CommentData.gql("WHERE evaluation = :1", self).fetch(100) if len(comment_data) > 0: result["comments"] = comment_data[0].value return result
def create_or_update(self, eval_item_id, evaluation_id, value): item = EvalItem.find_by_id(eval_item_id) evaluation = Evaluation.find_by_id(evaluation_id) data = EvalItemData.gql('WHERE eval_item = :1 AND evaluation = :2', item, evaluation).fetch(1) if len(data) == 0: data = EvalItemData(parent=self.report_key()) data.eval_item = item data.evaluation = evaluation else: data = data[0] data.value = value return data.put()
def move_up(self, item_id): item = EvalItem.find_by_id(int(item_id)) card = item.category.card if card.is_authorized(): all_items = item.category.items() id_list = map(lambda x: x.key().id(), all_items) index = id_list.index(item.key().id()) if index >= 1: temp = item.position item.position = all_items[index-1].position all_items[index-1].position = temp item.save() all_items[index-1].save() else: return webapp2.abort(403)
def test_delete(self): item_id = EvalItem.create("Delete Test Name", self.category_id).id() response = self.testapp.post("/item/%d/delete" % item_id) self.assertSuccess(response) category = ReportCard.find_by_id(self.card_id).categories()[0] self.assertEqual(0, len(category.items()))
def test_delete_form(self): item_id = EvalItem.create("Delete Form Test Name", self.category_id).id() response = self.testapp.get("/item/%d/delete_form" % item_id) self.assertSuccess(response)
def delete(self, item_id): item = EvalItem.find_by_id(int(item_id)) card = item.category.card if card.is_authorized(): card_id = item.category.card.key().id() item.delete()
def delete_form(self, item_id): item = EvalItem.find_by_id(int(item_id)) card = item.category.card if card.is_authorized(): template = JinjaEnv.get().get_template('templates/item/delete_form.html') self.response.out.write(template.render({'item_id': item_id, 'item': item}))
def items(self): from models.eval_item import EvalItem items = EvalItem.gql("WHERE category = :1 ORDER BY position ASC", self).fetch(100) return items