__main__.py 3.04 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
#!/usr/bin/python
# -*- coding: utf-8 -*-
#    Copyright 2014 J. Fernando Sánchez Rada - Grupo de Sistemas Inteligentes
#                                                       DIT, UPM
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#        http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
"""
Senpy is a modular sentiment analysis server. This script runs an instance of
the server.

"""
22

23
from flask import Flask
24
from senpy.extensions import Senpy
25 26
from gevent.wsgi import WSGIServer
from gevent.monkey import patch_all
27 28 29
import logging
import os
import argparse
30
import senpy
31

32 33
patch_all(thread=False)

J. Fernando Sánchez's avatar
J. Fernando Sánchez committed
34 35
SERVER_PORT = os.environ.get("PORT", 5000)

J. Fernando Sánchez's avatar
YAPFed  
J. Fernando Sánchez committed
36

J. Fernando Sánchez's avatar
J. Fernando Sánchez committed
37
def main():
38
    parser = argparse.ArgumentParser(description='Run a Senpy server')
J. Fernando Sánchez's avatar
YAPFed  
J. Fernando Sánchez committed
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
    parser.add_argument(
        '--level',
        '-l',
        metavar='logging_level',
        type=str,
        default="INFO",
        help='Logging level')
    parser.add_argument(
        '--debug',
        '-d',
        action='store_true',
        default=False,
        help='Run the application in debug mode')
    parser.add_argument(
        '--default-plugins',
        action='store_true',
        default=False,
        help='Load the default plugins')
    parser.add_argument(
        '--host',
        type=str,
        default="127.0.0.1",
        help='Use 0.0.0.0 to accept requests from any host.')
    parser.add_argument(
        '--port',
        '-p',
        type=int,
        default=SERVER_PORT,
        help='Port to listen on.')
    parser.add_argument(
        '--plugins-folder',
        '-f',
        type=str,
        default='plugins',
        help='Where to look for plugins.')
    parser.add_argument(
        '--only-install',
        '-i',
        action='store_true',
        default=False,
79
        help='Do not run a server, only install plugin dependencies'
J. Fernando Sánchez's avatar
YAPFed  
J. Fernando Sánchez committed
80
    )
81
    args = parser.parse_args()
82 83 84
    logging.basicConfig()
    rl = logging.getLogger()
    rl.setLevel(getattr(logging, args.level))
85 86
    app = Flask(__name__)
    app.debug = args.debug
87
    sp = Senpy(app, args.plugins_folder, default_plugins=args.default_plugins)
88 89 90
    if args.only_install:
        sp.install_deps()
        return
91 92 93
    sp.activate_all()
    http_server = WSGIServer((args.host, args.port), app)
    try:
94 95
        print('Senpy version {}'.format(senpy.__version__))
        print('Server running on port %s:%d. Ctrl+C to quit' % (args.host,
96
                                                                args.port))
97 98
        http_server.serve_forever()
    except KeyboardInterrupt:
99
        print('Bye!')
100 101
    http_server.stop()
    sp.deactivate_all()
J. Fernando Sánchez's avatar
J. Fernando Sánchez committed
102

J. Fernando Sánchez's avatar
YAPFed  
J. Fernando Sánchez committed
103

J. Fernando Sánchez's avatar
J. Fernando Sánchez committed
104 105
if __name__ == '__main__':
    main()