コード例 #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)
コード例 #2
0
ファイル: views.py プロジェクト: lcampbell/kegbot-server
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)
コード例 #3
0
ファイル: views.py プロジェクト: joshpelkey/kegbot
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)
コード例 #4
0
ファイル: views.py プロジェクト: Iamdreaver/MichKegbot
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)
コード例 #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()
コード例 #6
0
ファイル: views.py プロジェクト: jallen2281/kegbot-server
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)
コード例 #7
0
ファイル: tasks.py プロジェクト: dcaliri/kegbot-server
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
コード例 #8
0
ファイル: tasks.py プロジェクト: Shelvak/kegbot-server
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
コード例 #9
0
ファイル: views.py プロジェクト: mik3y/kegbot-server
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))
コード例 #10
0
ファイル: jsonfield.py プロジェクト: DDRBoxman/kegbot-server
 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)
コード例 #11
0
ファイル: views.py プロジェクト: Indemnity83/kegbot-server
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))
コード例 #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
コード例 #13
0
ファイル: tasks.py プロジェクト: ayax79/kegbot
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))
コード例 #14
0
ファイル: jsonfield.py プロジェクト: chinnyannieb/MichKegbot
 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)
コード例 #15
0
ファイル: views.py プロジェクト: StewartJarod/kegbot-server
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)
コード例 #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
コード例 #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))
コード例 #18
0
ファイル: util.py プロジェクト: MarcusFulbright/kegbot
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)
コード例 #19
0
ファイル: tasks.py プロジェクト: quandrum/kegbot
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
コード例 #20
0
ファイル: plugin.py プロジェクト: markstubb/kegbot-server
 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
コード例 #21
0
ファイル: plugin.py プロジェクト: lcampbell/kegbot-server
 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
コード例 #22
0
ファイル: views.py プロジェクト: ferentchak/kegbot
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)
コード例 #23
0
ファイル: views.py プロジェクト: tobywaite/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)
コード例 #24
0
ファイル: views.py プロジェクト: MarcusFulbright/kegbot
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)
コード例 #25
0
ファイル: tasks.py プロジェクト: ctCasaAg/kegbot
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
コード例 #26
0
ファイル: tasks.py プロジェクト: Uncodin/kegbot-server
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
コード例 #27
0
ファイル: views.py プロジェクト: 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)
コード例 #28
0
ファイル: tasks.py プロジェクト: JustDerb/kegbox
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
コード例 #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)
コード例 #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)
コード例 #31
0
ファイル: util.py プロジェクト: Shelvak/kegbot-server
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)
コード例 #32
0
ファイル: views.py プロジェクト: tobywaite/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)
コード例 #33
0
ファイル: views.py プロジェクト: iargue/kegbot-server
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)
コード例 #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)
コード例 #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)
コード例 #36
0
ファイル: views.py プロジェクト: StewartJarod/kegbot-server
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)
コード例 #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)
コード例 #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)
コード例 #39
0
ファイル: views.py プロジェクト: 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)
コード例 #40
0
ファイル: views.py プロジェクト: StewartJarod/kegbot-server
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)
コード例 #41
0
ファイル: backup.py プロジェクト: 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))
コード例 #42
0
ファイル: views.py プロジェクト: quandrum/kegbot
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)
コード例 #43
0
ファイル: views.py プロジェクト: 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)
コード例 #44
0
ファイル: views.py プロジェクト: jallen2281/kegbot-server
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))
コード例 #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)
コード例 #46
0
ファイル: kegweblib.py プロジェクト: chinnyannieb/MichKegbot
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()
コード例 #47
0
ファイル: kbevent.py プロジェクト: jbenesch/kegbot-pycore
 def ToJson(self, indent=2):
   return kbjson.dumps(self.ToDict(), indent=indent)
コード例 #48
0
ファイル: kbevent.py プロジェクト: dandrzej80/Kegbot-Pycore2
 def ToJson(self, indent=2):
     return kbjson.dumps(self.ToDict(), indent=indent)
コード例 #49
0
ファイル: util.py プロジェクト: Iamdreaver/MichKegbot
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)
コード例 #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
コード例 #51
0
ファイル: jsonfield.py プロジェクト: chinnyannieb/MichKegbot
 def __repr__(self):
   return kbjson.dumps(self)
コード例 #52
0
ファイル: plugin.py プロジェクト: lcampbell/kegbot-server
 def save_venue_detail(self, detail):
     self.datastore.set(KEY_VENUE_DETAIL, kbjson.dumps(detail))
コード例 #53
0
ファイル: plugin.py プロジェクト: lcampbell/kegbot-server
 def save_user_profile(self, user, profile):
     self.datastore.set('user_detail:%s' % user.id, kbjson.dumps(profile))
コード例 #54
0
ファイル: plugin.py プロジェクト: DDRBoxman/kegbot-server
 def save_user_profile(self, user, profile):
     self.datastore.set('user_detail:%s' % user.id, kbjson.dumps(profile))
コード例 #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)