def test_widget_from_json_obj(self): with self.assertRaises(jsonschema.exceptions.ValidationError, msg='invalid should fail'): Widget.from_json_obj({"Name": 5, "Creted": "dfgdfggdf"}) sample_widget_json_rep = { "name": "sample", "num_of_parts": 5, "created_date": "2012-06-14", "updated_date": "2021-04-25", "an_extra_prop": 55555, "a_complex_extra_prop": { "stuff": [4.1, "eggs", [3, "spam"]] } } self.assertEqual(Widget.from_json_obj(sample_widget_json_rep), self.sample_widget)
def put_widget(widget_name): try: try: # if this succeeds, the widget already exists and is getting updated if not request.is_json: raise ValueError('request body was not parseable json') old_widget = get_widget_store().get_widget_by_name(widget_name) new_widget_json_obj = request.get_json() new_widget_json_obj.update({ "updated_date": datetime.today().strftime("%Y-%m-%d"), "created_date": old_widget["Created date"] }) new_widget = Widget.from_json_obj(new_widget_json_obj) get_widget_store().put_widget(new_widget) return jsonify(new_widget_json_obj), 200 except LookupError: # if we're here, a new widget is getting created new_widget_json_obj = request.get_json() new_widget_json_obj.update({ "created_date": datetime.today().strftime("%Y-%m-%d"), "updated_date": datetime.today().strftime("%Y-%m-%d") }) new_widget = Widget.from_json_obj(new_widget_json_obj) get_widget_store().put_widget(new_widget) return jsonify(new_widget_json_obj), 201 except jsonschema.exceptions.ValidationError as ve: return (jsonify({ "error class": "invalid widget representation", "uri": request.path, "cause": ve.message }), 400) except Exception: app.logger.exception('Unexpected exception') abort(500)
def add_widgets(): try: new_widget_json_objs = request.get_json() for new_widget_json_obj in new_widget_json_objs: new_widget_json_obj.update({ "updated_date": datetime.today().strftime("%Y-%m-%d"), "created_date": datetime.today().strftime("%Y-%m-%d") }) new_widgets = [Widget.from_json_obj(w) for w in new_widget_json_objs] get_widget_store().put_widgets(new_widgets) return jsonify(new_widget_json_objs), 200 except jsonschema.exceptions.ValidationError as ve: return (jsonify({ "error class": "invalid widget representation", "uri": request.path, "cause": ve.message }), 400) except Exception: app.logger.exception('Unexpected exception') abort(500)