diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9f0b92a --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +web.py==0.37 \ No newline at end of file diff --git a/server.py b/server.py new file mode 100644 index 0000000..16769af --- /dev/null +++ b/server.py @@ -0,0 +1,121 @@ +import web +# import redis +# import csv +# import json +import time +# r = redis.StrictRedis(host='localhost', port=6379, db=0) + +urls = [ + "/set", "set_params", + "/get", "get_params", + "/refresh", "get_all", + "/confirm", "confirm_params" +] + + +class DataStore(object): + + """docstring for DataStore""" + + def __init__(self): + super(DataStore, self).__init__() + self._dict = {} + + def __setitem__(self, key, value): + value = str(value) + self.check_key(key) + param_dict = self._dict[key] + if param_dict["new_value"] != value: + param_dict["confirmed"] = False + param_dict["new_value"] = value + + def confirm(self, key, value): + value = str(value) + self.check_key(key) + param_dict = self._dict[key] + if param_dict["new_value"] == value: + param_dict["confirmed"] = True + + def __getitem__(self, key): + self.check_key(key) + param_dict = self._dict[key] + if (not param_dict["confirmed"]) and (param_dict["new_value"] is not None): + return param_dict["new_value"] + else: + return None + + def check_key(self, key): + if key not in self._dict: + self._dict[key] = {"confirmed": False, "new_value": None} + + def get_modified(self): + dict_modified = {} + for key in self._dict: + value = self[key] + if value is not None: + dict_modified[key] = value + return dict_modified + + +def dict_to_response(_dict): + str_response = "" + for key in _dict: + value = _dict[key] + str_response += "=".join([key, value]) + " " + str_response += "time=" + time.ctime().replace(" ", "-") + str_response = "`" + str_response + "`" + return str_response + +data = DataStore() + +data["a"] = 5 +data["c"] = 45 + + +class get_params: + + def GET(self): + global data + print("Sending data back") + print(data._dict) + return dict_to_response(data.get_modified()) + + +class set_params: + + def GET(self): + dict_input = dict(web.input()) + for key in dict_input: + value = dict_input[key] + data[key] = value + + +class get_all: + + def GET(self): + dict_all = {} + for key in data._dict: + value = data._dict[key]["new_value"] + if value is not None: + dict_all[key] = value + return dict_to_response(dict_all) + + +class confirm_params(object): + + def GET(self): + dict_input = dict(web.input()) + for key in dict_input: + value = dict_input[key] + data.confirm(key, value) + + +# class refresh: + +# def GET(self): + + +if __name__ == "__main__": + + app = web.application(urls, globals()) + app.run()