def site_settings(request): context = {} if request.method == "POST": site = models.KegbotSite.get() form = MiniSiteSettingsForm(request.POST, instance=site) if form.is_valid(): form.save() messages.success(request, "Settings saved!") return redirect("setup_admin") else: try: defaults.set_defaults() except defaults.AlreadyInstalledError: pass site = models.KegbotSite.get() site.enable_sensing = request.COOKIES.get( "kb_setup_enable_sensing") == "True" site.enable_users = request.COOKIES.get( "kb_setup_enable_users") == "True" site.save() form = MiniSiteSettingsForm(instance=site) context["form"] = form return render(request, "setup_wizard/site_settings.html", context=context)
def site_settings(request): context = RequestContext(request) using_ssl = request.is_secure() request_host = request.get_host() if request.method == 'POST': form = MiniSiteSettingsForm(request.POST, instance=request.kbsite) if form.is_valid(): form.save() messages.success(request, 'Settings saved!') return redirect('setup_admin') else: try: defaults.set_defaults() messages.success(request, 'Started new site!') except defaults.AlreadyInstalledError: messages.warning(request, 'Site already installed, proceeding.') form = MiniSiteSettingsForm(instance=models.KegbotSite.get(), initial={ 'hostname': request_host, 'use_ssl': using_ssl, }) context['form'] = form return render_to_response('setup_wizard/site_settings.html', context_instance=context)
def test_create_backup_tree_with_defaults(self): defaults.set_defaults(set_is_setup=True) site = models.KegbotSite.get() site.title = 'Kegbot Test 2' site.save() backup_dir = backup.create_backup_tree(self.now, storage=self.storage) try: self.assertMetadata(backup_dir, site_name='Kegbot Test 2') sites = self.load_table(backup_dir, 'core_kegbotsite') self.assertEqual(1, len(sites)) self.assertEqual('Kegbot Test 2', sites[0].object.title) users = self.load_table(backup_dir, 'core_user') self.assertEqual(1, len(users)) self.assertEqual('guest', users[0].object.username) taps = self.load_table(backup_dir, 'core_kegtap') self.assertEqual(1, len(taps)) self.assertEqual('Main Tap', taps[0].object.name) finally: shutil.rmtree(backup_dir)
def create_or_import(request): context = RequestContext(request) if request.method == 'GET': # Check for updates. try: context['checkin'] = checkin.checkin(timeout=3.0) except (checkin.CheckinError, Exception): context['checkin'] = {} form = CreateOrImportForm(initial={'mode': 'create'}) if request.method == 'POST': form = CreateOrImportForm(request.POST) if form.is_valid(): if form.cleaned_data['mode'] == 'create': try: defaults.set_defaults() messages.success(request, 'Started new site!') except defaults.AlreadyInstalledError: messages.warning(request, 'Site already installed, proceeding.') return redirect('setup_site_settings') else: messages.error(request, 'Sorry, imports are not yet supported.') context['form'] = form print ' '.join(str(type(d)) for d in context.dicts) return render_to_response('setup_wizard/create_or_import.html', context_instance=context)
def handle(self, *args, **options): if len(args) != 0: raise CommandError('No arguments required') try: defaults.set_defaults(options['force']) except RuntimeError: print 'Error: database already installed, defaults cannot be set' return
def setUp(self): self.backend = get_kegbot_backend() defaults.set_defaults(set_is_setup=True) self.user = core_models.User.objects.create( username='******', email='*****@*****.**') # Password reset requires a usable password. self.user.set_password('1234') self.user.save()
def setUp(self): self.backend = get_kegbot_backend() defaults.set_defaults(set_is_setup=True) self.user = core_models.User.objects.create(username='******', email='*****@*****.**') # Password reset requires a usable password. self.user.set_password('1234') self.user.save()
def setUp(self): self.backend = get_kegbot_backend() defaults.set_defaults(set_is_setup=True, create_controller=True) self.user = models.User.objects.create(username='******', email='test@example') self.prefs = models.NotificationSettings.objects.create(user=self.user, backend='pykeg.notification.backends.email.EmailNotificationBackend', keg_tapped=False, session_started=False, keg_volume_low=False, keg_ended=False)
def test_create_backup_tree_with_defaults(self): defaults.set_defaults(set_is_setup=True) site = models.KegbotSite.get() site.title = 'Kegbot Test 2' site.save() backup_dir = backup.create_backup_tree(self.now, storage=self.storage) try: self.assertMetadata(backup_dir, site_name='Kegbot Test 2') finally: shutil.rmtree(backup_dir)
def test_restore_needs_erase(self): defaults.set_defaults(set_is_setup=True) backup_dir = backup.create_backup_tree(self.now, storage=self.storage) try: # Restore must fail when something is already installed. self.assertRaises(backup.AlreadyInstalledError, backup.restore_from_directory, backup_dir) # Erase and restore. backup.erase(self.storage) backup.restore_from_directory(backup_dir, self.storage) finally: shutil.rmtree(backup_dir)
def setUp(self): del logging.root.handlers[:] if not defaults.db_is_installed(): defaults.set_defaults() models.Drink.objects.all().delete() self.site, _ = models.KegbotSite.objects.get_or_create(name='default') self.keg_size = models.KegSize.objects.create(name='10Liter Keg', volume_ml=units.Quantity(10000)) self.beer_style = bdb_models.BeerStyle.objects.create(name='test style') self.brewer = bdb_models.Brewer.objects.create(name='test brewer') self.beer_type = bdb_models.BeerType.objects.create(name='test beer type', brewer=self.brewer, style=self.beer_style, calories_oz=10.0, carbs_oz=2.0, abv=5.0) self.test_keg = models.Keg.objects.create(site=self.site, type=self.beer_type, size=self.keg_size, status='online', description='None') self.test_tap = models.KegTap.objects.create(site=self.site, name='Test Tap', meter_name='test_meter_name', ml_per_tick=(1000.0/2200.0), current_keg=self.test_keg) self.kegbot = kegbot_app.KegbotCoreApp(local_backend=True) self.env = self.kegbot._env self.backend = self.env.GetBackend() self.test_user = self.backend.CreateNewUser('tester') self.test_token = self.backend.CreateAuthToken('core.onewire', '0000111122223333', 'tester') self.test_user_2 = self.backend.CreateNewUser('tester_2') self.test_token_2 = self.backend.CreateAuthToken('core.onewire', 'baadcafebeeff00d', 'tester_2') common_defs.AUTH_DEVICE_MAX_IDLE_SECS['core.onewire'] = 2 # Kill the kegbot flow processing thread so we can single step it. self.service_thread = self.env._service_thread self.env._threads.remove(self.service_thread) self.kegbot._Setup() self.kegbot._StartThreads() self.client = kegnet.KegnetClient() while True: if self.client.Reconnect(): break
def setUp(self): del logging.root.handlers[:] if not defaults.db_is_installed(): defaults.set_defaults() models.Drink.objects.all().delete() self.site, _ = models.KegbotSite.objects.get_or_create(name='default') self.keg_size = models.KegSize.objects.create(name='10Liter Keg', volume_ml=units.Quantity(10000)) self.beer_style = bdb_models.BeerStyle.objects.create(name='test style') self.brewer = bdb_models.Brewer.objects.create(name='test brewer') self.beer_type = bdb_models.BeerType.objects.create(name='test beer type', brewer=self.brewer, style=self.beer_style, calories_oz=10.0, carbs_oz=2.0, abv=5.0) self.test_keg = models.Keg.objects.create(site=self.site, type=self.beer_type, size=self.keg_size, status='online', description='None') self.test_tap = models.KegTap.objects.create(site=self.site, name='Test Tap', meter_name='test_meter_name', ml_per_tick=(1000.0/2200.0), current_keg=self.test_keg) self.kegbot = kegbot.KegbotCoreApp(local_backend=True) self.env = self.kegbot._env self.backend = self.env.GetBackend() self.test_user = self.backend.CreateNewUser('tester') self.test_token = self.backend.CreateAuthToken('core.onewire', '0000111122223333', 'tester') self.test_user_2 = self.backend.CreateNewUser('tester_2') self.test_token_2 = self.backend.CreateAuthToken('core.onewire', 'baadcafebeeff00d', 'tester_2') kb_common.AUTH_DEVICE_MAX_IDLE_SECS['core.onewire'] = 2 # Kill the kegbot flow processing thread so we can single step it. self.service_thread = self.env._service_thread self.env._threads.remove(self.service_thread) self.kegbot._Setup() self.kegbot._StartThreads() self.client = kegnet.KegnetClient() while True: if self.client.Reconnect(): break
def test_backup_contents_same(self): defaults.set_defaults(set_is_setup=True) backup_dir = backup.create_backup_tree(self.now, storage=self.storage) try: # Verify recursive_diff works with no diffs. self.recursive_diff(backup_dir, backup_dir) second_backup_dir = backup.create_backup_tree(self.now, storage=self.storage) try: self.recursive_diff(backup_dir, second_backup_dir) finally: shutil.rmtree(second_backup_dir) finally: shutil.rmtree(backup_dir)
def create_or_import(request): context = RequestContext(request) form = CreateOrImportForm(initial={'mode': 'create'}) if request.method == 'POST': form = CreateOrImportForm(request.POST) if form.is_valid(): if form.cleaned_data['mode'] == 'create': try: defaults.set_defaults() messages.success(request, 'Started new site!') except defaults.AlreadyInstalledError: messages.warning(request, 'Site already installed, proceeding.') return redirect('setup_site_settings') else: messages.error(request, 'Sorry, imports are not yet supported.') context['form'] = form print ' '.join(str(type(d)) for d in context.dicts) return render_to_response('setup_wizard/create_or_import.html', context_instance=context)
def site_settings(request): context = {} if request.method == 'POST': form = MiniSiteSettingsForm(request.POST, instance=request.kbsite) if form.is_valid(): form.save() messages.success(request, 'Settings saved!') return redirect('setup_admin') else: try: defaults.set_defaults() except defaults.AlreadyInstalledError: pass site = models.KegbotSite.get() site.enable_sensing = request.session['enable_sensing'] site.enable_users = request.session['enable_users'] site.save() form = MiniSiteSettingsForm(instance=site) context['form'] = form return render(request, 'setup_wizard/site_settings.html', context=context)
def test_setup_not_shown(self): """Verify wizard is not shown on set-up site.""" site = defaults.set_defaults() site.is_setup = True site.save() for path in ("/", "/stats/"): response = self.client.get(path) self.assertNotContains(response, "<h2>Kegbot Offline</h2>", status_code=200) self.assertNotContains(response, "<h2>Setup Required</h2>", status_code=200) self.assertNotContains(response, "Start Setup", status_code=200) response = self.client.get("/setup/") self.failUnlessEqual(response.status_code, 404)
def site_settings(request): context = RequestContext(request) if request.method == 'POST': form = MiniSiteSettingsForm(request.POST, instance=request.kbsite) if form.is_valid(): form.save() messages.success(request, 'Settings saved!') return redirect('setup_admin') else: try: defaults.set_defaults() except defaults.AlreadyInstalledError: pass site = models.KegbotSite.get() site.enable_sensing = request.session['enable_sensing'] site.enable_users = request.session['enable_users'] site.save() form = MiniSiteSettingsForm(instance=site) context['form'] = form return render_to_response('setup_wizard/site_settings.html', context_instance=context)
def test_setup_not_shown(self): """Verify wizard is not shown on set-up site.""" site = defaults.set_defaults() site.is_setup = True site.save() for path in ('/', '/stats/'): response = self.client.get(path) self.assertNotContains(response, '<h2>Kegbot Offline</h2>', status_code=200) self.assertNotContains(response, '<h2>Setup Required</h2>', status_code=200) self.assertNotContains(response, 'Start Setup', status_code=200) response = self.client.get('/setup/') self.failUnlessEqual(response.status_code, 404)
def handle(self, *args, **options): if len(args) < 1: raise CommandError('Must specify demo data directory') data_dir = os.path.abspath(args[0]) demo_data = self.load_demo_data(data_dir) with transaction.atomic(): if models.User.objects.all().count() or models.Drink.objects.all( ).count(): raise CommandError('Database is already loaded.') defaults.set_defaults(set_is_setup=True) # Install demo data. for username in demo_data['drinkers']: user = models.User.objects.create_superuser(username=username, email=None, password=username) picture_path = os.path.join(data_dir, 'pictures', 'drinkers', username, 'mugshot.png') if os.path.exists(picture_path): p = self.create_picture(picture_path, user=user) user.mugshot = p user.save() for beverage in demo_data['beverages']: brewer, _ = models.BeverageProducer.objects.get_or_create( name=beverage['brewer_name']) beer, _ = models.Beverage.objects.get_or_create( name=beverage['name'], beverage_type='beer', producer=brewer, style=beverage['style']) picture_path = beverage.get('image') if picture_path: picture = self.create_picture( os.path.join(data_dir, picture_path)) beer.picture = picture beer.save() else: raise ValueError('No pic for brewer!') sessions = self.build_random_sessions(models.User.objects.all(), NUM_SESSIONS, demo_data['shouts']) minutes = sessions[-1][0] minutes += MINUTES_IN_DAY minutes -= (minutes % (MINUTES_IN_DAY)) session_start = timezone.now() session_start -= datetime.timedelta(hours=session_start.hour + 4, minutes=session_start.minute, seconds=session_start.second) session_start -= datetime.timedelta(minutes=minutes) for minute, drinker, volume_ml, shout in sessions: date = session_start + datetime.timedelta(minutes=minute) picture_path = None if random.random() >= 0.25: d = demo_data['pictures'].get(drinker.username) if d: picture_path = d[0] d.rotate() self.do_pour(drinker, date, volume_ml, shout, picture_path) print 'Demo data loaded.'
def setUp(self): defaults.set_defaults(set_is_setup=True)
def setUp(self): self.backend = get_kegbot_backend() defaults.set_defaults(set_is_setup=True) self.user = core_models.User.objects.create( username='******', email='test@example')
def setUp(self): self.client.logout() defaults.set_defaults(set_is_setup=True, create_controller=True)
def create_site(): return defaults.set_defaults(set_is_setup=True, create_controller=True)
def setUp(self): self.backend = get_kegbot_backend() defaults.set_defaults(set_is_setup=True, create_controller=True)
def setUp(self): self.backend = backend.KegbotBackend() defaults.set_defaults(set_is_setup=True) self.user = core_models.User.objects.create(username='******', email='test@example')
def create_site(): return defaults.set_defaults(set_is_setup=True)
def setUp(self): self.backend = backend.KegbotBackend() defaults.set_defaults(set_is_setup=True)
def handle(self, *args, **options): if len(args) < 1: raise CommandError('Must specify demo data directory') data_dir = os.path.abspath(args[0]) demo_data = self.load_demo_data(data_dir) with transaction.atomic(): if models.User.objects.all().count() or models.Drink.objects.all().count(): raise CommandError('Database is already loaded.') defaults.set_defaults(set_is_setup=True) # Install demo data. for username in demo_data['drinkers']: user = models.User.objects.create_superuser(username=username, email=None, password=username) picture_path = os.path.join(data_dir, 'pictures', 'drinkers', username, 'mugshot.png') if os.path.exists(picture_path): p = self.create_picture(picture_path, user=user) user.mugshot = p user.save() for beverage in demo_data['beverages']: brewer, _ = models.BeverageProducer.objects.get_or_create(name=beverage['brewer_name']) beer, _ = models.Beverage.objects.get_or_create(name=beverage['name'], beverage_type='beer', producer=brewer, style=beverage['style']) picture_path = beverage.get('image') if picture_path: picture = self.create_picture(os.path.join(data_dir, picture_path)) beer.picture = picture beer.save() else: raise ValueError('No pic for brewer!') sessions = self.build_random_sessions(models.User.objects.all(), NUM_SESSIONS, demo_data['shouts']) minutes = sessions[-1][0] minutes += MINUTES_IN_DAY minutes -= (minutes % (MINUTES_IN_DAY)) session_start = timezone.now() session_start -= datetime.timedelta(hours=session_start.hour + 4, minutes=session_start.minute, seconds=session_start.second) session_start -= datetime.timedelta(minutes=minutes) for minute, drinker, volume_ml, shout in sessions: date = session_start + datetime.timedelta(minutes=minute) picture_path = None if random.random() >= 0.25: d = demo_data['pictures'].get(drinker.username) if d: picture_path = d[0] d.rotate() self.do_pour(drinker, date, volume_ml, shout, picture_path) print 'Demo data loaded.'
def create_site(): site = defaults.set_defaults() site.is_setup = True site.save() return site