예제 #1
0
파일: server.py 프로젝트: BFangs/TsuNotMe
            session["user_id"] = str(check.user_id)
            response["success"] = 'True'
            response["message"] = "You've logged in!"
        else:
            response["success"] = 'False'
            response["message"] = "That was the wrong password!"
    else:
        new = User.new_user(email, pword, nickname)
        session["user_id"] = new["id"]
        response["message"] = new["message"]
    return jsonify(response)


@app.route('/loggout.json')
def loggout_user():
    """ajax call for loggout"""

    response = {}
    del session["user_id"]
    response["message"] = "You're now logged out"
    return jsonify(response)


if __name__ == "__main__":
    app.debug = True
    app.jinja_env.auto_reload = app.debug
    connect_to_db(app)
    http_server = WSGIServer(('0.0.0.0', 5000), app)
    http_server.serve_forever()
    DebugToolbarExtension(app)
예제 #2
0
    # download images
    print 'Downloading for %s started: %d sec improc_timeout, %d sec per_image_timeout' % (
        query, imgetter_params['improc_timeout']
        if imgetter_params['improc_timeout'] else -1,
        imgetter_params['per_image_timeout']
        if imgetter_params['per_image_timeout'] else -1)
    dfiles_list = http_service_helper.imsearch_download_to_static(
        query_res_list, postproc_module, postproc_extra_prms,
        custom_local_path, imgetter_params, zmq_context)
    print 'Downloading for %s completed: %d images retrieved' % (
        query, len(dfiles_list))
    # convert pathnames to URL paths (if not running locally and specifying
    # a custom path)
    if not custom_local_path:
        dfiles_list = http_service_helper.make_url_dfiles_list(dfiles_list)

    if return_dfiles_list:
        return Response(json.dumps(dfiles_list), mimetype='application/json')
    else:
        return 'DONE'


if __name__ == '__main__':
    if len(sys.argv) > 1:
        SERVER_PORT = int(sys.argv[1])
    else:
        SERVER_PORT = DEFAULT_SERVER_PORT
    print "Starting imsearch_http_service on port", SERVER_PORT
    http_server = WSGIServer(('', SERVER_PORT), app)
    http_server.serve_forever()
예제 #3
0
파일: app.py 프로젝트: Sulent/xelc
        str = ''
        for char in chars:
            str += chr(97 + int(char))

        r.hset('links', str, request.form['url'])
        return str, 200


@app.route('/<link>')
def get_link(link):

    if app.config['ENABLE_EVIL'] and random.randint(
            0, 100) <= app.config['EVIL_LEVEL']:
        evil_sites = [
            # Put your evil sites here...
        ]
        return redirect(random.choice(evil_sites))

    url = r.hget('links', link)

    if url:
        return redirect(url)
    else:
        return abort(404)


from gevent.wsgi import WSGIServer
http_server = WSGIServer(('', app.config['APP_PORT']), app)
http_server.serve_forever()
예제 #4
0
# Lancement du serveur
if "tornado" in sys.argv:

    # Serveur Tornado
    # Installation préalable : "pip install tornado"

    from tornado.wsgi import WSGIContainer
    from tornado.httpserver import HTTPServer
    from tornado.ioloop import IOLoop

    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(port)
    IOLoop.instance().start()

elif "gevent" in sys.argv:

    # Serveur Gevent
    # Installation préalable : "pip install gevent"

    from gevent.wsgi import WSGIServer

    http_server = WSGIServer(('', port), app)
    http_server.serve_forever()

else:

    # Serveur intégré à Flask

    app.run(host=host, port=port, debug=False)
예제 #5
0
"""Entrypoint to start app."""

from gevent.wsgi import WSGIServer

import logging

from dasem.app import create_app

logging_level = logging.DEBUG

logger = logging.getLogger()
logger.setLevel(logging_level)
logging_handler = logging.StreamHandler()
logging_handler.setLevel(logging_level)
logging_formatter = logging.Formatter(
    '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logging_handler.setFormatter(logging_formatter)
logger.addHandler(logging_handler)
logger.info('Logging setup')

logger.info('Creating app')
app = create_app()

# WSGIServer server better than werkzeug
# http://stackoverflow.com/questions/37962925/
http_server = WSGIServer(('', 5000), app, log=logger)
http_server.serve_forever()
예제 #6
0
def main(argv=None):
    parser = ArgumentParser(description="pistat.py [options]")
    parser.add_argument("-c",
                        "--config",
                        dest="config",
                        default=DEFAULT_CONFIG_FILE,
                        action="store",
                        help="App config file")
    parser.add_argument("-d",
                        "--debug",
                        dest="debug",
                        default=False,
                        action="store_true",
                        help="Run app in debug mode")
    parser.add_argument("-s",
                        "--console",
                        dest="console",
                        default=False,
                        action="store_true",
                        help="Log to console")
    parser.add_argument("-p",
                        "--port",
                        dest="port",
                        default=5337,
                        type=int,
                        action="store",
                        help="Port number to run on")
    options = parser.parse_args()

    if not os.path.exists(options.config):
        print 'Supplied config file \'%s\' does not exist' % options.config
        sys.exit(1)

    webapp = Flask(__name__)
    webapp.config.update(json.load(open(options.config)))

    root_log = logging.getLogger()
    formatter = logging.Formatter(
        "%(asctime)s %(levelname)-5s %(name)s(:%(lineno)d) %(message)s",
        '%Y.%m.%d-%H:%M:%S')
    if options.debug:
        root_log.setLevel(logging.DEBUG)
    else:
        root_log.setLevel(logging.INFO)

    if options.console:
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(formatter)
        root_log.addHandler(console_handler)

    file_handler = RotatingFileHandler(webapp.config['log_file'],
                                       maxBytes=10240000,
                                       backupCount=5)
    file_handler.setFormatter(formatter)
    root_log.addHandler(file_handler)

    logging.getLogger('requests.packages.urllib3').setLevel(logging.WARNING)

    setup_routes(webapp)
    setup_db(webapp)

    log.info("Starting pistat on %s | config file: %s | debug: %s",
             options.port, options.config, options.debug)
    if options.debug:
        webapp.debug = True
        webapp.run(host='0.0.0.0', port=options.port)
    else:
        http_server = WSGIServer(('', options.port), webapp, log=None)
        http_server.serve_forever()
예제 #7
0
 def run(self, handler):
     from gevent import monkey
     monkey.patch_socket()
     from gevent.wsgi import WSGIServer
     WSGIServer((self.host, self.port), handler).serve_forever()
예제 #8
0
 def run(self):
     self.httpServer = WSGIServer(("0.0.0.0", self.port),
                                  self.mainServer.app,
                                  log=None)
     self.httpServer.serve_forever()
예제 #9
0
        "%s, try to pip install setproctitle, otherwise, you can't use the process to customize the function"
        % e)
else:
    setproctitle.setproctitle(ProcessName)
    msg = "The process is %s" % ProcessName
    print(msg)
    logger.info(msg)

try:
    msg = "%s has been launched, %s:%d, with %s." % (ProcessName, Host, Port,
                                                     ProductType)
    print(msg)
    logger.info(msg)
    if ProductType == 'gevent':
        from gevent.wsgi import WSGIServer
        http_server = WSGIServer((Host, Port), app)
        http_server.serve_forever()

    elif ProductType == 'tornado':
        from tornado.wsgi import WSGIContainer
        from tornado.httpserver import HTTPServer
        from tornado.ioloop import IOLoop
        http_server = HTTPServer(WSGIContainer(app))
        http_server.listen(Port)
        IOLoop.instance().start()

    else:
        msg = 'Start the program does not support with %s, abnormal exit!' % ProductType
        logger.error(msg)
        raise RuntimeError(msg)
예제 #10
0
파일: g.py 프로젝트: zhongyinhei/Mahouo
from gevent.wsgi import WSGIServer
from app import app, blueprint

http_server = WSGIServer(('127.0.0.1', 8401), app)
http_server.serve_forever()
예제 #11
0
    if sys.argv[1].startswith('main'):
        from main import app
    elif sys.argv[1].startswith('chat'):
        from chat import app
except ImportError:
    sys.exit("Usage: python run_server.py (main|chat) [--debug]")

if '--debug' in sys.argv:
    app.debug = True

socket_path = '/tmp/'+sys.argv[1]+'.sock'

# Delete the socket file if it already exists.
try:
    os.remove(socket_path)
except OSError:
    pass

sock = socket(AF_UNIX)
sock.bind(socket_path)
sock.setblocking(0)
sock.listen(256)

os.chmod(socket_path, 0777)

http_server = WSGIServer(sock, app)
# yeah this is a hack.
http_server.environ['SERVER_NAME'] = getfqdn()
http_server.serve_forever()

예제 #12
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gevent.wsgi import WSGIServer
from gevent import monkey
monkey.patch_all()

import requests
from flask import Flask, json

from settings import SPARQL_ENDPOINT
from queries import GET_QUERY

app = Flask(__name__)
app.debug = False


@app.route('/')
def get():
    payload = {"query": GET_QUERY, "format": "application/sparql-results+json"}
    r = requests.get(SPARQL_ENDPOINT, params=payload)
    return r.text


if __name__ == "__main__":
    http_server = WSGIServer(('', 8888), app)
    http_server.serve_forever()
예제 #13
0
        os.remove(file_path)
        return mp4_path

    def reply_func(self, param_dict):
        msg = param_dict['Content']
        if u'拍照' in msg:
            param_dict['Content'] = u'请耐心等待拍照'
            self.queue.put(['image', param_dict['FromUserName']])
        elif u'视频' in msg:
            param_dict['Content'] = u'请耐心等待视频录制, 若想查看实时视频流(可能较卡), ' \
                                    u'请访问: http://pi.finaltheory.me'
            self.queue.put(['video', param_dict['FromUserName']])
        else:
            param_dict['Content'] = u'无法理解您的要求'
        return param_dict


if __name__ == '__main__':
    monitor = MonkeyMonitor()
    # 实例化自动回复类
    server = MonkeyServer('monitor')
    # 注册回调函数
    server.register_callback('text', monitor.reply_func)
    # 使用gevent启动服务器实例
    http_server = WSGIServer(('', 8000), server.app)
    try:
        http_server.serve_forever()
    except KeyboardInterrupt as e:
        sys.stderr.write(e.message + '\n')
        monitor.queue.put(None)
예제 #14
0
파일: start.py 프로젝트: fspot/zenfeed
def main():
    args = docopt(__doc__, version='zenfeed ' + VERSION)

    log_arg, log_level = args['--log'].rsplit(':', 1)
    if log_arg not in ('stderr', 'syslog'):
        setup_logger(type='file',
                     filename=path(log_arg).abspath(),
                     level=log_level)
    else:
        setup_logger(type=log_arg, level=log_level)

    logger.info('Zenfeed %s booting...', VERSION)

    if args['genstatic']:
        return genstatic(args['PATH'])

    port = int(args['--port'])

    cache_disabled = args['--no-cache']

    path_prefix = args['--prefix']
    if path_prefix.endswith('/'):
        path_prefix = path_prefix[:-1]
    if path_prefix and not path_prefix.startswith('/'):
        path_prefix = '/' + path_prefix

    fixed_language = args['--lang']
    if fixed_language == 'browser':
        fixed_language = None
    else:
        logger.info('Language fixed to "%s"', fixed_language)
        if (fixed_language not in LANGUAGES
                and fixed_language.split('_', 1)[0] not in LANGUAGES):
            return logger.critical('Fixed language not supported !')

    fixed_timezone = args['--tz']
    logger.info('Timezone fixed to "%s"', fixed_timezone)
    if fixed_timezone not in all_timezones:
        return logger.critical('Fixed timezone not supported !')

    db_uri = args['--database']
    if db_uri == ':memory:':
        db_uri = 'sqlite://'
    elif not "://" in db_uri:
        db_uri = 'sqlite:///%s' % path(db_uri).abspath()

    import app as app_module
    app = app_module.create_flask_app(prefix=path_prefix)
    app.config.update(
        DEBUG=args['--debug'],
        SQL_DEBUG=False,
        SECRET_KEY=urandom(32),
        SQLALCHEMY_DATABASE_URI=db_uri,
        FAVICON_DIR=path(args['--favicons']).abspath(),
        FIXED_LANGUAGE=fixed_language,
        FIXED_TIMEZONE=fixed_timezone,
        CACHE_ENABLED=not cache_disabled,
        PATH_PREFIX=path_prefix,
    )
    Cache(app)

    from models import setup_tables, Feed
    patch_socket()
    patch_ssl()
    setup_tables()

    from deadline_manager import deadlineManager
    import views
    from werkzeug.contrib.fixers import ProxyFix
    app.wsgi_app = ProxyFix(app.wsgi_app)

    feeds = Feed.query.all()
    deadlineManager.favicon_dir = path(args['--favicons']).abspath()
    deadlineManager.launch_deadline_workers(feeds)
    deadlineManager.start()

    logger.info("Server started at port %d (prefix: %s/)", port, path_prefix)
    if args['--debug']:
        logger.warning("DEBUG mode activated")
        app.run(host='0.0.0.0', port=port, debug=True)
    else:
        from gevent.wsgi import WSGIServer
        http_server = WSGIServer(('0.0.0.0', port), app)
        try:
            http_server.serve_forever()
        except KeyboardInterrupt:
            pass
예제 #15
0
    with open('resource/url.txt') as f:
        str_ = f.read()
    url_list = json.loads(str_)
    print('url_list len', len(url_list))
    return url_list


def page_url(page):
    n = 20
    page = int(page)
    url_list = url_array()
    url_list_split = [url_list[i:i + n] for i in range(0, len(url_list), n)]
    return url_list_split[page]


@app.route('/images', methods=['GET'])
def images():
    args = request.args
    page = args['page']
    p_url = page_url(page)
    return json.dumps(p_url)


@app.route(
    '/<path:fn>', )
def file(fn):
    return send_file(fn)


WSGIServer(('', 9393), app).serve_forever()
예제 #16
0

# Comment out for running locally
@app.route('/{0}'.format(UPLOAD_PATH), methods=['POST'])
def upload_result():

    data = request.files['data']
    if os.path.splitext(data.filename)[1] == '.png':
        data.save('static/' + data.filename)
    elif os.path.splitext(data.filename)[1] == '.txt':
        with open('backend/log/' + data.filename, 'a') as logfile:
            logfile.write(data.stream.read())
    return ''


# ----------


@app.route('/adv/')
def adv_mode():

    if 'advmode' in session: session.pop('advmode', None)
    else: session['advmode'] = '1'

    return redirect(url_for('index'))


if __name__ == "__main__":
    http_server = WSGIServer(('0.0.0.0', 8080), app)
    http_server.serve_forever()
예제 #17
0
# -*- coding: utf-8 -*-
__author__ = 'Administrator'
from gevent.wsgi import WSGIServer
from main_web import app

if __name__ == '__main__':
    http_server = WSGIServer(('', 8001), app)
    http_server.serve_forever()
예제 #18
0
            missing = missing

    if missing > 0:
        return False
    else:
        return True


@app.route('/api')
def api():
    if request.environ.get('wsgi.websocket'):
        ws = request.environ['wsgi.websocket']
        while True:
            email = ws.receive()

            if email in webSockets:
                webSockets[email].send("signOutNow")
            webSockets[email] = ws
    return "OK"


# last line adds the email to webSocket
# need something that checks if user online, something that adds to "webSockets" when login? removes from "webSockets?
# or do you want to use the users_loggedin table?

if __name__ == '__main__':
    #app.run(host='127.0.0.1', port=5001)
    app.debug = True
    http_server = WSGIServer(('', 5169), app, handler_class=WebSocketHandler)
    http_server.serve_forever()
예제 #19
0
파일: flask_sse.py 프로젝트: vnisor/cotl
    def gen():
        q = Queue()
        subscriptions.append(q)
        try:
            # while True:
            end = time.time() + 60
            while time.time() < end:
                result = q.get()
                print "result", result
                ev = ServerSentEvent(str(result))
                yield ev.encode()
                sleep(0.3)
                # Keep connection alive no more then... (s)
        except GeneratorExit:  # Or maybe use flask signals
            subscriptions.remove(q)

    return Response(gen(), mimetype="text/event-stream")


@app.route('/stream')
def stream():
    return Response(event_stream(), mimetype="text/event-stream")


if __name__ == "__main__":
    app.debug = False
    server = WSGIServer(("", 5001), app)
    server.serve_forever()
    # app.run(host='0.0.0.0',port=5001,debug=True)
    # Then visit http://localhost:5000 to subscribe
    # and send messages by visiting http://localhost:5000/publish
예제 #20
0
def main():
    port = int(os.getenv('FLASK_PROXY_PORT', 8080))
    server = WSGIServer(('', port), proxy, log=None)
    server.serve_forever()
예제 #21
0
def serve_forever(listener):
    WSGIServer(listener, application, spawn=Pool(), log=None).serve_forever()
예제 #22
0
from gevent.wsgi import WSGIServer
import ghdata

http_server = WSGIServer(('', 5001), ghdata.server.app)
http_server.serve_forever()
예제 #23
0
def main():  # pragma: no cover
    logger.info('Starting Server')
    http_server = WSGIServer(('0.0.0.0', 8080), app)
    http_server.serve_forever()
예제 #24
0
    autocomplete_results = es.search(
        index=ES_INDEX,
        body=build_autocomplete_search_body_request(query, category, field))

    return jsonify(
        {"results": format_autocomplete_results(autocomplete_results, field)})


# make static assets available
@app.route('/assets/<path:path>')
def send_static(path):
    return send_from_directory('build', path)


# render user interfaces in client JS
@app.route('/')
@app.route('/about')
@app.route('/help')
@app.route('/search')
def react_render():
    return render_template('index.jinja2')


if __name__ == '__main__':
    if os.environ.get('PRODUCTION', ''):
        http_server = WSGIServer(('', 5000), app)
        http_server.serve_forever()
    else:
        app.run(debug=True)
예제 #25
0
def startserver(adduser, api, auth, hydradoc, port, serve):
    """Python Hydrus CLI"""
    # The database connection URL
    # See http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#sqlalchemy.create_engine for more info
    # DB_URL = 'sqlite:///database.db'
    DB_URL = 'sqlite:///:memory:'

    # Define the server URL, this is what will be displayed on the Doc
    HYDRUS_SERVER_URL = "http://localhost:" + str(port) + "/"

    # The name of the API or the EntryPoint, the api will be at http://localhost/<API_NAME>
    API_NAME = api

    click.echo("Setting up the database")
    # Create a connection to the database you want to use
    engine = create_engine(DB_URL)

    click.echo("Creating models")
    # Add the required Models to the database
    Base.metadata.create_all(engine)

    # Define the Hydra API Documentation
    # NOTE: You can use your own API Documentation and create a HydraDoc object using doc_maker
    #       Or you may create your own HydraDoc Documentation using doc_writer [see hydrus/hydraspec/doc_writer_sample]
    click.echo("Creating the API Documentation")
    apidoc = doc_maker.create_doc(json.loads(hydradoc.read()),
                                  HYDRUS_SERVER_URL, API_NAME)

    # Start a session with the DB and create all classes needed by the APIDoc
    session = scoped_session(sessionmaker(bind=engine))

    click.echo("Adding Classes and Properties")
    # Get all the classes from the doc
    classes = doc_parse.get_classes(
        apidoc.generate()
    )  # You can also pass dictionary defined in hydrus/hydraspec/doc_writer_sample_output.py

    # Get all the properties from the classes
    properties = doc_parse.get_all_properties(classes)

    # Insert them into the database
    doc_parse.insert_classes(classes, session)
    doc_parse.insert_properties(properties, session)

    click.echo("Adding authorized users")
    add_user(id_=adduser[0], paraphrase=adduser[1], session=session)

    # Insert them into the database
    doc_parse.insert_classes(classes, session)
    doc_parse.insert_properties(properties, session)

    getter_setter = Getter_setter(session, HYDRUS_SERVER_URL, API_NAME, apidoc,
                                  True)

    print("Creating the application")
    # Create a Hydrus app with the API name you want, default will be "api"

    app = app_factory(API_NAME, getter_setter)
    # Set the name of the API

    print("Starting the application")

    http_server = WSGIServer(('', 8080), app)

    print("Server running at:")

    print(HYDRUS_SERVER_URL + API_NAME)

    try:
        http_server.serve_forever()
    except KeyboardInterrupt:
        pass
예제 #26
0
파일: bot.py 프로젝트: z64/disco
    def __init__(self, client, config=None):
        self.client = client
        self.config = config or BotConfig()

        # Shard manager
        self.shards = None

        # The context carries information about events in a threadlocal storage
        self.ctx = ThreadLocal()

        # The storage object acts as a dynamic contextual aware store
        self.storage = None
        if self.config.storage_enabled:
            self.storage = Storage(self.ctx,
                                   self.config.from_prefix('storage'))

        # If the manhole is enabled, add this bot as a local
        if self.client.config.manhole_enable:
            self.client.manhole_locals['bot'] = self

        # Setup HTTP server (Flask app) if enabled
        self.http = None
        if self.config.http_enabled:
            try:
                from flask import Flask
            except ImportError:
                self.log.warning(
                    'Failed to enable HTTP server, Flask is not installed')
            else:
                self.log.info('Starting HTTP server bound to %s:%s',
                              self.config.http_host, self.config.http_port)
                self.http = Flask('disco')
                self.http_server = WSGIServer(
                    (self.config.http_host, self.config.http_port), self.http)
                self.http_server_greenlet = gevent.spawn(
                    self.http_server.serve_forever)

        self.plugins = {}
        self.group_abbrev = {}

        # Only bind event listeners if we're going to parse commands
        if self.config.commands_enabled:
            self.client.events.on('MessageCreate', self.on_message_create)

            if self.config.commands_allow_edit:
                self.client.events.on('MessageUpdate', self.on_message_update)

        # If we have a level getter and its a string, try to load it
        if isinstance(self.config.commands_level_getter, six.string_types):
            mod, func = self.config.commands_level_getter.rsplit('.', 1)
            mod = importlib.import_module(mod)
            self.config.commands_level_getter = getattr(mod, func)

        # Stores the last message for every single channel
        self.last_message_cache = {}

        # Stores a giant regex matcher for all commands
        self.command_matches_re = None

        # Finally, load all the plugin modules that where passed with the config
        for plugin_mod in self.config.plugins:
            self.add_plugin_module(plugin_mod)

        # Convert level mapping
        for k, v in list(six.iteritems(self.config.levels)):
            self.config.levels[int(k) if k.isdigit(
            ) else k] = CommandLevels.get(v)
예제 #27
0
            context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_1)
        else:
            context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)

        if isfile(config.certificatePath) and isfile(config.privateKeyPath):
            context.load_cert_chain(config.certificatePath,
                                    config.privateKeyPath)
            return context
        else:
            flaskServer.displayIfFileNotFound(config.certificatePath)
            flaskServer.displayIfFileNotFound(config.privateKeyPath)
    return None


if __name__ == "__main__":
    case_database.initialize()
    ssl_context = get_ssl_context()
    try:
        port = int(config.port)
        host = config.host
        if ssl_context:
            server = WSGIServer((host, port),
                                application=flaskServer.app,
                                ssl_context=ssl_context)
        else:
            server = WSGIServer((host, port), application=flaskServer.app)
        print('Listening on host ' + host + ' and port ' + str(port) + '...')
        server.serve_forever()
    except ValueError:
        print('Invalid port {0}. Port must be an integer'.format(config.port))
예제 #28
0
def run_app(app, port=5000):
    http_server = WSGIServer(('', port), app)
    webbrowser.open_new('http://localhost:' + str(port))
    http_server.serve_forever()
예제 #29
0
        return jsonify(current_app.data_router.get_status())

    @rasa_nlu_app.route("/", methods=['GET'])
    def hello():
        return "hello from Rasa NLU: " + __version__

    @rasa_nlu_app.route("/train", methods=['POST'])
    @requires_auth
    def train():
        data_string = request.get_data(as_text=True)
        current_app.data_router.start_train_process(data_string, request.args)
        return jsonify(info="training started. Current pids: {}".format(current_app.data_router.train_procs))

    logging.basicConfig(filename=config['log_file'], level=config['log_level'])
    logging.captureWarnings(True)
    logging.info("Configuration: " + config.view())

    logging.debug("Creating a new data router")
    rasa_nlu_app.data_router = DataRouter(config, component_builder)
    return rasa_nlu_app


if __name__ == '__main__':
    # Running as standalone python application
    arg_parser = create_argparser()
    cmdline_args = {key: val for key, val in list(vars(arg_parser.parse_args()).items()) if val is not None}
    rasa_nlu_config = RasaNLUConfig(cmdline_args.get("config"), os.environ, cmdline_args)
    app = WSGIServer(('0.0.0.0', rasa_nlu_config['port']), create_app(rasa_nlu_config))
    logging.info('Started http server on port %s' % rasa_nlu_config['port'])
    app.serve_forever()
예제 #30
0
def main(args):
    # Executing this file with no extra options runs the simple service with the bidaf test fixture
    # and the machine-comprehension predictor. There's no good reason you'd want
    # to do this, except possibly to test changes to the stock HTML).

    parser = argparse.ArgumentParser(description='Serve up a simple model')

    parser.add_argument('--archive-path',
                        type=str,
                        help='path to trained archive file')
    parser.add_argument('--predictor', type=str, help='name of predictor')
    parser.add_argument('--static-dir',
                        type=str,
                        help='serve index.html from this directory')
    parser.add_argument('--title',
                        type=str,
                        help='change the default page title',
                        default="QA Chatbot")
    parser.add_argument('--field-name',
                        type=str,
                        action='append',
                        help='field names to include in the demo')

    parser.add_argument('--include-package',
                        type=str,
                        action='append',
                        default=[],
                        help='additional packages to include')

    args = parser.parse_args(args)

    # Load modules
    for package_name in args.include_package:
        import_submodules(package_name)

    # trained_models =  Dict[str, DemoModel]
    # print(trained_models)
    # predictors = {}
    # for name, demo_model in trained_models.items():
    #     predictor = demo_model.predictor()
    #     predictors[name] = predictor
    #
    # model = predictors.get(model_name.lower())

    archive = load_archive(
        args.archive_path or
        'tests/fixtures/bidaf/serialization/bidaf-model-2017.09.15-charpad.tar.gz'
    )
    global predictor
    predictor = Predictor.from_archive(
        archive, args.predictor or 'machine-comprehension')

    # field_names = args.field_name or ['passage', 'question']
    field_names = args.field_name or ['passage']

    app = make_app(predictor=predictor,
                   field_names=field_names,
                   static_dir=args.static_dir,
                   title=args.title)

    http_server = WSGIServer(('0.0.0.0', 8000), app)
    http_server.serve_forever()