Example #1
0
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)
Example #2
0
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)
Example #3
0
    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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
    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)
Example #7
0
  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
Example #8
0
    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()
Example #11
0
    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)
Example #12
0
    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)
Example #13
0
    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)
Example #14
0
    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)
Example #15
0
  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
Example #16
0
  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
Example #17
0
    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)
Example #18
0
    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)
Example #19
0
    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)
Example #20
0
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)
Example #21
0
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)
Example #22
0
    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)
Example #23
0
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)
Example #25
0
    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.'
Example #26
0
 def setUp(self):
     defaults.set_defaults(set_is_setup=True)
Example #27
0
    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)
Example #29
0
 def setUp(self):
     self.client.logout()
     defaults.set_defaults(set_is_setup=True, create_controller=True)
Example #30
0
def create_site():
    return defaults.set_defaults(set_is_setup=True, create_controller=True)
Example #31
0
 def setUp(self):
     self.backend = get_kegbot_backend()
     defaults.set_defaults(set_is_setup=True, create_controller=True)
Example #32
0
 def setUp(self):
     defaults.set_defaults(set_is_setup=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')
Example #34
0
def create_site():
    return defaults.set_defaults(set_is_setup=True)
Example #35
0
	def setUp(self):
		self.backend = backend.KegbotBackend()
		defaults.set_defaults(set_is_setup=True)
Example #36
0
def create_site():
    return defaults.set_defaults(set_is_setup=True)
Example #37
0
 def setUp(self):
     self.backend = backend.KegbotBackend()
     defaults.set_defaults(set_is_setup=True)
Example #38
0
    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.'
Example #39
0
 def setUp(self):
     self.backend = get_kegbot_backend()
     defaults.set_defaults(set_is_setup=True, create_controller=True)
Example #40
0
def create_site():
    return defaults.set_defaults(set_is_setup=True, create_controller=True)
Example #41
0
def create_site():
    site = defaults.set_defaults()
    site.is_setup = True
    site.save()
    return site