def create_plan(data): if "code" not in data or "data" not in data: return False code = data["code"] plan_id = Plan.generate_id_string(code) if get_plan(plan_id): # Check in cache AND in database return False model = Plan( key=ndb.Key(Plan, plan_id), code=code, history=[{ "id": calendar.timegm(datetime.datetime.now().utctimetuple()), "data": data["data"] }] ) model.put(use_cache=False, use_memcache=True) return model
def post(self, section, page=None): reply = {'success': True } ######################################################## ### Index ######################################################## ### TimeLIne if section == 'timeline': reply['timeline'] = self.get_timeline() ######################################################## ### Requests elif section == 'requests': reply['requests'] = self.get_schedule() elif section == 'request': ### Fetch Request if page == 'fetch': fppID = self.request.get("fppID") if not fppID: reply['error'] = 'No fppID' else: if fppID == '0': t = time.time() d = datetime.datetime.fromtimestamp(t - t % (60 *15) ) dic = { 'callsign': self.request.cookies['sessIdent'] , 'email': '', 'dep': '', 'dep_date': d.strftime(conf.MYSQL_DATETIME), 'dep_atc': '', 'arr': '', 'arr_date': '', 'arr_atc': '', 'comment': '', 'fppID': '0' } else: f = db.get( db.Key(fppID) ) dic = { 'callsign': f.callsign, 'email': 'email', 'dep': f.dep, 'dep_date': f.dep_date.strftime(conf.MYSQL_DATETIME), 'dep_atc': f.dep_atc, 'arr': f.arr, 'arr_date': f.arr_date.strftime(conf.MYSQL_DATETIME), 'arr_atc': f.arr_atc, 'comment': f.comment, 'fppID': str(f.key()), } reply['fpp'] = dic ################### ### Edit Request elif page == 'edit': fppID = self.request.get("fppID") if not fppID: reply['error'] = 'No fppID' else: callsign = self.request.get("callsign") if fppID == '0': fp = FPp(callsign = callsign) subject = 'New FP: %s' % callsign else: subject = 'Edit FP: %s' % callsign fp = db.get( db.Key(fppID) ) fp.cookie = self.request.cookies['sessID'] fp.callsign = callsign fp.dep = self.request.get("dep") fp.dep_date = self.get_date(self.request.get("dep_date"), self.request.get("dep_time")) fp.dep_atc = self.request.get("dep_atc") fp.arr = self.request.get("arr") fp.arr_date = self.get_date(self.request.get("arr_date"), self.request.get("arr_time")) fp.arr_atc = self.request.get("arr_atc") fp.comment = self.request.get("comment") fp.email = self.request.get("email") fp.put() reply['fppID'] = str(fp.key()) mail.send_mail( sender = conf.EMAIL, to = "Dev <*****@*****.**>", subject = subject, body = "Fp edited" ) ################### ### Delete Request elif page == 'delete': fppID = self.request.get("fppID") if not fppID: reply['error'] = 'No fppID' fp = db.get( db.Key(fppID) ) fp.delete() ######################################################## ### Crew elif section == 'crew': if 'sessID' in self.request.cookies: sessID = self.request.cookies['sessID'] if page == 'edit': crew = db.get( db.Key(sessID) ) crew.name = self.request.get('name') crew.email = self.request.get('email') crew.callsign = self.request.get('callsign') crew.cvs = self.request.get('cvs') crew.irc = self.request.get('irc') crew.forum = self.request.get('forum') crew.wiki = self.request.get('wiki') crew.pilot = False if self.request.get('pilot') == '' else True crew.atc = False if self.request.get('atc') == '' else True crew.fgcom = False if self.request.get('fgcom') == '' else True crew.location = self.request.get('location') crew.put() reply['crew+saved'] = True cook_str = 'sessIdent=%s; expires=Fri, 31-Dec-2020 23:59:59 GMT; Path=/;' % crew.callsign self.response.headers.add_header( 'Set-Cookie', cook_str ) else: crew = db.get( db.Key(sessID) ) reply['crew'] = [{'name': crew.name, 'email': crew.email, 'callsign': crew.callsign, 'cvs': crew.cvs, 'forum': crew.forum, 'irc': crew.irc, 'wiki': crew.wiki, 'pilot': crew.pilot, 'atc': crew.atc, 'fgcom': crew.fgcom, 'date_created': crew.date_created.strftime(conf.MYSQL_DATETIME), 'location': crew.location, 'ident': crew.ident }] ######################################################## ### Airpots elif section == 'airports': search = self.request.get("search") reply['airports'] = [] if not search: pass else: search = search.upper() reply['search'] = search for icao in airports: ss = icao + ' ' + airports[icao] if ss.upper().find(search) > -1: reply['airports'].append({'icao': icao, 'airport': airports[icao]}) ######################################################## ### Plans elif section == 'plans': col_len = -1 q = Plan.all() plans = q.fetch(1000) ret = [] for p in plans: route = json.loads(p.route) ret.append({'dep': p.dep, 'dest': p.dest, 'cruise': p.cruise, 'route': route, 'planID': str(p.key())}) if len(route) > col_len: col_len = len(route) reply['plans'] = ret reply['col_len'] = col_len elif section == 'plan': planID = '0' if page == 'edit': xml_str = self.request.get("xml") if planID == '0': data = self.parse_plan_xml(xml_str) plan = Plan() plan.xml = xml_str plan.dep = data['dep'] plan.dest = data['dest'] plan.route = json.dumps(data['route']) plan.put() reply['planID'] = str(plan.key()) ######################################################## ### Return Data ret_type = self.request.get('retDataType') if ret_type: if ret_type == 'schedule': reply['schedule'] = self.get_schedule() if ret_type == 'timeline': reply['timeline'] = self.get_timeline() ######################################################## ### Send self.response.headers.add_header('Content-Type','text/plain') self.response.out.write(json.dumps(reply))