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')
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') )
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)
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
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
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
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
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
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
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
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)
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))
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
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()
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)
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)
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()
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)
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)
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)
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)
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')
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
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()
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
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
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()
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
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') )
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)