def __init__(self, config): self.redis = config['backend'] self.backend = RedisBackend(self.redis) self.init_templating() self.add_routing() self.init_contexts() self.read_data()
class Server(object): def __init__(self, config): self.redis = config['backend'] self.backend = RedisBackend(self.redis) self.init_templating() self.add_routing() self.init_contexts() self.read_data() def init_contexts(self): r = self.redis self.contexts = self.backend.all_contexts() print ("context before:", self.contexts) if not self.contexts: for (context_id, context_attribs) in default_contexts.items(): r.sadd("contexts", context_id) for attr_name,attr_val in context_attribs.items(): r.set("context:%s:%s" %(context_id, attr_name), attr_val) self.contexts = self.backend.all_contexts() print ("context after:", self.contexts) def read_data(self): r = self.redis person_ids = [int(i) for i in r.smembers("persons")] if len(person_ids) == 0: r.set("next.person.id", 0) self.persons = {} self.tasks = {} for person_id in person_ids: name = r.get("person:%s:name" %person_id) task_ids = [int(i) for i in r.lrange("person:%s:tasks" %person_id, 0, -1)] person_tasks = [] for task_id in task_ids: if task_id not in self.tasks: task = self.backend.get_task_by_id(task_id) else: task = self.tasks[task_id] person_tasks.append(task) person = Person(person_id, name, person_tasks) self.persons[person_id] = person def init_templating(self): template_path = os.path.join(os.path.dirname(__file__), '../../templates') self.jinja_env = Environment(loader=FileSystemLoader(template_path), autoescape=True) def add_routing(self): self.url_map = Map([ Rule('/', endpoint='homepage'), Rule('/persons/register', endpoint='register_form'), Rule('/persons/new', endpoint='register_submit'), Rule('/new/<int:person_id>', endpoint='new_task'), Rule('/persons', endpoint='person_list'), Rule('/person/<int:person_id>', endpoint='person_tasks'), #Rule('/<short_id>+', endpoint='short_link_details') ]) def on_register_submit(self, request): person_name = request.form['person_name'] person = self.backend.new_person(person_name) person_id = person.person_id self.persons[person_id] = person return redirect('/person/%s' %person_id) def on_register_form(self, request): return self.render_template("register.html") def on_homepage(self, request): return self.render_template("welcome.html", persons=self.persons.values()) def render_template(self, template_name, **context): t = self.jinja_env.get_template(template_name) return Response(t.render(context), mimetype='text/html') def dispatch_request(self, request): adapter = self.url_map.bind_to_environ(request.environ) try: endpoint, values = adapter.match() return getattr(self, 'on_' + endpoint)(request, **values) except HTTPException, e: return e