Esempio n. 1
0
    def testMigration(self):
        from models import Setting

        # put in some old values
        self.policy.SetProbability(1)
        db.put([
            Setting(key_name='test', parent=None, value='old and busted'),
            Setting(key_name='another', parent=None,
                    value='another old value'),
        ])
        Setting._get_settings_dict(bust_cache=True)
        self.policy.SetProbability(0)

        self.assertEqual(Setting._get_or_set_with_key('test'),
                         'old and busted')
        self.assertEqual(Setting._get_or_set_with_key('another'),
                         'another old value')

        # simulate a write
        Setting._get_or_set_with_key('test', 'new hotness')

        # now assert that old and new style settings were updated
        old = Setting.get_by_key_name('test', parent=None)
        self.assertEqual(old.value, 'new hotness')
        new = Setting.get_by_key_name('test',
                                      parent=Setting.entity_group_key())
        self.assertEqual(new.value, 'new hotness')

        # finally, check the caching layers work too
        self.assertEqual(Setting._cache_get_by_key_name("test"), 'new hotness')
        self.assertEqual(Setting._get_or_set_with_key("another"),
                         'another old value')
Esempio n. 2
0
def logviews():
    """
    操作日志界面
    :return: 返回数据查询结果并构建相应页面
    """
    if request.method == "GET":
        page = request.values.get('page', 1, type=int)
        uname = request.values.get('username', "", type=str)
        username = b64decode(unquote(uname))
        catsname = request.values.get('cats', "", type=str)
        cats = b64decode(unquote(catsname))
        date = request.values.get('date', "", type=str)
        logdata = Dev_Loging.query.filter(
            (Dev_Loging.UserName.like("%" + username + "%"), "")[username is None],
            (Dev_Loging.Date.like("%" + date + "%"), "")[date is None],
            (Dev_Loging.Log.like("%" + cats + "%"), "")[cats is None]
        )
        paginateion = logdata.paginate(
            page, per_page=Setting().pagination
        )
        posts = paginateion.items
        count = logdata.count()
        eventlog("[查看日志]" + " 第" + str(page) +"页")
        return render_template(
            '/admin/log.html', posts=posts, count=count, pagination=paginateion,
            page=page, username=uname, cats=catsname, date=date,
            thuname=username.decode('utf-8'), thcats=cats.decode('utf-8')
        )
    elif request.method == "POST":
        cleancode = request.values.get('logcode', 'None', type=str)
        if cleancode == "all":
            return emptylog()
        else:
            page = request.values.get('page', 1, type=int)
            uname = request.values.get('username', "", type=str)
            username = b64decode(unquote(uname))
            catsname = request.values.get('cats', "", type=str)
            cats = b64decode(unquote(catsname))
            date = request.values.get('date', "", type=str)
            logdata = Dev_Loging.query.filter(
                (Dev_Loging.UserName.like("%" + username + "%"), "")[username is None],
                (Dev_Loging.Date.like("%" + date + "%"), "")[date is None],
                (Dev_Loging.Log.like("%" + cats + "%"), "")[cats is None]
            )
            paginateion = logdata.paginate(
                page, per_page=Setting().pagination
            )
            posts = paginateion.items
            count = logdata.count()
            eventlog("[查看日志]" + " 第" + str(page) + "页")
            return render_template(
                '/admin/log.html', posts=posts, count=count, pagination=paginateion,
                page=page, username=uname, cats=catsname, date=date,
                thuname=username.decode('utf-8'), thcats=cats.decode('utf-8')
            )
Esempio n. 3
0
def set_value(db_session, keyname, value):
    setting = Setting.query.filter(Setting.key == keyname).first()
    if not setting:
        setting = Setting(keyname, value)
    else:
        setting.value = value
    db_session.add(setting)
Esempio n. 4
0
def dvr_list_get():
    """
    dvr分类查询
    :return:
    """
    page = request.args.get('page', 1, type=int)
    request.script_root = url_for('indexview.index', _external=True)
    devtype = b64decode(unquote(request.args.get('devtype', "", type=str)))
    devonline = unquote(request.args.get('devonline', "", type=str))
    if devonline == "5piv":
        devonline = "Y"
    elif devonline == "5ZCm":
        devonline = "N"
    devinfo = dvrselectsql(devtype, devonline)
    pagination = devinfo.paginate(page, per_page=Setting().pagination)
    count = devinfo.count()
    datas = pagination.items
    dev_types = DevDevType.query.all()
    result = {
        'datas': datas,
        'count': count,
        'pagination': pagination,
        'devtype': dev_types,
        'devtypebname': devtype.decode('utf-8'),
        'devostatus': devonline
    }
    eventlog("[访问设备管理分类查询页面] " + str(devtype) + str(devonline))
    return result
Esempio n. 5
0
    def update(self, value):
        current_value = self.value

        new_value = self.to_python(value)
        if current_value != new_value:
            db_value = self.get_db_prep_save(value)
            try:
                s = self.setting
                s.value = db_value

            except SettingNotSet:
                log.debug('new setting %s.%s', self.group.key, self.key)
                s = Setting(group=self.group.key, key=self.key, value=db_value)

            if self.use_default and self.default == new_value:
                if s.id:
                    log.info("Deleted setting %s.%s", self.group.key, self.key)
                    s.delete()
            else:
                log.info("Updated setting %s.%s = %s", self.group.key,
                         self.key, value)
                s.save()

            return True
        return False
Esempio n. 6
0
def update_database():
    last_data = {'readings': {'temp': 0, 'humidity': 0}, 'parameters': None}
    while 1:
        update_time = timezone.now()
        data = (yield)
        # Round current temperature and humidity readings
        temperature_rounded = round(data["readings"]["temp"])
        humidity_rounded = round(data["readings"]["humidity"])

        # Compare rounded current readings against the rounded previous readings
        if (round(last_data["readings"]["temp"]) != temperature_rounded) or (
                round(last_data["readings"]["humidity"]) != humidity_rounded):
            try:
                reading_record = Reading.objects.get(pk=1)
            except Reading.DoesNotExist:
                reading_record = Reading(time=update_time,
                                         temperature=temperature_rounded,
                                         humidity=humidity_rounded)
            else:
                reading_record.time = update_time
                reading_record.temperature = temperature_rounded
                reading_record.humidity = humidity_rounded
            reading_record.save()
        if last_data["parameters"] != data["parameters"]:
            setting_record = Setting(time=update_time,
                                     source=0,
                                     mode=data["parameters"]["mode"],
                                     temperature=data["parameters"]["temp"],
                                     humidity=data["parameters"]["humidity"])
            setting_record.save()
        last_data = data
Esempio n. 7
0
def update_database():
    last_data = {'readings': {'temp': 0, 'humidity': 0}, 'parameters': None}
    while 1:
        update_time = timezone.now()
        data = (yield)
        if (round(last_data["readings"]["temp"]) != round(
                data["readings"]["temp"])) or (round(
                    last_data["readings"]["humidity"]) != round(
                        data["readings"]["humidity"])):
            try:
                reading_record = Reading.objects.get(pk=1)
            except Reading.DoesNotExist:
                reading_record = Reading(time=update_time,
                                         temperature=data["readings"]["temp"],
                                         humidity=data["readings"]["humidity"])
            else:
                reading_record.time = update_time
                reading_record.temperature = data["readings"]["temp"]
                reading_record.humidity = data["readings"]["humidity"]
            reading_record.save()
        if last_data["parameters"] != data["parameters"]:
            setting_record = Setting(time=update_time,
                                     mode=data["parameters"]["mode"],
                                     temperature=data["parameters"]["temp"],
                                     humidity=data["parameters"]["humidity"])
            setting_record.save()
        last_data = data
Esempio n. 8
0
def notice_list():
    """
    通知公告列表
    :return:
    """
    page = request.values.get('page', 1, type=int)
    aname = request.values.get('aname', "", type=str)
    b64aname = b64decode(unquote(aname))
    cuser = request.values.get('cuser', "", type=str)
    b64cuser = b64decode(unquote(cuser))
    cdata = request.values.get('cdata', "", type=str)
    notices = Dev_Note.query.filter(
        (Dev_Note.articlename.like("%" + b64aname + "%"), "")[aname is None],
        (Dev_Note.createuser.like("%" + b64cuser + "%"), "")[cuser is None],
        (Dev_Note.createdate.like("%" + cdata + "%"), "")[cdata is None])
    paginateion = notices.paginate(page, per_page=Setting().pagination)
    posts = paginateion.items
    count = notices.count()
    eventlog("[查看通知公告列表页] " + "第" + str(page) + "页")
    result = {
        'posts': posts,
        'count': count,
        'pagination': paginateion,
        'page': page
    }
    return result
Esempio n. 9
0
def admin_query_serach():
    """
    后台搜索
    :return:
    """
    request.script_root = url_for('indexview.index', _external=True)
    page = request.args.get('page', 1, type=int)
    word = request.args.get('keyword', "", type=str)
    serach = unquote(b64decode(word)).decode('utf-8')
    serp = qserach(serach)
    paginateion = serp.paginate(
        page, per_page=Setting().pagination
    )
    count = serp.count()
    posts = paginateion.items
    eventlog(
        "[搜索]" + serach.encode('utf-8') + " 第" + str(page) + "页"
    )
    result = {
        'posts': posts,
        'count': count,
        'pagiation': paginateion,
        'keyword': serach
    }
    return result
Esempio n. 10
0
def admin_query_list():
    """
    后台ajax查询
    :return:
    """
    page = request.args.get('page', 1, type=int)
    request.script_root = url_for('indexview.index', _external=True)
    campusname = b64decode(unquote(request.args.get('campusname', "", type=str)))
    buildname = b64decode(unquote(request.args.get('buildname', "", type=str)))
    devinfo = Dev_DeviceStatus.query.filter(
        Dev_DeviceStatus.DeviceCondition != "N",
        (Dev_DeviceStatus.Campus.like("%" + campusname + "%"), "")[campusname is None],
        (Dev_DeviceStatus.Location.like("%" + buildname + "%"), "")[buildname is None]
    ).order_by(Dev_DeviceStatus.Campus.desc())
    paginateion = devinfo.paginate(
        page, per_page=Setting().pagination
    )
    count = devinfo.count()
    posts = paginateion.items
    campus = Dev_Campus.query.all()
    eventlog(
        "[查询校区/楼宇]" + campusname + buildname + " 第" + str(page) + "页"
    )
    result = {
        'posts': posts,
        'count': count,
        'pagination': paginateion,
        'campus': campus,
        'campusname': campusname.decode('utf-8'),
        'buildname': buildname.decode('utf-8')
    }
    return result
Esempio n. 11
0
 def __setattr__(self, name, value):
     if name in ('_vals', '_name', '_appname', '_verbose_name', '_readonly',
                 '_cache_prefix', '_main'):
         return object.__setattr__(self, name, value)
     if self._readonly:
         raise AttributeError, 'settings group %s is read-only' % self._name
     if not name in self._vals:
         raise AttributeError, 'setting "%s" not found' % name
     if not has_db:
         raise SettingsException, "no database -- settings are immutable"
     self._vals[name].initial = self._vals[name].clean(value)
     try:
         setting = Setting.objects.get(app=self._appname,
                                       site=Site.objects.get_current(),
                                       class_name=self._name,
                                       key=name)
     except Setting.DoesNotExist:
         setting = Setting(site=Site.objects.get_current(),
                           app=self._appname,
                           class_name=self._name,
                           key=name)
     serialized = value
     if hasattr(self._vals[name].widget, '_format_value'):
         serialized = self._vals[name].widget._format_value(value)
     serialized = force_unicode(serialized)
     setting.value = serialized
     setting.save()
     if appsettings.USE_CACHE:
         cache.set(self._cache_prefix + name, value)
     if self._main:
         setattr(django_settings, name, value)
Esempio n. 12
0
def settings():
    errors = None
    admin_settings = get_settings(g.db,
                                  admin_id=current_user.admin_id) or Setting()
    form = SettingForm(request.form)
    if request.method == 'POST':
        if form.validate():
            already_completed = finished_setting(admin_settings)
            form.populate_obj(admin_settings)
            admin_settings.admin_id = current_user.admin_id

            g.db.session.add(admin_settings)
            g.db.session.commit()

            url = 'hunts' if already_completed else 'new_hunt'
            flash('Settings have been updated successfully', 'success')
            return make_response(redirect(url_for(url)))
        else:
            logger.info(
                '%s attempted to submit settings information'
                ' resulting in errors: %s', current_user.email, form.errors)
    return make_response(
        render_template('settings.html',
                        login=admin_settings.login,
                        form=form,
                        password=admin_settings.password,
                        wax_site=admin_settings.wax_site))
Esempio n. 13
0
def admin_userindex():
    """
    用户管理
    :return:
    """
    page = request.args.get('page', 1 ,type=int)
    ulevel = request.args.get('level', "", type=str)
    if ulevel == "all":
        upkey = ""
    elif ulevel == "su":
        upkey = 80
    elif ulevel == "admin":
        upkey = 70
    elif ulevel == "ordman":
        upkey = 10
    else:
        upkey = ""
    request.script_root = url_for('indexview.index', _external=True)
    if upkey == "":
        pagination = User.query.order_by(User.id.asc()).paginate(
            page, per_page=Setting().pagination
        )
        count = User.query.count()
    else:
        pagination = User.query.filter(
            User.permissions == upkey
        ).order_by(User.id.asc()).paginate(
            page, per_page=Setting().pagination
        )
        count = User.query.filter(
            User.permissions == upkey
        ).count()
    posts = pagination.items
    suadmin_count = User.query.filter(User.permissions == 80).count()
    admin_count = User.query.filter(User.permissions == 70).count()
    ord_count = User.query.filter(User.permissions == 10).count()
    result = {
        'posts': posts,
        'count': count,
        'pagination': pagination,
        'all_count': count,
        'suadmin_count': suadmin_count,
        'admin_count': admin_count,
        'user_count': ord_count
    }
    eventlog("[访问用户信息页面]")
    return result
Esempio n. 14
0
 def set_value(self, key, value):
     setting = Setting.query.filter(Setting.key == key).first()
     if setting is None:
         setting = Setting(key, '')
         db.session.add(setting)
     # self.logger.debug('setting {0} to {1}'.format(key, value))
     setting.value = value
     db.session.commit()
Esempio n. 15
0
def dvr_manage_post():
    """
    dvr管理ajax页面
    :return:
    """
    count = request.values.get('count', None, type=int)
    pagenum = request.values.get('pagenum', None, type=int)
    page_num = ((count / Setting().pagination + pagenum),
                0)[count / Setting().pagination == 0]
    dvrinfo = Dev_DeviceInfo.query.order_by(Dev_DeviceInfo.ID.asc()).paginate(
        (page_num), per_page=Setting().pagination)
    dvrinfotemp = []
    hasnext = {'next': dvrinfo.has_next}
    for devx in dvrinfo.items:
        jsonlist = devx.to_json()
        jsonlist.update(hasnext)
        dvrinfotemp.append(jsonlist)
    return jsonify(dvrinfotemp)
Esempio n. 16
0
 def dispatch_request(self):
     settings = Setting.query.filter(Setting.name != 'otpsecret').all()
     form = EditForm(request.form)
     if request.method == 'POST' and form.validate():
         setting = Setting(form.name.data, form.value_decrypted.data)
         session.add(setting)
         session.commit()
         return redirect(url_for('settings.list'))
     return render_template('settings/list.html', settings=settings,
                            form=form)
Esempio n. 17
0
def setOrUpdateSettingValue(name, type, value):
    setting = Setting.query.filter(Setting.name == name).first()
    if setting == None:
        newSetting = Setting(name, value, type)
        db.session.add(newSetting)
    else:
        setting.value = str(value)
        setting.type = int(type)
    db.session.commit()
    updateSettingFromDatabase()
Esempio n. 18
0
def sysmanage():
    """
    系统设置页面
    :return: 返回数据查询结果并构建相应页面
    """
    eventlog("[访问系统设置]")
    default_value = ""
    if request.method == 'POST':
        pagesize = request.form.get('syspagen', 1)
        pagesize_index = request.form.get('syspageindex', 1)
        if pagesize.isdigit():
            optionsupdate('pagination', int(pagesize))
            optionsupdate('pagination_index', int(pagesize_index))
            flash(u"修改完成", 'success')
            eventlog("[修改系统设置]")
        else:
            session.pop('_flashes', None)
            flash(u"分页条数输入有误,请检查输入", 'danger')
    syspagn = Setting().pagination
    syspage_index = Setting().page_index
    return render_template('/admin/sysmanage.html', syspagn=syspagn, syspageindex=syspage_index)
Esempio n. 19
0
def dvr_search_post():
    """
    dvr搜索ajax处理
    :return:
    """
    pagenum = request.values.get('pagenum', None, type=int)
    count = request.values.get('count', None, type=int)
    word = request.values.get('keyword', None, type=str)
    search = b64decode(unquote(word)).decode('utf-8')
    serp = dvrsearchsql(search)
    page_num = ((count / Setting().pagination + pagenum),
                0)[count / Setting().pagination == 0]
    paginateion = serp.paginate(page_num, per_page=Setting().pagination)
    serachresult = []
    hasnext = {'next': paginateion.has_next}
    for serachone in paginateion.items:
        jsonlist = serachone.to_json()
        jsonlist.update(hasnext)
        serachresult.append(jsonlist)
    eventlog("[ajax加载搜索页面下一页]" + search.encode('utf-8') + " 第" +
             str(page_num) + "页")
    return jsonify(serachresult)
Esempio n. 20
0
def index():
    """首页函数"""
    eventlog(
        "[访问首页]"
    )
    page = request.args.get('page', 1, type=int)
    request.script_root = url_for('indexview.index', _external=True)
    count = Dev_DeviceStatus.query.count()
    pagination = Dev_DeviceStatus.query.filter(Dev_DeviceStatus.DeviceCondition != "N").order_by(Dev_DeviceStatus.Campus.desc()).paginate(
        page, per_page=Setting().page_index
    )
    posts = pagination.items
    campus = Dev_Campus.query.all()
    return render_template('index.html', posts=posts, count=count, pagination=pagination, campus=campus)
Esempio n. 21
0
def dvr_list_post():
    """
    dvr分类查询ajax加载
    :return:
    """
    devtype = b64decode(unquote(request.values.get('devtype', "", type=str)))
    devonline = unquote(request.values.get('devonline', "", type=str))
    if devonline == "5piv":
        devonline = "Y"
    elif devonline == "5ZCm":
        devonline = "N"
    count = request.values.get('count', None, type=int)
    pagenum = request.values.get('pagenum', None, type=int)
    page_num = ((count / Setting().pagination + pagenum),
                0)[count / Setting().pagination == 0]
    devinfo = dvrselectsql(devtype, devonline)
    dvrinfo = devinfo.paginate(page_num, per_page=Setting().pagination)
    dvrinfotemp = []
    hasnext = {'next': dvrinfo.has_next}
    for devx in dvrinfo.items:
        jsonlist = devx.to_json()
        jsonlist.update(hasnext)
        dvrinfotemp.append(jsonlist)
    return jsonify(dvrinfotemp)
Esempio n. 22
0
    def post(self):
        setting = Setting.query().get()

        if not setting:
            setting = Setting()

        setting.year = int(self.request.get('year'))
        setting.quarter = int(self.request.get('quarter'))
        setting.num_labs = int(self.request.get('num_labs'))
        setting.repeat_partners = eval(self.request.get('repeat_partners'))
        setting.cross_section_partners = eval(
            self.request.get('cross_section_partners'))

        setting.put()
        return self.redirect('/admin?message=Quarter and Year Updated')
Esempio n. 23
0
 def __new__(cls):
     cls.mutex.acquire()
     if cls.dbiInstance is None:
         cls.user = User.User()
         cls.combatmatch = CombatMatch.CombatMatch()
         cls.combatnews = CombatNews.CombatNews()
         cls.usermap = UserMap.UserMap()
         cls.hero = Hero.Hero()
         cls.item = Item.Item()
         cls.heroconfig = HeroConfig.HeroConfig()
         cls.setting = Setting.Setting()
         cls.skillconfig = SkillConfig.SkillConfig()
         cls.filetable = fileTable.fileTable()
         cls.dbiInstance = super(DBI, cls).__new__(cls)
     cls.mutex.release()
     return cls.dbiInstance
Esempio n. 24
0
    def test_settings(self):
        assert self.is_only_for_admins('/settings/')
        s = Setting(name='copyright', value='Authors 2000')
        db.session.add(s)

        from flask import render_template_string
        test_use = render_template_string('{{ system_setting("copyright") }}')
        assert test_use == s.value

        self.login_as_admin()

        response = self.client.get('/settings/')
        html = response.data.decode('utf-8')
        assert s.name in html and s.value in html

        self.logout()
Esempio n. 25
0
def dvr_manage_get():
    """
    dvr管理页面路由逻辑
    :return:
    """
    page = request.args.get('page', 1, type=int)
    request.script_root = url_for('indexview.index', _external=True)
    count = Dev_DeviceInfo.query.count()
    pagination = Dev_DeviceInfo.query.order_by(
        Dev_DeviceInfo.ID.asc()).paginate(page, per_page=Setting().pagination)
    datas = pagination.items
    devtype = DevDevType.query.all()
    result = {
        'datas': datas,
        'count': count,
        'pagination': pagination,
        'devtype': devtype
    }
    eventlog("[访问设管理页面]")
    return result
Esempio n. 26
0
def admin_query():
    """
    数据查询
    :return:
    """
    page = request.args.get('page', 1, type=int)
    request.script_root = url_for('indexview.index', _external=True)
    # request.script_root = url_for('adminbg.query', _external=True)
    count = Dev_DeviceStatus.query.count()
    pagination = Dev_DeviceStatus.query.filter(Dev_DeviceStatus.DeviceCondition != "N").order_by(Dev_DeviceStatus.Campus.desc()).paginate(
        page, per_page=Setting().pagination
    )
    posts = pagination.items
    campus = Dev_Campus.query.all()
    result = {
        'posts': posts,
        'count': count,
        'pagination': pagination,
        'campus': campus
    }
    return result
Esempio n. 27
0
 def execute(self):
     settings = []
     vsc_settings = self.__readsync()
     with self._application.instance.app_context():
         for setting in Setting.query:
             if setting.name not in vsc_settings:
                 self._application.db.session.delete(setting)
             else:
                 vsc_setting = vsc_settings[setting.name]
                 setting.value = vsc_setting['value']
         for _, vsc_setting in vsc_settings.items():
             if Setting.query \
                 .filter(Setting.name == vsc_setting['name'])\
                     .first() is None:
                 setting = Setting(
                     name=vsc_setting['name'],
                     value=vsc_setting['value'],
                 )
                 settings.append(setting)
         self._application.db.session.add_all(settings)
         self._application.db.session.commit()
Esempio n. 28
0
def dvr_search_get():
    """
    dvr搜索路由逻辑
    :return:
    """
    request.script_root = url_for('indexview.index', _external=True)
    page = request.args.get('page', 1, type=int)
    word = request.args.get('keyword', "", type=str)
    serach = unquote(b64decode(word)).decode('utf-8')
    serp = dvrsearchsql(serach)
    pagination = serp.paginate(page, per_page=Setting().pagination)
    count = serp.count()
    datas = pagination.items
    eventlog("[管理后台设备信息 搜索]" + serach.encode('utf-8') + " 第" + str(page) + "页")
    result = {
        'datas': datas,
        'count': count,
        'pagination': pagination,
        'keyword': serach
    }
    return result
Esempio n. 29
0
def indexlist():
    """根据校区/楼宇进行查询"""
    page = request.args.get('page', 1, type=int)
    campusname = b64decode(unquote(request.args.get('campusname', "", type=str)))
    buildname = b64decode(unquote(request.args.get('buildname', "", type=str)))
    devinfo = Dev_DeviceStatus.query.filter(
        Dev_DeviceStatus.DeviceCondition != "N",
        (Dev_DeviceStatus.Campus.like("%" + campusname + "%"), "")[campusname is None],
        (Dev_DeviceStatus.Location.like("%" + buildname + "%"), "")[buildname is None]
    ).order_by(Dev_DeviceStatus.Campus.desc())
    paginateion = devinfo.paginate(
        page, per_page=Setting().page_index
    )
    count = devinfo.count()
    posts = paginateion.items
    campus = Dev_Campus.query.all()
    eventlog(
        "[查询校区/楼宇]" + campusname + buildname + " 第" + str(page) + "页"
    )
    return render_template(
        "list.html", posts=posts, count=count, pagination=paginateion, campus=campus,
        ctitle=campusname.decode('utf-8'), btitle=buildname.decode('utf-8')
    )
Esempio n. 30
0
def main(queue, interval_in_seconds=300):
	'''Queue is used to communicate with the climaduino_controller. Interval is
	   how often to check the database for program settings.'''
   # BUG: Does not work when interval wraps around between days. If interval is 5 minutes
   # then times between 23:55 and 00:00 (midnight) do not work properly

   # set process niceness value to lower its priority
	os.nice(1)
	print("Climaduino Programming Sentry Active")
	while 1:
	   	now = datetime.datetime.now()
	   	current_settings = Setting.objects.last()
	   	# find out the day 0 is Monday
	   	current_day = now.weekday()

	   	# find out the time
	   	current_time = now.time()

	   	# calculate the time minus interval_in_seconds
	   	earliest_time = now - datetime.timedelta(seconds=interval_in_seconds)
	   	earliest_time = earliest_time.time()

	   	# query DB with interval_in_seconds "fudge factor"
	   	program_query = Program.objects.filter(mode=current_settings.mode, day=current_day, time__range=(earliest_time, current_time))

	   	# if program exists, find out what should be changed and then change it
	   	for program in program_query:
	   		setting_record = Setting(time=now, source=3, mode=program.mode, temperature=program.temperature, humidity=program.humidity)
	   		setting_record.save()
	   		if program.temperature != current_settings.temperature:
	   			queue.put("%sF" % program.temperature)
	   		if program.humidity != current_settings.humidity:
	   			queue.put("%s%%" % program.humidity)

	   	# sleep for interval_in_seconds so we only check once during that interval
	   	time.sleep(interval_in_seconds)