diff --git a/apis/__init__.py b/apis/__init__.py index d9d33eb..754278a 100644 --- a/apis/__init__.py +++ b/apis/__init__.py @@ -5,3 +5,4 @@ from .blogs import blogs from .gsoc import gsoc from .tv_shows import tv_shows +from .pkmn import pkmn diff --git a/apis/pkmn.py b/apis/pkmn.py new file mode 100644 index 0000000..d4776fc --- /dev/null +++ b/apis/pkmn.py @@ -0,0 +1,229 @@ +import flask +from flask import jsonify,Blueprint,request,abort + +pkmn = Blueprint('pkmn',__name__) + +pokemon = [ + { + 'id' : 0, + 'name' : 'Charizard', + 'number' : 6, + 'type1' : 'Fire', + 'type2' : 'Flying', + 'species' : 'Flame Pokemon' + }, + + { + 'id' : 1, + 'name' : 'Pikachu', + 'number' : 25, + 'type1' : 'Electric', + 'type2' : None, + 'species' : 'Mouse Pokemon' + }, + + { + 'id' : 2, + 'name' : 'Gengar', + 'number' : 94, + 'type1' : 'Ghost', + 'type2' : 'Poison', + 'species' : 'Shadow Pokemon', + }, +] + +@pkmn.route('/', methods=['GET']) +def home(): + return '''

Pokemon

''' + +@pkmn.route('/pokemon/all',methods=['GET']) +def all_pokemon(): + return jsonify(pokemon) + +@pkmn.route('/pokemon/',methods=['GET']) +def get_pokemon1(dex_number): + poke = {} + for p in pokemon: + if p['number'] == dex_number: + poke = p + break + if len(poke) == 0: + abort(404) + return jsonify(poke) + +@pkmn.route('/pokemon/',methods=['GET']) +def get_pokemon2(poke_name): + poke = {} + for p in pokemon: + if p['name'].lower() == poke_name.lower(): + poke = p + break + if len(poke) == 0: + abort(404) + return jsonify(poke) + + +@pkmn.route('/add',methods=['POST']) +def add_pokemon(): + if not request.json or not 'name' in request.json: + abort(400) + poke = { + 'id': pokemon[-1]['id'] + 1, + 'name': request.json['name'], + 'number': request.json.get('number'), + 'type1': request.json.get('type1'), + 'type2': request.json.get('type2',None), + 'species': request.json.get('species', ""), + } + + pokemon.append(poke) + return jsonify(pokemon),201 + +@pkmn.route('/update/',methods=['PUT']) +def update_pokemon(pid): + poke = {} + for p in pokemon: + if p['id'] == pid: + poke = p + break + + if len(poke) == 0: + abort(404) + if not request.json: + abort(400) + if 'name' in request.json and type(request.json['name']) != str: + abort(400) + if 'number' in request.json and type(request.json['number']) != int: + abort(400) + if 'type1' in request.json and type(request.json['type1']) != str: + abort(400) + if 'type2' in request.json and type(request.json['type1']) != str: + abort(400) + if 'species' in request.json and type(request.json['species']) != str: + abort(400) + + poke['name'] = request.json.get('name', poke['name']) + poke['number'] = request.json.get('number', poke['number']) + poke['type1'] = request.json.get('type1', poke['type1']) + poke['type2'] = request.json.get('type2', poke['type2']) + poke['species'] = request.json.get('species', poke['species']) + return jsonify(poke) + +@pkmn.route('/qupdate/',methods=['PATCH']) +def quick_update(pid): + poke = {} + for p in pokemon: + if p['id'] == pid: + poke = p + break + chk = 0 + field = [] + if len(poke) == 0: + abort(404) + if not request.json: + abort(400) + if 'name' in request.json and type(request.json['name']) != str: + abort(400) + elif 'name' in request.json: + chk = 1 + field.append('name') + if 'number' in request.json and type(request.json['number']) != int: + abort(400) + elif 'number' in request.json: + chk = 1 + field.append('number') + if 'type1' in request.json and type(request.json['type1']) != str: + abort(400) + elif 'type1' in request.json: + chk = 1 + field.append('type1') + if 'type2' in request.json and type(request.json['type1']) != str: + abort(400) + elif 'type2' in request.json: + chk = 1 + field.append('type2') + if 'species' in request.json and type(request.json['species']) != str: + abort(400) + elif 'species' in request.json: + chk = 1 + field.append('species') + + if chk==1: + for s in field: + poke[s] = request.json.get(s, poke[s]) + return jsonify(poke) + +@pkmn.route('/delete/',methods=['DELETE']) +def delete_pokemon(pid): + poke = {} + for p in pokemon: + if p['id'] == pid: + poke = p + break + + if len(poke)==0: + abort(404) + pokemon.remove(poke) + return jsonify({'result': True}) + +@pkmn.route('/docs') +def docs(): + endpoints = [ + { + 'url': '/api/pkmn', + 'method': 'GET', + 'description': 'A pkmn endpoint serving GET requests as a webhook' + + }, + { + 'url': '/api/pkmn/pokemon/all', + 'method': 'GET', + 'description': 'A pkmn endpoint to get list of all Pokemon' + + }, + { + 'url': '/api/pkmn/pokemon/', + 'method': 'GET', + 'description': 'A pkmn endpoint to get specific Pokemon by Pokedex number' + + }, + { + 'url': '/api/pkmn/pokemon/', + 'method': 'GET', + 'description': 'A pkmn endpoint to get specific Pokemon by name' + + }, + { + 'url': '/api/pkmn/add', + 'method': 'POST', + 'description': 'A pkmn endpoint to add a new Pokemon' + + }, + { + 'url': '/api/pkmn/update/', + 'method': 'PUT', + 'description': 'A pkmn endpoint to update specific Pokemon details,choose by id' + + }, + { + 'url': '/api/pkmn/delete/', + 'method': 'DELETE', + 'description': 'A pkmn endpoint to delete specific Pokemon,choose by id' + + } + + ] + + return jsonify({'endpoints': endpoints}) + + + + + + + + + + + + diff --git a/app.py b/app.py index e2bf147..269946e 100644 --- a/app.py +++ b/app.py @@ -8,7 +8,7 @@ from apis import blogs from apis import gsoc from apis import tv_shows - +from apis import pkmn # Initialize the app app = Flask(__name__, instance_relative_config=True)