def test_template_from_json_collection(self): expected = { 'collection': { 'template': { 'data': [ {'name': 'name', 'value': 'value'}, {'name': 'name1', 'value': 'value1'}, ] } } } data = json.dumps(expected) with self.assertRaises(ValueError): Template.from_json(data)
def test_template_from_json_no_error(self): expected = { 'template': { 'data': [ {'name': 'name', 'value': 'value'}, {'name': 'name1', 'value': 'value1'}, ] } } data = json.dumps(expected) template = Template.from_json(data) self.assertEqual(template.to_dict(), expected)
def table_post(table:str): if request.method == 'POST': data = Template.from_json(request.form['payload']) mods = data.to_dict()['template']['data'] names = [] values = [] for x in mods: values.append(x['value']) names.append(x['name']) _SQL = """insert into """ + table + """ (""" for row in names: if str(row[0]) != "id": _SQL += """""" + str(row) + """,""" _SQL = _SQL[:-1] _SQL += """) values (""" for row2 in names: _SQL += """%s,""" _SQL = _SQL[:-1] _SQL += ")" with DBcm.UseDatabase(DBconfig) as cursor: cursor.execute(_SQL,(values)) _SQL3 = "SELECT id FROM "+table+" ORDER BY id DESC LIMIT 1" with DBcm.UseDatabase(DBconfig) as cursor: cursor.execute(_SQL3,) data5 = cursor.fetchall() temp = ','.join(str(v) for v in data5[0]) test = "" test += """{"collection":{"version" : "1.0","href": "http://localhost:5000/table/post/"""+table+"""",""" test += """ "links": [ { "href" : "http://localhost:5000/table/showall/""" + table+""""}, { "href" : "http://localhost:5000/table/showone/"""+table+"""/"""+temp+""""}]}}""" return str(test) else: with DBcm.UseDatabase(DBconfig) as cursor: _SQL = "SHOW columns FROM " + table #this is used to get the columns name and value. cursor.execute(_SQL,) data2 = cursor.fetchall() test = "" test += """{"collection":{"version": "1.0","href": "http://localhost:5000/table/showall/"""+table+"""",""" test += """ "template": {"data" : [ """ for row2 in data2: if str([0]) != "id": test += """ { "name" : " """ + str(row2[0]) + """" , "value":" """+str(row2[1])+"""" },""" test = test[:-1] test += """]}}}""" return str(test)
def post_table(): if request.method == 'POST': # If a template has been received template_data = request.get_json(force=True) template_to_str = json.dumps(template_data) template = Template.from_json(template_to_str) table_name = template.table.value if table_name == "games": name = template.name.value description = template.description.value with DBcm.UseDatabase(app.config["DB_CONFIG"]) as cursor: _SQL = "INSERT INTO games (name, description) VALUES (%s, %s)" cursor.execute(_SQL, (name, description,)) row_id = cursor.lastrowid # return the id of the row inserted elif table_name == "players": handle = template.handle.value first = template.first.value last = template.last.value email = template.email.value password = template.password.value with DBcm.UseDatabase(app.config["DB_CONFIG"]) as cursor: _SQL = "INSERT INTO players (handle, first, last, email, passwd) VALUES (%s, %s, %s, %s, %s)" cursor.execute(_SQL, (handle, first, last, email, password,)) row_id = cursor.lastrowid elif table_name == "scores": game_id = template.game_id.value player_id = template.player_id.value score = template.score.value with DBcm.UseDatabase(app.config["DB_CONFIG"]) as cursor: _SQL = "INSERT INTO scores (game_id, player_id, score) VALUES (%s, %s, %s)" cursor.execute(_SQL, (game_id, player_id, score,)) row_id = cursor.lastrowid collection.links = [Link(href='/api/table/showall?name=' + str(table_name), rel='GET'), Link(href='/api/table/showone?name=' + str(table_name)+'&row=' + str(row_id), rel='GET')] return Response(json.dumps(collection.to_dict(), indent=4, sort_keys=True), status=201, mimetype='application/vnd.collection+json') elif request.method == 'GET': # else send back a Template for the requested table parser = reqparse.RequestParser() parser.add_argument('name', help='Name of the Table') args = parser.parse_args() table_name = args['name'] if table_name is None: # if no argument found, return 400, "Bad Request" return Response(status=400, mimetype='application/vnd.collection+json') else: if table_name == "games": collection.template = Template(data=[Data(name='table', value='games'), Data(name='name', value=''), Data(name='description', value='')]) elif table_name == "players": collection.template = Template(data=[Data(name='table', value='players'), Data(name='handle', value=''), Data(name='first', value=''), Data(name='last', value=''), Data(name='email', value=''), Data(name='password', value='')]) elif table_name == "scores": collection.template = Template(data=[Data(name='table', value='scores'), Data(name='game_id', value=''), Data(name='player_id', value=''), Data(name='score', value='')]) return Response(json.dumps(collection.to_dict(), indent=4, sort_keys=True), status=200, mimetype='application/vnd.collection+json') else: return 'Unsupported HTTP method: {}.'.format(request.method)