├── .gitignore ├── Pipfile ├── Pipfile.lock ├── app.py └── products.py /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | name = "pypi" 3 | url = "https://pypi.org/simple" 4 | verify_ssl = true 5 | 6 | [dev-packages] 7 | autopep8 = "*" 8 | 9 | [packages] 10 | flask = "*" 11 | pylint = "*" 12 | 13 | [requires] 14 | python_version = "3.6" 15 | -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "8c63d2f828893b5e335290a83683a1430931a504c71134d73255df46340e2c93" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.6" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "pypi", 13 | "url": "https://pypi.org/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "astroid": { 20 | "hashes": [ 21 | "sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", 22 | "sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4" 23 | ], 24 | "version": "==2.2.5" 25 | }, 26 | "click": { 27 | "hashes": [ 28 | "sha256:2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", 29 | "sha256:5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7" 30 | ], 31 | "version": "==7.0" 32 | }, 33 | "flask": { 34 | "hashes": [ 35 | "sha256:13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52", 36 | "sha256:45eb5a6fd193d6cf7e0cf5d8a5b31f83d5faae0293695626f539a823e93b13f6" 37 | ], 38 | "index": "pypi", 39 | "version": "==1.1.1" 40 | }, 41 | "isort": { 42 | "hashes": [ 43 | "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1", 44 | "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd" 45 | ], 46 | "version": "==4.3.21" 47 | }, 48 | "itsdangerous": { 49 | "hashes": [ 50 | "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19", 51 | "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749" 52 | ], 53 | "version": "==1.1.0" 54 | }, 55 | "jinja2": { 56 | "hashes": [ 57 | "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", 58 | "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" 59 | ], 60 | "version": "==2.10.1" 61 | }, 62 | "lazy-object-proxy": { 63 | "hashes": [ 64 | "sha256:159a745e61422217881c4de71f9eafd9d703b93af95618635849fe469a283661", 65 | "sha256:23f63c0821cc96a23332e45dfaa83266feff8adc72b9bcaef86c202af765244f", 66 | "sha256:3b11be575475db2e8a6e11215f5aa95b9ec14de658628776e10d96fa0b4dac13", 67 | "sha256:3f447aff8bc61ca8b42b73304f6a44fa0d915487de144652816f950a3f1ab821", 68 | "sha256:4ba73f6089cd9b9478bc0a4fa807b47dbdb8fad1d8f31a0f0a5dbf26a4527a71", 69 | "sha256:4f53eadd9932055eac465bd3ca1bd610e4d7141e1278012bd1f28646aebc1d0e", 70 | "sha256:64483bd7154580158ea90de5b8e5e6fc29a16a9b4db24f10193f0c1ae3f9d1ea", 71 | "sha256:6f72d42b0d04bfee2397aa1862262654b56922c20a9bb66bb76b6f0e5e4f9229", 72 | "sha256:7c7f1ec07b227bdc561299fa2328e85000f90179a2f44ea30579d38e037cb3d4", 73 | "sha256:7c8b1ba1e15c10b13cad4171cfa77f5bb5ec2580abc5a353907780805ebe158e", 74 | "sha256:8559b94b823f85342e10d3d9ca4ba5478168e1ac5658a8a2f18c991ba9c52c20", 75 | "sha256:a262c7dfb046f00e12a2bdd1bafaed2408114a89ac414b0af8755c696eb3fc16", 76 | "sha256:acce4e3267610c4fdb6632b3886fe3f2f7dd641158a843cf6b6a68e4ce81477b", 77 | "sha256:be089bb6b83fac7f29d357b2dc4cf2b8eb8d98fe9d9ff89f9ea6012970a853c7", 78 | "sha256:bfab710d859c779f273cc48fb86af38d6e9210f38287df0069a63e40b45a2f5c", 79 | "sha256:c10d29019927301d524a22ced72706380de7cfc50f767217485a912b4c8bd82a", 80 | "sha256:dd6e2b598849b3d7aee2295ac765a578879830fb8966f70be8cd472e6069932e", 81 | "sha256:e408f1eacc0a68fed0c08da45f31d0ebb38079f043328dce69ff133b95c29dc1" 82 | ], 83 | "version": "==1.4.1" 84 | }, 85 | "markupsafe": { 86 | "hashes": [ 87 | "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", 88 | "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", 89 | "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", 90 | "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", 91 | "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", 92 | "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", 93 | "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", 94 | "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", 95 | "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", 96 | "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", 97 | "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", 98 | "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", 99 | "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", 100 | "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", 101 | "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", 102 | "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", 103 | "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", 104 | "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", 105 | "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", 106 | "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", 107 | "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", 108 | "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", 109 | "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", 110 | "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", 111 | "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", 112 | "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", 113 | "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", 114 | "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7" 115 | ], 116 | "version": "==1.1.1" 117 | }, 118 | "mccabe": { 119 | "hashes": [ 120 | "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", 121 | "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" 122 | ], 123 | "version": "==0.6.1" 124 | }, 125 | "pylint": { 126 | "hashes": [ 127 | "sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", 128 | "sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1" 129 | ], 130 | "index": "pypi", 131 | "version": "==2.3.1" 132 | }, 133 | "six": { 134 | "hashes": [ 135 | "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", 136 | "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" 137 | ], 138 | "version": "==1.12.0" 139 | }, 140 | "typed-ast": { 141 | "hashes": [ 142 | "sha256:18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", 143 | "sha256:262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", 144 | "sha256:2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", 145 | "sha256:354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", 146 | "sha256:4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", 147 | "sha256:630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", 148 | "sha256:66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", 149 | "sha256:71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", 150 | "sha256:95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", 151 | "sha256:bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", 152 | "sha256:cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", 153 | "sha256:d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", 154 | "sha256:d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", 155 | "sha256:d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", 156 | "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" 157 | ], 158 | "markers": "implementation_name == 'cpython'", 159 | "version": "==1.4.0" 160 | }, 161 | "werkzeug": { 162 | "hashes": [ 163 | "sha256:87ae4e5b5366da2347eb3116c0e6c681a0e939a33b2805e2c0cbd282664932c4", 164 | "sha256:a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6" 165 | ], 166 | "version": "==0.15.5" 167 | }, 168 | "wrapt": { 169 | "hashes": [ 170 | "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" 171 | ], 172 | "version": "==1.11.2" 173 | } 174 | }, 175 | "develop": { 176 | "autopep8": { 177 | "hashes": [ 178 | "sha256:4d8eec30cc81bc5617dbf1218201d770dc35629363547f17577c61683ccfb3ee" 179 | ], 180 | "index": "pypi", 181 | "version": "==1.4.4" 182 | }, 183 | "pycodestyle": { 184 | "hashes": [ 185 | "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", 186 | "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" 187 | ], 188 | "version": "==2.5.0" 189 | } 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, jsonify, request 2 | 3 | app = Flask(__name__) 4 | 5 | from products import products 6 | 7 | # Testing Route 8 | @app.route('/ping', methods=['GET']) 9 | def ping(): 10 | return jsonify({'response': 'pong!'}) 11 | 12 | # Get Data Routes 13 | @app.route('/products') 14 | def getProducts(): 15 | # return jsonify(products) 16 | return jsonify({'products': products}) 17 | 18 | 19 | @app.route('/products/') 20 | def getProduct(product_name): 21 | productsFound = [ 22 | product for product in products if product['name'] == product_name.lower()] 23 | if (len(productsFound) > 0): 24 | return jsonify({'product': productsFound[0]}) 25 | return jsonify({'message': 'Product Not found'}) 26 | 27 | # Create Data Routes 28 | @app.route('/products', methods=['POST']) 29 | def addProduct(): 30 | new_product = { 31 | 'name': request.json['name'], 32 | 'price': request.json['price'], 33 | 'quantity': 10 34 | } 35 | products.append(new_product) 36 | return jsonify({'products': products}) 37 | 38 | # Update Data Route 39 | @app.route('/products/', methods=['PUT']) 40 | def editProduct(product_name): 41 | productsFound = [product for product in products if product['name'] == product_name] 42 | if (len(productsFound) > 0): 43 | productsFound[0]['name'] = request.json['name'] 44 | productsFound[0]['price'] = request.json['price'] 45 | productsFound[0]['quantity'] = request.json['quantity'] 46 | return jsonify({ 47 | 'message': 'Product Updated', 48 | 'product': productsFound[0] 49 | }) 50 | return jsonify({'message': 'Product Not found'}) 51 | 52 | # DELETE Data Route 53 | @app.route('/products/', methods=['DELETE']) 54 | def deleteProduct(product_name): 55 | productsFound = [product for product in products if product['name'] == product_name] 56 | if len(productsFound) > 0: 57 | products.remove(productsFound[0]) 58 | return jsonify({ 59 | 'message': 'Product Deleted', 60 | 'products': products 61 | }) 62 | 63 | if __name__ == '__main__': 64 | app.run(debug=True, port=4000) 65 | -------------------------------------------------------------------------------- /products.py: -------------------------------------------------------------------------------- 1 | products = [ 2 | {'name': 'laptop', 'price': 800, 'quantity': 4}, 3 | {'name': 'mouse', 'price': 40, 'quantity': 10}, 4 | {'name': 'monitor', 'price': 400, 'quantity': 3} 5 | ] --------------------------------------------------------------------------------