def format_schedule(schedule): tomorrow = get_tomorrow() tomorrow_day = get_tomorrow_day() content = "明天是星期" + week_day_zh[tomorrow_day] + "," + str(tomorrow.year) + "年" + str(tomorrow.month) + "月" + str( tomorrow.day) + "日" content += "<br>" if len(schedule) > 0: content += "共有<b>" + str(len(schedule)) + "</b>节课" content += "<hr>" for lesson in schedule: if lesson.startTime < 6: # 上午的课 content += "上午" elif lesson.startTime < 11: content += "下午" else: content += "晚上" content += course_times[lesson.startTime - 1] + "<br>" content += "课程名称: <b>" + lesson.name + "</b><br>" if len(lesson.place) > 0: content += "课程地点:<b>" + lesson.place + "</b><br>" if len(lesson.teacher) > 0: content += "教师:" + lesson.teacher + "<br>" content += "<br><hr>" content += "本周是第" + str(get_now_week()) + "周," content += "新的一天,好好加油!" else: content += "明天没课,好好休息下哈~" return content
def get_main_news(cls, request, last_readed=0): # TODO 筛选头条新闻(有图) news = cls.objects.filter( n_date=get_tomorrow(), id__gt=last_readed).exclude(imageurls='[]')[0:9] return news
def get_pic_main_news(cls, request): last_readed = request.session.get("last_readed", 0) # TODO 筛选头条新闻(有图) news = cls.objects.filter( n_date=get_tomorrow(), id__gte=last_readed).exclude(imageurls='[]')[9:13] print news return news
def get_news_list(cls, request, start=0, size=10, type=None): b_type = request.GET.get("b_type") if start == 0: start = request.session.get( b_type + "last_start", 0) query = {"n_date": get_tomorrow()} if b_type: query["b_type"] = int(b_type) news = cls.objects.filter(**query)[ start: start + size] count = news.count() # print news # print query request.session[b_type + "last_start"] = start return news, count, start
def get_news_list(cls, request, start=0, size=10, type=None): b_type = request.GET.get("b_type") if start == 0: start = request.session.get( b_type + "last_start", 0) query = {"n_date": get_tomorrow()} if b_type: query["b_type"] = int(b_type) news = cls.objects.filter(**query)[ start: start + size] total = cls.objects.filter(**query).count() count = news.count() if size > count: add_news = cls.objects.filter(**query)[: size - count] news = news.union(add_news) start = size - count request.session[b_type + "last_start"] = start return news, total, start
def get_menus(cls): menus = cls.objects.filter( n_date=get_tomorrow()).exclude(b_type=None).values_list( 'b_type').annotate(counts=Count('id')).filter(counts__gt=0) return menus
def get_occupancy(last, bucketsize): """ We deliver historical occupancy up until "now". If the building has occupancy sensors, we pull that data and aggregate it by zone. Take mean occupancy per zone (across all sensors). If building does *not* have occupancy sensors, then we need to read the results from some occupancy file. """ if last not in ['hour', 'day', 'week']: return "Must be hour, day, week" start_date = get_start(last) zones = defaultdict(list) prediction_start = datetime.now(config.TZ) md = config.HOD.do_query(occupancy_query) if md['Rows'] is not None: for row in md['Rows']: zones[row['?zone']].append(row['?occ_uuid']) q = occupancy_data_query.copy() q["Time"] = { "T0": start_date.strftime("%Y-%m-%d %H:%M:%S %Z"), "T1": prediction_start.strftime("%Y-%m-%d %H:%M:%S %Z"), "WindowSize": bucketsize, "Aligned": True, } resp = config.MDAL.do_query(q, timeout=120) if 'error' in resp: print 'ERROR', resp return df = resp['df'].fillna(method='ffill') for zone, uuidlist in zones.items(): if len(uuidlist) > 0: zones[zone] = json.loads(df[uuidlist].mean(axis=1).to_json()) else: zones[zone] = {} # get predicted output prediction_end = get_tomorrow() predicted = list( rrule.rrule(freq=rrule.HOURLY, dtstart=prediction_start, until=prediction_end)) for zone, occdict in zones.items(): for date in predicted: occdict[int(int(date.strftime('%s')) * 1000)] = 'predicted' # prediction zones[zone] = occdict else: md = config.HOD.do_query(zone_query) zonenames = [x['?zone'].lower() for x in md['Rows']] conn = sqlite3.connect('occupancy_schedule.db') sql = conn.cursor() for zone in zonenames: query = "SELECT * FROM schedules WHERE site='{0}' and zone='{1}' and dayofweek='{2}'".format( config.SITE, zone, prediction_start.strftime('%A').lower()) res = sql.execute(query).fetchall() records = {'time': [], 'occ': [], 'zone': []} for sqlrow in res: hour, minute = sqlrow[3].split(':') time = datetime(year=prediction_start.year, month=prediction_start.month, day=prediction_start.day, hour=int(hour), minute=int(minute), tzinfo=prediction_start.tzinfo) occ = sqlrow[5] zone = sqlrow[1] records['time'].append(time) records['occ'].append(occ) records['zone'].append(zone) df = pd.DataFrame.from_records(records) df = df.set_index(df.pop('time')) if len(df) == 0: continue sched = df.resample(bucketsize.replace('m', 'T')).ffill() zones[zone] = json.loads(sched['occ'].to_json()) conn.close() return zones