Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
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)