def response(): action = cgi_get("action", choices=["schema", "get", "edit", "delete"]) # edit/delete always require credentials; getters do configurably if not config.db.public or action in ["edit", "delete"]: if cgi_get("pw") != config.admin.pw: fail("wrong") if action == "schema": succeed(get_schema()) elif action == "get": sig = cgi_dump() res = getmem(sig, False) if not res: mname = cgi_get("modelName", required=False) keys = cgi_get("keys", required=False) if mname: res = get_page(mname, cgi_get("limit"), cgi_get("offset"), cgi_get("order", default="index"), cgi_get("filters", default={})) elif keys: res = [d.data() for d in get_multi(keys)] else: res = get(cgi_get("key")).data() if config.memcache.db: setmem(sig, res, False) succeed(res) elif action == "edit": if config.memcache.db: clearmem() succeed(edit(cgi_get("data")).data()) elif action == "delete": get(cgi_get("key")).rm() succeed()
def payCal(): log("payCal!", important=True) today = datetime.now() tomorrow = today + timedelta(1) reminders = {} cbatch = PayBatch(variety="calendar") cbatch.put() deetz = [] for stew in Stewardship.query().all(): task = stew.task() pod = task2pod(task) person = db.get(stew.steward) slot = stew.happening(today) if slot: log("confirm: %s (%s)" % (task.name, task.mode)) if task.mode == "automatic": cbatch.count += 1 deetz.append("%s - %s hours" % (task.name, slot.duration)) pod.deposit(person, slot.duration, cbatch, "task: %s" % (task.name, ), task.description) elif task.mode == "email confirmation": appointment(slot, task, pod, person) if person.remind: slot = stew.happening(tomorrow) if slot: log("remind: %s (%s)" % (task.name, task.mode)) remember(slot, task, pod, person, reminders) cbatch.details = "\n".join(deetz) cbatch.put() remind(reminders)
def membership(self): from .core import Person, Membership person = Person.query( Person.contributors.contains(self.contributor.urlsafe())).get() pod = db.get(self.codebase).pod return person and pod and Membership.query( Membership.pod == pod, Membership.person == person.key).get()
def secs(self, sections=None, depth=0, novars=False, page_breaks=False): return "\r\n\r\n".join(sections and [ db.get(s['key']).content(s['sections'], depth, novars, page_breaks) for s in sections ] or [ s.content(depth=depth, novars=novars, page_breaks=page_breaks) for s in db.get_multi(self.sections) ])
def manage(agent, membership, identifier, memberships=None): memship = db.get(membership or memberships[0]) pod = db.get(memship.pod) if pod.agent.urlsafe() != (agent or global_pod().agent.urlsafe()): error("wrong!") conq = Content.query(Content.identifier == identifier) if memberships: conq.filter(Content.memberships == memberships) else: conq.filter(Content.membership == membership) con = conq.get() if not con: con = Content(identifier=identifier) if memberships: con.memberships = memberships else: con.membership = membership con.put() return con
def edit(data, session=session): from cantools.db import get, get_model ent = "key" in data and get(data["key"], session) or get_model( data["modelName"])() for propname, val in data.items(): if propname in ent._schema: if val: if propname in ent._schema["_kinds"]: # foreignkey val = KeyWrapper(val) elif ent._schema[ propname] == "datetimeautostamper" and not isinstance( val, datetime): val = datetime.strptime(val, "%Y-%m-%d %H:%M:%S") setattr(ent, propname, val) ent.put() return ent
def get(self, session=None): from cantools.db import get if not session: from cantools.db import session return get(self.value, session)
def enroll(agent, pkey, person): pod = db.get(pkey) if pod.agent.urlsafe() != agent: error("wrong!") return db.get(person).enroll(pod)