Example #1
0
def index(request):
    context = RequestContext(request)
    try:
        page = kegweb_models.Page.objects.get(name__exact='MainPage',
                                              status__exact='published')
    except kegweb_models.Page.DoesNotExist:
        page = None
    context['page_node'] = page
    context['taps'] = request.kbsite.taps.all()

    try:
        session = request.kbsite.sessions.latest()
        if session.IsActiveNow():
            context['current_session'] = session
    except models.DrinkingSession.DoesNotExist:
        pass

    recent_images = models.Picture.objects.filter(
        site=request.kbsite, drink__isnull=False).order_by('-time')[:9]
    context['recent_images'] = recent_images

    events = request.kbsite.events.all()[:10]
    context['initial_events'] = kbjson.dumps(
        [protolib.ToDict(e, full=True) for e in events], indent=None)

    sessions = request.kbsite.sessions.all().order_by('-seqn')[:10]
    context['initial_sessions'] = kbjson.dumps(
        [protolib.ToDict(s, full=True) for s in sessions], indent=None)

    return render_to_response('index.html', context)
Example #2
0
def index(request):
    context = RequestContext(request)

    context['taps'] = models.KegTap.objects.all()

    events = models.SystemEvent.objects.all()[:10]
    context['initial_events'] = kbjson.dumps(
        [protolib.ToDict(e, full=True) for e in events], indent=None)

    sessions = models.DrinkingSession.objects.all().order_by('-id')[:10]
    context['sessions'] = sessions
    context['initial_sessions'] = kbjson.dumps(
        [protolib.ToDict(s, full=True) for s in sessions], indent=None)

    if sessions:
        last_session = sessions[0]
        context['last_session'] = last_session
        if sessions and last_session.IsActiveNow():
            context['current_session'] = last_session
            if sessions.count() > 1:
                context['last_session'] = sessions[1]
            else:
                context['last_session'] = None

    taps = models.KegTap.objects.filter(current_keg__isnull=False)
    context['initial_taps'] = kbjson.dumps(
        [protolib.ToDict(t, full=True) for t in taps], indent=None)

    context['have_events'] = len(events) > 0
    context['have_taps'] = len(taps) > 0

    return render_to_response('index.html', context_instance=context)
Example #3
0
def index(request):
  context = RequestContext(request)

  context['taps'] = models.KegTap.objects.all()

  events = models.SystemEvent.objects.all()[:10]
  context['initial_events'] = kbjson.dumps([protolib.ToDict(e, full=True) for e in events],
      indent=None)

  sessions = models.DrinkingSession.objects.all().order_by('-id')[:10]
  context['sessions'] = sessions
  context['initial_sessions'] = kbjson.dumps([protolib.ToDict(s, full=True) for s in sessions],
      indent=None)

  if sessions:
    last_session = sessions[0]
    context['last_session'] = last_session
    if sessions and last_session.IsActiveNow():
      context['current_session'] = last_session
      if sessions.count() > 1:
        context['last_session'] = sessions[1]
      else:
        context['last_session'] = None

  taps = models.KegTap.objects.filter(current_keg__isnull=False)
  context['initial_taps'] = kbjson.dumps([protolib.ToDict(t, full=True) for t in taps], indent=None)

  context['have_events'] = len(events) > 0
  context['have_taps'] = len(taps) > 0

  return render_to_response('index.html', context_instance=context)
Example #4
0
def index(request):
  context = RequestContext(request)
  try:
    page = kegweb_models.Page.objects.get(name__exact='MainPage',
                                          status__exact='published')
  except kegweb_models.Page.DoesNotExist:
    page = None
  context['page_node'] = page
  context['taps'] = request.kbsite.taps.all()

  try:
    session = request.kbsite.sessions.latest()
    if session.IsActiveNow():
      context['current_session'] = session
  except models.DrinkingSession.DoesNotExist:
    pass

  recent_images = models.Picture.objects.filter(
      site=request.kbsite,
      drink__isnull=False).order_by('-time')[:9]
  context['recent_images'] = recent_images

  events = request.kbsite.events.all()[:10]
  context['initial_events'] = kbjson.dumps([protolib.ToDict(e, full=True) for e in events],
      indent=None)

  sessions = request.kbsite.sessions.all().order_by('-seqn')[:10]
  context['initial_sessions'] = kbjson.dumps([protolib.ToDict(s, full=True) for s in sessions],
      indent=None)

  return render_to_response('index.html', context)
Example #5
0
 def forwards(self, orm):
     for row in orm['plugin.PluginData'].objects.all():
         try:
             # Do nothing if already valid json.
             kbjson.loads(row.value)
         except ValueError:
             print ' ~ {} -> {}'.format(repr(row.value), repr(kbjson.dumps(row.value)))
             row.value = kbjson.dumps(row.value)
             row.save()
Example #6
0
def workers(request):
    context = RequestContext(request)

    try:
        inspector = celery_app.control.inspect()
        pings = inspector.ping() or {}
        stats = inspector.stats() or {}
        queues = inspector.active_queues() or {}
    except redis.RedisError as e:
        context['error'] = e

    status = {}
    if not pings and 'error' not in context:
        context['error'] = 'No response from workers. Not running?'
    else:
        for k, v in pings.iteritems():
            status[k] = {
                'status': 'ok' if v.get('ok') else 'unknown',
            }
        for k, v in stats.iteritems():
            if k in status:
                status[k]['stats'] = v
        for k, v in queues.iteritems():
            if k in status:
                status[k]['active_queues'] = v

    context['status'] = status
    context['raw_stats'] = kbjson.dumps(context['status'], indent=2)

    return render_to_response('kegadmin/workers.html',
                              context_instance=context)
Example #7
0
def slack_post(url, event_dict):
    """Posts an event to slack.

    The request body is a JSON dictionary of:
      * type: webhook message type (currently always 'event')
      * event_dict: webhook data (the event payload)

    Event payloads are in the same format as the /api/events/ endpoint.
    """
    logger.info('Posting to slack: url=%s event=%s' % (url, event_dict))

    hook_dict = {
        'type': 'event',
        'data': event_dict,
    }

    headers = {
        'content-type': 'application/json',
        'user-agent': 'Kegbot/%s' % get_version(),
    }

    try:
        return requests.post(url, data=kbjson.dumps(hook_dict), headers=headers)
    except requests.exceptions.RequestException, e:
        logger.warning('Error posting hook: %s' % e)
        return False
Example #8
0
def slack_post(url, event_dict, slack_conf, msg):
    """Posts an event to slack.

    The request body is a JSON dictionary of:
      * type: webhook message type (currently always 'event')
      * event_dict: webhook data (the event payload)

    Event payloads are in the same format as the /api/events/ endpoint.
    """
    logger.info('Posting to slack: url=%s event=%s' % (url, event_dict))

    hook_dict = {
            'type': 'event',
            'payload': {
                "channel": slack_conf.channel,
                "username": event_dict.user.username,
                "text": msg,
                "icon_url": "https://avatars3.githubusercontent.com/u/395880"
                }
            }

    headers = {
        'content-type': 'application/json',
        'user-agent': 'Kegbot/%s' % get_version(),
    }

    try:
        return requests.post(url, data=kbjson.dumps(hook_dict), headers=headers)
    except requests.exceptions.RequestException, e:
        logger.warning('Error posting hook: %s' % e)
        return False
Example #9
0
def admin_settings(request, plugin):
    context = RequestContext(request)
    settings_form = plugin.get_site_settings_form()

    if request.method == 'POST':
        if 'submit-settings' in request.POST:
            settings_form = forms.SiteSettingsForm(request.POST)
            if settings_form.is_valid():
                client_id = settings_form.cleaned_data['client_id']
                client_secret = settings_form.cleaned_data['client_secret']
                venue_id = settings_form.cleaned_data['venue_id']
                client = foursquare.Foursquare(client_id=client_id, client_secret=client_secret)
                venue = None
                try:
                    # Search for the venue. Simultaneous validates all three credentials.
                    if venue_id:
                        venue = client.venues(venue_id)
                except foursquare.FoursquareException, e:
                    messages.error(request, 'Error testing Foursquare connection: %s' % str(e))
                else:
                    plugin.save_site_settings_form(settings_form)
                    plugin.save_venue_detail(venue)
                    messages.success(request, 'Settings updated')

        if 'test-api' in request.POST:
            plugin = request.plugins['foursquare']
            client = plugin.get_foursquare_client()
            venue_id = plugin.get_venue_id() or '49d01698f964a520fd5a1fe3'  # Golden Gate Bridge
            try:
                venue_info = client.venues(venue_id)
                context['test_response'] = kbjson.dumps(venue_info, indent=2)
                messages.success(request, 'API test successful.')
            except foursquare.FoursquareException as e:
                messages.success(request, 'API test failed: {}'.format(e.message))
Example #10
0
 def get_db_prep_save(self, value, connection):
     """Convert our JSON object to a string before we save"""
     if not value:
         return super(JSONField, self).get_db_prep_save("", connection=connection)
     else:
         return super(JSONField, self).get_db_prep_save(kbjson.dumps(value),
             connection=connection)
Example #11
0
def admin_settings(request, plugin):
    context = RequestContext(request)
    settings_form = plugin.get_site_settings_form()

    if request.method == 'POST':
        if 'submit-settings' in request.POST:
            settings_form = forms.SiteSettingsForm(request.POST)
            if settings_form.is_valid():
                plugin.save_site_settings_form(settings_form)

                venue_id = settings_form.cleaned_data.get('venue_id')
                venue = None
                if venue_id:
                    client = plugin.get_foursquare_client()
                    try:
                        venue = client.venues(venue_id)
                    except foursquare.FoursquareException, e:
                        messages.error(request, 'Error fetching venue information: %s' % str(e))
                plugin.save_venue_detail(venue)
                messages.success(request, 'Settings updated.')

        if 'test-api' in request.POST:
            plugin = request.plugins['foursquare']
            client = plugin.get_foursquare_client()
            venue_id = plugin.get_venue_id() or '49d01698f964a520fd5a1fe3'  # Golden Gate Bridge
            try:
                venue_info = client.venues(venue_id)
                context['test_response'] = kbjson.dumps(venue_info, indent=2)
                messages.success(request, 'API test successful.')
            except foursquare.FoursquareException as e:
                messages.success(request, 'API test failed: {}'.format(e.message))
Example #12
0
def webhook_post(url, event_dict):
    """Posts an event to the supplied URL.

    The request body is a JSON dictionary of:
      * type: webhook message type (currently always 'event')
      * event_dict: webhook data (the event payload)

    Event payloads are in the same format as the /api/events/ endpoint.
    """
    logger.info('Posting webhook: url=%s event=%s' % (url, event_dict))

    hook_dict = {
        'type': 'event',
        'data': event_dict,
    }

    headers = {
        'content-type': 'application/json',
        'user-agent': 'Kegbot/%s' % get_version(),
    }

    try:
        return requests.post(url,
                             data=kbjson.dumps(hook_dict),
                             headers=headers)
    except requests.exceptions.RequestException, e:
        logger.warning('Error posting hook: %s' % e)
        return False
Example #13
0
def do_post(event, kb_vars):
    """Sends the activity to the jive instance"""
    user = event.user
    if not user:
        logger.info('No user for this event no jive activity post is possible')
        return

    kind = event.kind
    post = None
    if kind == 'session_joined':
        post = DEFAULT_SYSTEM_SESSION_JOINED_TEMPLATE % kb_vars
    elif kind == 'drink_poured':
        post = DEFAULT_SYSTEM_DRINK_POURED_TEMPLATE % kb_vars

    json = kbjson.dumps(build_model(user, post, kb_vars))


    url = build_url()
    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    password_mgr.add_password(None, url, JIVE_USERNAME, JIVE_PASSWORD)
    auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
    opener = urllib2.build_opener(auth_handler)
    urllib2.install_opener(opener)
    f = urllib2.urlopen(url, json)
    response = f.read()
    logger.info("jive response %s" % str(response))
Example #14
0
 def get_db_prep_save(self, value, connection):
   """Convert our JSON object to a string before we save"""
   if not value:
     return super(JSONField, self).get_db_prep_save("", connection=connection)
   else:
     return super(JSONField, self).get_db_prep_save(kbjson.dumps(value),
         connection=connection)
Example #15
0
def workers(request):
    context = RequestContext(request)

    try:
        inspector = celery_app.control.inspect()
        pings = inspector.ping() or {}
        stats = inspector.stats() or {}
        queues = inspector.active_queues() or {}
    except redis.RedisError as e:
        context['error'] = e

    status = {}
    if not pings and 'error' not in context:
        context['error'] = 'No response from workers. Not running?'
    else:
        for k, v in pings.iteritems():
            status[k] = {
                'status': 'ok' if v.get('ok') else 'unknown',
            }
        for k, v in stats.iteritems():
            if k in status:
                status[k]['stats'] = v
        for k, v in queues.iteritems():
            if k in status:
                status[k]['active_queues'] = v

    context['status'] = status
    context['raw_stats'] = kbjson.dumps(context['status'], indent=2)

    return render_to_response('kegadmin/workers.html', context_instance=context)
Example #16
0
def slack_post(url, event_dict, slack_conf, msg):
    """Posts an event to slack.

    The request body is a JSON dictionary of:
      * type: webhook message type (currently always 'event')
      * event_dict: webhook data (the event payload)

    Event payloads are in the same format as the /api/events/ endpoint.
    """
    logger.info('Posting to slack: url=%s event=%s' % (url, event_dict))

    hook_dict = {
        'type': 'event',
        'payload': {
            "channel": slack_conf.channel,
            "username": event_dict.user.username,
            "text": msg,
            "icon_url": "https://avatars3.githubusercontent.com/u/395880"
        }
    }

    headers = {
        'content-type': 'application/json',
        'user-agent': 'Kegbot/%s' % get_version(),
    }

    try:
        return requests.post(url,
                             data=kbjson.dumps(hook_dict),
                             headers=headers)
    except requests.exceptions.RequestException, e:
        logger.warning('Error posting hook: %s' % e)
        return False
Example #17
0
def admin_settings(request, plugin):
    context = RequestContext(request)
    settings_form = plugin.get_site_settings_form()

    if request.method == 'POST':
        if 'submit-settings' in request.POST:
            settings_form = forms.SiteSettingsForm(request.POST)
            if settings_form.is_valid():
                plugin.save_site_settings_form(settings_form)

                venue_id = settings_form.cleaned_data.get('venue_id')
                venue = None
                if venue_id:
                    client = plugin.get_foursquare_client()
                    try:
                        venue = client.venues(venue_id)
                    except foursquare.FoursquareException, e:
                        messages.error(
                            request,
                            'Error fetching venue information: %s' % str(e))
                plugin.save_venue_detail(venue)
                messages.success(request, 'Settings updated.')

        if 'test-api' in request.POST:
            plugin = request.plugins['foursquare']
            client = plugin.get_foursquare_client()
            venue_id = plugin.get_venue_id(
            ) or '49d01698f964a520fd5a1fe3'  # Golden Gate Bridge
            try:
                venue_info = client.venues(venue_id)
                context['test_response'] = kbjson.dumps(venue_info, indent=2)
                messages.success(request, 'API test successful.')
            except foursquare.FoursquareException as e:
                messages.success(request,
                                 'API test failed: {}'.format(e.message))
Example #18
0
def build_response(result_data, response_code=200, callback=None):
  """Builds an HTTP response for JSON data."""
  indent = 2
  json_str = kbjson.dumps(result_data, indent=indent)
  if callback and validate_jsonp.is_valid_jsonp_callback_value(callback):
    json_str = '%s(%s);' % (callback, json_str)
  return HttpResponse(json_str, mimetype='application/json', status=response_code)
Example #19
0
def post_webhook_event(hook_url, event_list):
    post_data = kbjson.dumps({"events": [protolib.ToDict(e) for e in event_list]})
    post_data = urlencode({"payload": post_data})
    opener = urllib2.build_opener()
    opener.addheaders = [("User-agent", "Kegbot/%s" % util.get_version("kegbot"))]
    try:
        opener.open(hook_url, data=post_data, timeout=5)
        return True
    except urllib2.URLError:
        return False
Example #20
0
 def _save_profile(self, datastore_key, oauth_token, oauth_token_secret,
         twitter_name, twitter_id):
     profile = {
         KEY_OAUTH_TOKEN: oauth_token,
         KEY_OAUTH_TOKEN_SECRET: oauth_token_secret,
         KEY_TWITTER_NAME: twitter_name,
         KEY_TWITTER_ID: twitter_id,
     }
     self.datastore.set(datastore_key, kbjson.dumps(profile))
     return profile
Example #21
0
 def _save_profile(self, datastore_key, oauth_token, oauth_token_secret,
                   twitter_name, twitter_id):
     profile = {
         KEY_OAUTH_TOKEN: oauth_token,
         KEY_OAUTH_TOKEN_SECRET: oauth_token_secret,
         KEY_TWITTER_NAME: twitter_name,
         KEY_TWITTER_ID: twitter_id,
     }
     self.datastore.set(datastore_key, kbjson.dumps(profile))
     return profile
Example #22
0
def index(request):
  context = RequestContext(request)
  try:
    page = kegweb_models.Page.objects.get(name__exact='MainPage',
                                          status__exact='published')
  except kegweb_models.Page.DoesNotExist:
    page = None
  context['page_node'] = page
  context['taps'] = request.kbsite.taps.all()

  events = request.kbsite.events.all()[:10]
  context['initial_events'] = kbjson.dumps([protolib.ToDict(e, full=True) for e in events],
      indent=None)

  sessions = request.kbsite.sessions.all().order_by('-seqn')[:10]
  context['sessions'] = sessions
  context['initial_sessions'] = kbjson.dumps([protolib.ToDict(s, full=True) for s in sessions],
      indent=None)

  return render_to_response('index.html', context)
Example #23
0
 def new_function(*args, **kwargs):
     try:
         return f(*args, **kwargs)
     except Exception, e:
         exc_info = sys.exc_info()
         request = args[0]
         if settings.DEBUG and "deb" in request.GET:
             raise exc_info[1], None, exc_info[2]
         result_data, http_code = ToJsonError(e, exc_info)
         result_data["meta"] = {"result": "error"}
         return HttpResponse(kbjson.dumps(result_data, indent=2), mimetype="application/json", status=http_code)
Example #24
0
def index(request):
  context = RequestContext(request)

  context['taps'] = request.kbsite.taps.all()

  events = request.kbsite.events.all()[:10]
  context['initial_events'] = kbjson.dumps([protolib.ToDict(e, full=True) for e in events],
      indent=None)

  sessions = request.kbsite.sessions.all().order_by('-id')[:10]
  context['sessions'] = sessions
  context['initial_sessions'] = kbjson.dumps([protolib.ToDict(s, full=True) for s in sessions],
      indent=None)

  taps = request.kbsite.taps.filter(current_keg__isnull=False)
  context['initial_taps'] = kbjson.dumps([protolib.ToDict(t, full=True) for t in taps], indent=None)

  context['have_events'] = len(events) > 0
  context['have_taps'] = len(taps) > 0

  return render_to_response('index.html', context_instance=context)
Example #25
0
def post_webhook_event(hook_url, event_list):
  post_data = kbjson.dumps({'events': [protolib.ToDict(e) for e in event_list]})
  post_data = urlencode({'payload': post_data})
  opener = urllib2.build_opener()
  opener.addheaders = [
    ('User-agent', 'Kegbot/%s' % util.get_version('kegbot')),
  ]
  try:
    opener.open(hook_url, data=post_data, timeout=5)
    return True
  except urllib2.URLError:
    return False
Example #26
0
def post_webhook_event(hook_url, event_list):
    post_data = kbjson.dumps(
        {'events': [protolib.ToDict(e) for e in event_list]})
    post_data = urlencode({'payload': post_data})
    opener = urllib2.build_opener()
    opener.addheaders = [
        ('User-agent', 'Kegbot/%s' % util.get_version('kegbot')),
    ]
    try:
        opener.open(hook_url, data=post_data, timeout=5)
        return True
    except urllib2.URLError:
        return False
Example #27
0
File: views.py Project: swc/kegbot
 def new_function(*args, **kwargs):
     try:
         return f(*args, **kwargs)
     except Exception, e:
         exc_info = sys.exc_info()
         request = args[0]
         if settings.DEBUG and 'deb' in request.GET:
             raise exc_info[1], None, exc_info[2]
         result_data, http_code = ToJsonError(e, exc_info)
         result_data['meta'] = {'result': 'error'}
         return HttpResponse(kbjson.dumps(result_data, indent=2),
                             mimetype='application/json',
                             status=http_code)
Example #28
0
def post_webhook(url, event):
    """Posts an event to the supplied URL."""
    logger.info('Posting webhook: url=%s event=%s' % (url, event))
    post_data = kbjson.dumps({'events': [protolib.ToDict(event)]})
    post_data = urlencode({'payload': post_data})
    opener = urllib2.build_opener()
    opener.addheaders = [
      ('User-agent', 'Kegbot/%s' % util.get_version('kegbot')),
    ]
    try:
        opener.open(hook_url, data=post_data, timeout=5)
        return True
    except urllib2.URLError:
        return False
Example #29
0
    def format(self, record):
        """
        JSON-encode a record for serializing through redis.

        Convert date to iso format, and stringify any exceptions.
        """
        data = record._raw.copy()

        # serialize the datetime date as utc string
        data['time'] = data['time'].isoformat()

        # stringify exception data
        if data.get('traceback'):
            data['traceback'] = self.formatException(data['traceback'])

        return json.dumps(data)
Example #30
0
    def format(self, record):
        """
        JSON-encode a record for serializing through redis.

        Convert date to iso format, and stringify any exceptions.
        """
        data = record._raw.copy()

        # serialize the datetime date as utc string
        data['time'] = data['time'].isoformat()

        # stringify exception data
        if data.get('traceback'):
            data['traceback'] = self.formatException(data['traceback'])

        return json.dumps(data)
Example #31
0
def build_response(request, result_data, response_code=200):
    """Builds an HTTP response for JSON data."""
    callback = request.GET.get('callback')
    format = request.GET.get('format', None)
    debug = request.GET.get('debug', False)
    indent = 2

    json_str = kbjson.dumps(result_data, indent=indent)
    if callback and validate_jsonp.is_valid_jsonp_callback_value(callback):
        json_str = '%s(%s);' % (callback, json_str)

    if format == 'html' or (settings.DEBUG and debug):
        html = '<html><body><pre>%s</pre></body></html>' % json_str
        return HttpResponse(html, mimetype='text/html', status=response_code)
    else:
        return HttpResponse(json_str, mimetype='application/json', status=response_code)
Example #32
0
 def new_function(*args, **kwargs):
     request = args[0]
     http_code = 200
     indent = 2
     if "indent" in request.GET:
         if request.GET["indent"] == "":
             indent = None
         else:
             try:
                 indent_val = int(request.GET["indent"])
                 if indent_val >= 0 and indent_val <= 8:
                     indent = indent_val
             except ValueError:
                 pass
     result_data = prepare_data(f(*args, **kwargs))
     result_data["meta"] = {"result": "ok"}
     return HttpResponse(kbjson.dumps(result_data, indent=indent), mimetype="application/json", status=http_code)
Example #33
0
def autocomplete_user(request):
    search = request.GET.get('q')
    if search:
        users = models.User.objects.filter(Q(username__icontains=search) | Q(email__icontains=search))
    else:
        users = models.User.objects.all()
    users = users[:10]  # autocomplete widget limited to 10
    values = []
    for user in users:
        values.append({
            'username': user.username,
            'id': user.id,
            'email': user.email,
            'is_active': user.is_active,
        })
    return HttpResponse(kbjson.dumps(values, indent=None),
      mimetype='application/json', status=200)
Example #34
0
def autocomplete_beverage(request):
    search = request.GET.get('q')
    if search:
        beverages = models.Beverage.objects.filter(Q(name__icontains=search) | Q(producer__name__icontains=search))
    else:
        beverages = models.Beverage.objects.all()
    beverages = beverages[:10]  # autocomplete widget limited to 10
    values = []
    for beverage in beverages:
        values.append({
            'name': beverage.name,
            'id': beverage.id,
            'producer_name': beverage.producer.name,
            'producer_id': beverage.producer.id,
            'style': beverage.style,
        })
    return HttpResponse(kbjson.dumps(values, indent=None),
      content_type='application/json', status=200)
Example #35
0
def autocomplete_user(request):
    search = request.GET.get('q')
    if search:
        users = models.User.objects.filter(Q(username__icontains=search) | Q(email__icontains=search) | Q(display_name__icontains=search))
    else:
        users = models.User.objects.all()
    users = users[:10]  # autocomplete widget limited to 10
    values = []
    for user in users:
        values.append({
            'username': user.username,
            'id': user.id,
            'email': user.email,
            'display_name': user.get_full_name(),
            'is_active': user.is_active,
        })
    return HttpResponse(kbjson.dumps(values, indent=None),
      content_type='application/json', status=200)
Example #36
0
def autocomplete_beverage(request):
    search = request.GET.get('q')
    if search:
        beverages = models.Beverage.objects.filter(Q(name__icontains=search) | Q(producer__name__icontains=search))
    else:
        beverages = models.Beverage.objects.all()
    beverages = beverages[:10]  # autocomplete widget limited to 10
    values = []
    for beverage in beverages:
        values.append({
            'name': beverage.name,
            'id': beverage.id,
            'producer_name': beverage.producer.name,
            'producer_id': beverage.producer.id,
            'style': beverage.style,
        })
    return HttpResponse(kbjson.dumps(values, indent=None),
      mimetype='application/json', status=200)
Example #37
0
def build_response(request, result_data, response_code=200):
    """Builds an HTTP response for JSON data."""
    callback = request.GET.get('callback')
    format = request.GET.get('format', None)
    debug = request.GET.get('debug', False)
    indent = 2

    json_str = kbjson.dumps(result_data, indent=indent)
    if callback and validate_jsonp.is_valid_jsonp_callback_value(callback):
        json_str = '%s(%s);' % (callback, json_str)

    if format == 'html' or (settings.DEBUG and debug):
        html = '<html><body><pre>%s</pre></body></html>' % json_str
        return HttpResponse(html, mimetype='text/html', status=response_code)
    else:
        return HttpResponse(json_str,
                            mimetype='application/json',
                            status=response_code)
Example #38
0
def autocomplete_token(request):
    search = request.GET.get('q')
    if search:
        tokens = models.AuthenticationToken.objects.filter(
            Q(token_value__icontains=search) | Q(nice_name__icontains=search))
    else:
        tokens = models.AuthenticationToken.objects.all()
    tokens = tokens[:10]  # autocomplete widget limited to 10
    values = []
    for token in tokens:
        values.append({
            'username': token.user.username,
            'id': token.id,
            'auth_device': token.auth_device,
            'token_value': token.token_value,
            'enabled': token.enabled,
        })
    return HttpResponse(kbjson.dumps(values, indent=None),
      content_type='application/json', status=200)
Example #39
0
File: views.py Project: swc/kegbot
 def new_function(*args, **kwargs):
     request = args[0]
     http_code = 200
     indent = 2
     if 'indent' in request.GET:
         if request.GET['indent'] == '':
             indent = None
         else:
             try:
                 indent_val = int(request.GET['indent'])
                 if indent_val >= 0 and indent_val <= 8:
                     indent = indent_val
             except ValueError:
                 pass
     result_data = prepare_data(f(*args, **kwargs))
     result_data['meta'] = {'result': 'ok'}
     return HttpResponse(kbjson.dumps(result_data, indent=indent),
                         mimetype='application/json',
                         status=http_code)
Example #40
0
def autocomplete_token(request):
    search = request.GET.get('q')
    if search:
        tokens = models.AuthenticationToken.objects.filter(
            Q(token_value__icontains=search) | Q(nice_name__icontains=search))
    else:
        tokens = models.AuthenticationToken.objects.all()
    tokens = tokens[:10]  # autocomplete widget limited to 10
    values = []
    for token in tokens:
        values.append({
            'username': token.user.username,
            'id': token.id,
            'auth_device': token.auth_device,
            'token_value': token.token_value,
            'enabled': token.enabled,
        })
    return HttpResponse(kbjson.dumps(values, indent=None),
      mimetype='application/json', status=200)
Example #41
0
File: backup.py Project: swc/kegbot
def dump(output_fp, kbsite, indent=None, log_cb=_no_log):
  """Produce a dump of this Kegbot system to the given filestream.

  In its current format, the dump is plaintext JSON string consisting of all
  important data, including tap configuration, drink history, and user account
  details.

  All "derived" tables are NOT backed up.  These are tables with data that can
  be regenerated at any time without any loss of history.  Specifically:
    - session chunks
    - user session chunks
    - keg session chunks
    - keg stats
    - user stats
    - session stats
    - system events
  """
  res = {}
  items = (
      ('bdb_brewers', bdb_models.Brewer.objects.all()),
      ('bdb_styles', bdb_models.BeerStyle.objects.all()),
      ('bdb_beertypes', bdb_models.BeerType.objects.all()),
      ('thermosensors', kbsite.thermosensors.all().order_by('id')),
      ('coinselectors', kbsite.coinselectors.all().order_by('id')),
      ('kegs', kbsite.kegs.all().order_by('id')),
      ('taps', kbsite.taps.all().order_by('id')),
      ('sessions', kbsite.sessions.all().order_by('id')),
      ('thermologs', kbsite.thermologs.all().order_by('-id')[:60*24]),
      ('thermosummarylogs', kbsite.thermosummarylogs.all().order_by('id')),
      ('users', models.User.objects.all().order_by('id')),
      ('profiles', models.UserProfile.objects.all().order_by('id')),
      ('drinks', kbsite.drinks.valid().order_by('id')),
      ('tokens', kbsite.tokens.all().order_by('id')),
  )

  log_cb('Generating backup data ...')
  for name, qs in items:
    log_cb('  .. dumping %s' % name)
    res[name] = list(protolib.ToDict(qs, full=True))

  log_cb('Serializing and writing backup data ...')
  output_fp.write(kbjson.dumps(res, indent=indent))
Example #42
0
def autocomplete_beer_type(request):
  context = RequestContext(request)
  search = request.GET.get('q')
  if search:
    types = models.BeerType.objects.filter(Q(name__icontains=search) | Q(brewer__name__icontains=search))
  else:
    types = models.BeerType.objects.all()
  types = types[:10]  # autocomplete widget limited to 10
  values = []
  for beer in types:
    values.append({
      'name': beer.name,
      'id': beer.id,
      'brewer_name': beer.brewer.name,
      'brewer_id': beer.brewer.id,
      'style_name': beer.style.name,
      'style_id': beer.style.id,
  })
  return HttpResponse(kbjson.dumps(values, indent=None),
    mimetype='application/json', status=200)
Example #43
0
File: views.py Project: swc/kegbot
 def new_function(*args, **kwargs):
   request = args[0]
   http_code = 200
   indent = 2
   if 'indent' in request.GET:
     if request.GET['indent'] == '':
       indent = None
     else:
       try:
         indent_val = int(request.GET['indent'])
         if indent_val >= 0 and indent_val <= 8:
           indent = indent_val
       except ValueError:
         pass
   result_data = prepare_data(f(*args, **kwargs))
   result_data['meta'] = {
     'result': 'ok'
   }
   return HttpResponse(kbjson.dumps(result_data, indent=indent),
       mimetype='application/json', status=http_code)
Example #44
0
def admin_settings(request, plugin):
    context = RequestContext(request)
    settings_form = plugin.get_site_settings_form()

    if request.method == 'POST':
        if 'submit-settings' in request.POST:
            settings_form = forms.SiteSettingsForm(request.POST)
            if settings_form.is_valid():
                client_id = settings_form.cleaned_data['client_id']
                client_secret = settings_form.cleaned_data['client_secret']
                venue_id = settings_form.cleaned_data['venue_id']
                client = foursquare.Foursquare(client_id=client_id,
                                               client_secret=client_secret)
                venue = None
                try:
                    # Search for the venue. Simultaneous validates all three credentials.
                    if venue_id:
                        venue = client.venues(venue_id)
                except foursquare.FoursquareException, e:
                    messages.error(
                        request,
                        'Error testing Foursquare connection: %s' % str(e))
                else:
                    plugin.save_site_settings_form(settings_form)
                    plugin.save_venue_detail(venue)
                    messages.success(request, 'Settings updated')

        if 'test-api' in request.POST:
            plugin = request.plugins['foursquare']
            client = plugin.get_foursquare_client()
            venue_id = plugin.get_venue_id(
            ) or '49d01698f964a520fd5a1fe3'  # Golden Gate Bridge
            try:
                venue_info = client.venues(venue_id)
                context['test_response'] = kbjson.dumps(venue_info, indent=2)
                messages.success(request, 'API test successful.')
            except foursquare.FoursquareException as e:
                messages.success(request,
                                 'API test failed: {}'.format(e.message))
Example #45
0
def autocomplete_beer_type(request):
    context = RequestContext(request)
    search = request.GET.get('q')
    if search:
        types = models.BeerType.objects.filter(
            Q(name__icontains=search) | Q(brewer__name__icontains=search))
    else:
        types = models.BeerType.objects.all()
    types = types[:10]  # autocomplete widget limited to 10
    values = []
    for beer in types:
        values.append({
            'name': beer.name,
            'id': beer.id,
            'brewer_name': beer.brewer.name,
            'brewer_id': beer.brewer.id,
            'style_name': beer.style.name,
            'style_id': beer.style.id,
        })
    return HttpResponse(kbjson.dumps(values, indent=None),
                        mimetype='application/json',
                        status=200)
Example #46
0
class ChartNode(Node):
    CHART_TMPL = '''
  <!-- begin chart %(chart_id)s -->
  <div id="chart-%(chart_id)s-container"
      style="height: %(height)spx; width: %(width)spx;"
      class="kb-chartbox"></div>
  <script type="text/javascript">
    var chart_%(chart_id)s;
    $(document).ready(function() {
      var chart_data = %(chart_data)s;
      chart_%(chart_id)s = new Highcharts.Chart(chart_data);
    });
  </script>
  <!-- end chart %(chart_id)s -->

  '''
    ERROR_TMPL = '''
  <!-- begin chart %(chart_id)s -->
  <div id="chart-%(chart_id)s-container"
      style="height: %(height)spx; width: %(width)spx;"
      class="kb-chartbox-error">
    %(error_str)s
  </div>
  <!-- end chart %(chart_id)s -->
  '''

    def __init__(self, charttype, width, height, args):
        self._charttype = charttype
        self._width = width
        self._height = height
        self._args = args

        try:
            self._chart_fn = getattr(self, 'chart_%s' % (self._charttype, ))
        except AttributeError:
            raise TemplateSyntaxError('unknown chart type: %s' %
                                      self._charttype)

    def _get_chart_id(self, context):
        # TODO(mikey): Is there a better way to store _CHART_ID?
        if not hasattr(context, '_CHART_ID'):
            context._CHART_ID = 0
        context._CHART_ID += 1
        return context._CHART_ID

    def render(self, context):
        chart_id = self._get_chart_id(context)

        width = self._width
        height = self._height

        obj = Variable(self._args[0]).resolve(context)
        try:
            chart_result = self._chart_fn(obj)
        except charts.ChartError, e:
            error_str = 'chart error: %s' % (e, )
            return ChartNode.ERROR_TMPL % vars()
        chart_base = {
            'chart': {
                'borderColor': '#eeeeff',
                'borderWidth': 0,
                'renderTo': 'chart-%s-container' % chart_id,
            },
            'credits': {
                'enabled': False,
            },
            'legend': {
                'enabled': False,
            },
            'margin': [0, 0, 0, 0],
            'title': {
                'text': None,
            },
            'yAxis': {
                'labels': {
                    'align': 'left'
                },
                'title': {
                    'text': None,
                }
            },
        }

        chart_data = chart_base
        for k, v in chart_result.iteritems():
            if k not in chart_data:
                chart_data[k] = v
            elif type(v) == type({}):
                chart_data[k].update(v)
            else:
                chart_data[k] = v
        chart_data = kbjson.dumps(chart_data, indent=None)
        return ChartNode.CHART_TMPL % vars()
Example #47
0
 def ToJson(self, indent=2):
   return kbjson.dumps(self.ToDict(), indent=indent)
Example #48
0
 def ToJson(self, indent=2):
     return kbjson.dumps(self.ToDict(), indent=indent)
Example #49
0
def build_response(result_data, response_code=200):
  """Builds an HTTP response for JSON data."""
  indent = 2
  return HttpResponse(kbjson.dumps(result_data, indent=indent),
      mimetype='application/json', status=response_code)
Example #50
0
class ChartNode(Node):
    CHART_TMPL = '''
    <!-- begin chart %(chart_id)s -->
    <div id="chart-%(chart_id)s-container"
        style="height: %(height)spx; width: %(width)spx;"
        class="kb-chartbox"></div>
    <script type="text/javascript">
      var chart_%(chart_id)s;
      $(document).ready(function() {
        var chart_data = %(chart_data)s;
        chart_%(chart_id)s = new Highcharts.Chart(chart_data);
      });
    </script>
    <!-- end chart %(chart_id)s -->

    '''
    ERROR_TMPL = '''
    <!-- begin chart %(chart_id)s -->
    <div id="chart-%(chart_id)s-container"
        style="height: %(height)spx; width: %(width)spx;"
        class="kb-chartbox-error">
      %(error_str)s
    </div>
    <!-- end chart %(chart_id)s -->
    '''

    def __init__(self, charttype, width, height, args):
        self._charttype = charttype
        self._width = width
        self._height = height
        self._args = args

        self._chart_fn = getattr(charts, 'chart_%s' % (self._charttype, ),
                                 None)

    def _get_chart_id(self, context):
        # TODO(mikey): Is there a better way to store _CHART_ID?
        if not hasattr(context, '_CHART_ID'):
            context._CHART_ID = 0
        context._CHART_ID += 1
        return context._CHART_ID

    def show_error(self, error_str):
        ctx = {
            'error_str': error_str,
            'chart_id': 0,
            'width': self._width,
            'height': self._height,
        }
        return ChartNode.ERROR_TMPL % ctx

    def render(self, context):
        if not self._chart_fn:
            return self.show_error("Unknown chart type: %s" % self._charttype)

        chart_id = self._get_chart_id(context)
        obj = Variable(self._args[0]).resolve(context)

        metric_volumes = context.get('metric_volumes', False)
        temperature_units = context.get('temperature_display_units', 'f')

        try:
            chart_result = self._chart_fn(obj,
                                          metric_volumes=metric_volumes,
                                          temperature_units=temperature_units)
        except charts.ChartError, e:
            return self.show_error(str(e))

        chart_base = {
            'chart': {
                'borderColor': '#eeeeff',
                'borderWidth': 0,
                'renderTo': 'chart-%s-container' % chart_id,
            },
            'credits': {
                'enabled': False,
            },
            'legend': {
                'enabled': False,
            },
            'margin': [0, 0, 0, 0],
            'title': {
                'text': None,
            },
            'yAxis': {
                'labels': {
                    'align': 'left'
                },
                'title': {
                    'text': None,
                }
            },
        }

        chart_data = chart_base
        for k, v in chart_result.iteritems():
            if k not in chart_data:
                chart_data[k] = v
            elif isinstance(v, dict):
                chart_data[k].update(v)
            else:
                chart_data[k] = v
        chart_data = kbjson.dumps(chart_data, indent=None)

        ctx = {
            'chart_id': chart_id,
            'width': self._width,
            'height': self._height,
            'chart_data': chart_data,
        }

        return ChartNode.CHART_TMPL % ctx
Example #51
0
 def __repr__(self):
   return kbjson.dumps(self)
Example #52
0
 def save_venue_detail(self, detail):
     self.datastore.set(KEY_VENUE_DETAIL, kbjson.dumps(detail))
Example #53
0
 def save_user_profile(self, user, profile):
     self.datastore.set('user_detail:%s' % user.id, kbjson.dumps(profile))
Example #54
0
 def save_user_profile(self, user, profile):
     self.datastore.set('user_detail:%s' % user.id, kbjson.dumps(profile))
Example #55
0
def build_response(result_data, response_code=200):
    """Builds an HTTP response for JSON data."""
    indent = 2
    return HttpResponse(kbjson.dumps(result_data, indent=indent),
                        mimetype='application/json',
                        status=response_code)