/
app.py
68 lines (65 loc) · 3.08 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env python
# -*- coding: utf-8 -*
from flask import Flask
from flask_restful import Resource, Api
from fibonacci import Fibonacci
import helper as helper
import os
#App Initialization
app = Flask(__name__)
api = Api(app)
config = None
cachelist = None
#handler for default page
class LandingPage(Resource):
def get(self):
return {config['DEFAULT_TITLE']: config['DEFAULT_MESSAGE']}
#Handler for fibonacci/get/<num>
class FibonacciGetWithParam(Resource):
def get(self, num):
if num.isnumeric():
num = int(num)
if num > config['CACHING_UPPER_LIMIT']:
return helper.handle_invalid_usage(config['CACHE_LIMIT_EXCEEDED_ERROR'], config['CACHE_LIMIT_EXCEEDED_CODE'],config)
elif num < 0:
return helper.handle_invalid_usage(config['NEGATIVE_VALUE_ERROR'], config['NEGATIVE_CODE'],config)
elif config['CACHE_ENABLE'] and num > config['LOWER_LIMIT_FOR_CACHING']:
cachelist = os.listdir(config['CACHE_DIRECTORY'])
if len(cachelist) > 0:
#elif num < max(cachelist):
if num in cachelist:
res = Fibonacci().fibofetchFromCache(num,num)
return helper.handle_success(res,config['SUCCESS_CODE'], config)
else:
templist = map(int,cachelist)
templist.append(num)
templist.sort()
ifound = templist.index(num)
if ifound+1 < len(templist):
idealCacheFile = templist[ifound+1]
res = Fibonacci().fibofetchFromCache(num,idealCacheFile)
return helper.handle_success(res,config['SUCCESS_CODE'], config)
else:
idealCacheFile = None
res = Fibonacci().fiboGen(num)
return helper.handle_success(res,config['SUCCESS_CODE'], config)
else:
res = Fibonacci().fiboGen(num)
return helper.handle_success(res,config['SUCCESS_CODE'], config)
else:
print "caching not necessary"
res = Fibonacci().fiboGen(num)
return helper.handle_success(res,config['SUCCESS_CODE'], config)
else:
return helper.handle_invalid_usage(config['NEGATIVE_VALUE_ERROR'], config['NEGATIVE_CODE'], config )
#handler for fibonacci/get
class FibonacciGetWithoutParam(Resource):
def get(self):
return helper.handle_invalid_usage(config['NUMERIC_ONLY_ERROR'], config['NEGATIVE_CODE'], config)
#set debug=False in config.yaml for Production
if __name__ == '__main__':
config = helper.getConfig()
api.add_resource(LandingPage, '/')
api.add_resource(FibonacciGetWithParam, '/{0}/{1}/<string:num>'.format(config["API_VERSION"], config["API_ENDPOINT"]))
api.add_resource(FibonacciGetWithoutParam, '/{0}/{1}/'.format(config['API_VERSION'], config['API_ENDPOINT']))
app.run(host = config["HOST"],port = config["PORT"],debug = config['DEBUG'])