Changeset - 935466c16cae
[Not reviewed]
default
0 4 0
Dennis Fink - 7 years ago 2018-04-25 21:56:22
dennis.fink@c3l.lu
Bump version
4 files changed with 11 insertions and 4 deletions:
0 comments (0 inline, 0 general)
setup.py
Show inline comments
 
from pprint import pprint
 

	
 
from setuptools import setup, find_packages
 

	
 
packages = find_packages()
 
packages.append('spaceapi.templates')
 
packages.append('spaceapi.static')
 
packages.append('spaceapi.schema')
 

	
 
setup(
 
    name='c3l_spaceapi',
 
    version='0.0.13',
 
    version='0.0.14',
 
    url=None,
 
    license='GPLv3+',
 
    author='Dennis Fink',
 
    author_email='dennis.fink@c3l.lu',
 
    description='spaceapi endpoint for c3l.lu',
 
    packages=packages,
 
    package_data={
 
        'spaceapi.templates': ['*'],
 
        'spaceapi.static': ['*'],
 
        'spaceapi.schema': ['*'],
 
    },
 
    install_requires=[
 
        'Flask',
 
        'Flask-HTTPAuth',
 
        'Flask-Bootstrap',
 
        'jsonschema',
 
        'tweepy',
 
        'Mastodon.py',
 
    ]
 
)
spaceapi/templates/open.html
Show inline comments
 
{% extends "base.html" %}
 

	
 
{% block content %}
 
  <div class="text-center">
 
    <form method="POST" style="display: inline-block;">
 
      <input type="submit" name="open" value="open" class="btn btn-success btn-lg">
 
      <input type="submit" name="close" value="close" class="btn btn-danger btn-lg">
 
      <input type="text" name="message" class="form-control">
 
    </form>
 
  </div>
 
{% endblock %}
spaceapi/utils.py
Show inline comments
 
@@ -146,102 +146,103 @@ class ActiveStatus(Singleton, dict):
 
                people_now_present['value'] -= 1
 

	
 
            if 'names' in people_now_present:
 

	
 
                if username in people_now_present['names']:
 
                    people_now_present['names'].remove(username)
 

	
 
                if not people_now_present['names'] or people_now_present['value'] == 0:
 
                    del people_now_present['names']
 

	
 
            self['sensors']['people_now_present'][0] = people_now_present
 
        else:
 
            pass
 

	
 
    def clear_user_present(self):
 
        self['sensors']['people_now_present'][0]['value'] = 0
 
        if 'names' in self['sensors']['people_now_present'][0]:
 
            del self['sensors']['people_now_present'][0]['names']
 

	
 
    def send_tweet(self, value):
 
        tweet = random.choice(possible_open_tweets) if value else random.choice(possible_closed_tweets)
 
        try:
 
            post_tweet(tweet, self)
 
        except Exception as e:
 
            current_app.logger.error('Sending tweet failed! %s' % e,
 
                                     exc_info=True)
 

	
 
        try:
 
            post_toot(tweet)
 
        except Exception as e:
 
            current_app.logger.error('Sending toot failed! %s' % e,
 
                                     exc_info=True)
 

	
 
    def set_new_state(self, value=None, trigger_person=None, message=None):
 

	
 
        if value is not None and value != self['state']['open']:
 
            self['state']['open'] = value
 

	
 
            self.send_tweet(value)
 

	
 
            if not value:
 
                if 'people_now_present' in self['sensors']:
 
                    self.clear_user_present()
 

	
 
                if 'message' in self['state']:
 
                    del self['state']['message']
 

	
 
            if trigger_person is None:
 
                if 'trigger_person' in self['state']:
 
                del self['state']['trigger_person']
 
            else:
 
                self['state']['trigger_person'] = trigger_person
 

	
 
            self['state']['lastchange'] = int(time())
 

	
 
        if message is not None:
 
        if message is not None and message:
 
            self['state']['message'] = message
 

	
 

	
 
class ActiveStatusv14(ActiveStatus):
 

	
 
    def __init__(self):
 
        self.default_json_file = default_json_file_v14
 
        self.last_state_file = last_state_file_v14
 

	
 
    def send_tweet(self, value):
 
        pass
 

	
 

	
 
def request_wants_json():
 
    best = request.accept_mimetypes.best_match(
 
        ['application/json', 'text/html']
 
    )
 
    return best == 'application/json' and \
 
        request.accept_mimetypes[best] > \
 
        request.accept_mimetypes['text/html']
 

	
 

	
 
def fuzzy_list_find(lst, key, value):
 

	
 
    for i, dic in enumerate(lst):
 
        if dic[key] == value:
 
            return i
 

	
 
    raise ValueError
 

	
 

	
 
def first(iterable, keys):
 
    for key in keys:
 
        if key in iterable:
 
            return key
 

	
 
    raise ValueError
 

	
 

	
 
def pass_active_status(f):
 
    @wraps(f)
 
    def wrapper(*args, **kwargs):
 
        status = ActiveStatus()
 
        rv = f(status, *args, **kwargs)
 
        status.save_last_state()
 
        return rv
 
    return wrapper
spaceapi/views.py
Show inline comments
 
@@ -14,78 +14,83 @@ def index():
 

	
 

	
 
@root_views.route('/status.json')
 
def status_json():
 
    return jsonify(ActiveStatus())
 

	
 

	
 
@root_views.route('/v14/status.json')
 
def v14_json():
 
    return jsonify(ActiveStatusv14())
 

	
 

	
 
@root_views.route('/reload')
 
@httpauth.login_required
 
def reload():
 
    active = ActiveStatus()
 
    active.reload()
 
    return jsonify(active)
 

	
 

	
 
@root_views.route('/v14/reload')
 
@httpauth.login_required
 
def v14_reload():
 
    active = ActiveStatusv14()
 
    active.reload()
 
    return jsonify(active)
 

	
 

	
 
@root_views.route('/open', methods=('GET', 'POST'))
 
@httpauth.login_required
 
def open():
 
    if request.method == 'POST':
 
        active = ActiveStatus()
 
        activev14 = ActiveStatusv14()
 

	
 
        try:
 
            if httpauth.username() in current_app.config['STATE_TRIGGER_PERSON_ALLOWED']:
 
                trigger_person = httpauth.username()
 
            else:
 
                trigger_person = None
 
        except KeyError:
 
            trigger_person = None
 

	
 
        if 'close' in request.form:
 
            new_state = False
 
        elif 'open' in request.form:
 
            new_state = True
 

	
 
        active.set_new_state(value=new_state, trigger_person=trigger_person)
 
        activev14.set_new_state(value=new_state, trigger_person=trigger_person)
 
        if 'message' in request.form:
 
            message = request.form.get('message')
 
        else:
 
            message = None
 

	
 
        active.set_new_state(value=new_state, trigger_person=trigger_person, message=message)
 
        activev14.set_new_state(value=new_state, trigger_person=trigger_person, message=message)
 
        active.save_last_state()
 
        activev14.save_last_state()
 
        return redirect(url_for('root.index'))
 

	
 
    return render_template('open.html')
 

	
 

	
 
@root_views.route('/present', methods=('GET', 'POST'))
 
@httpauth.login_required
 
def present():
 
    if request.method == 'POST':
 

	
 
        active = ActiveStatus()
 
        activev14 = ActiveStatusv14()
 

	
 
        if active['state']['open']:
 
            user = httpauth.username()
 
            if 'present' in request.form:
 
                active.add_user_present(user)
 
                activev14.add_user_present(user)
 
            elif 'leave' in request.form:
 
                active.remove_user_present(user)
 
                activev14.remove_user_present(user)
 
            active.save_last_state()
 
            activev14.save_last_state()
 
        return redirect(url_for('root.index'))
 

	
 
    return render_template('present.html')
0 comments (0 inline, 0 general)