Source code for utool.util_web
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
from utool import util_inject
print, rrr, profile = util_inject.inject2(__name__)
[docs]def is_local_port_open(port):
"""
Args:
port (int):
Returns:
bool:
References:
http://stackoverflow.com/questions/7436801/identifying-listening-ports-using-python
CommandLine:
python -m utool.util_web is_local_port_open --show
Example:
>>> # DISABLE_DOCTEST
>>> from utool.util_web import * # NOQA
>>> port = 32183
>>> assert is_local_port_open(80) is False, 'port 80 should always be closed'
>>> assert is_local_port_open(port) is True, 'maybe this port is actually used?'
"""
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('127.0.0.1', port))
s.close()
return result != 0
[docs]def find_open_port(base=5000):
port = base
while not is_local_port_open(port):
port += 1
return port
[docs]def get_localhost():
import socket
try:
return socket.gethostbyname(socket.gethostname())
except socket.gaierror:
return '127.0.0.1'
def _testping():
r"""
CommandLine:
python -m utool.util_web --exec-_testping
Example:
>>> # DISABLE_DOCTEST
>>> from utool.util_web import * # NOQA
>>> result = _testping()
>>> print(result)
"""
import requests
url = 'http://%s:%s' % (get_localhost(), 5832)
requests.post(url, data={'hello': 'world'})
[docs]def start_simple_webserver(domain=None, port=5832):
r"""
simple webserver that echos its arguments
Args:
domain (None): (default = None)
port (int): (default = 5832)
CommandLine:
python -m utool.util_web --exec-start_simple_webserver:0
python -m utool.util_web --exec-start_simple_webserver:1
Example:
>>> # DISABLE_DOCTEST
>>> from utool.util_web import * # NOQA
>>> domain = None
>>> port = 5832
>>> result = start_simple_webserver(domain, port)
>>> print(result)
"""
import tornado.ioloop
import tornado.web
import tornado.httpserver
import tornado.wsgi
import flask
app = flask.Flask('__simple__')
@app.route('/', methods=['GET', 'POST', 'DELETE', 'PUT'])
def echo_args(*args, **kwargs):
from flask import request
print('Simple server was pinged')
print('args = %r' % (args,))
print('kwargs = %r' % (kwargs,))
print('request.args = %r' % (request.args,))
print('request.form = %r' % (request.form,))
return ''
if domain is None:
domain = get_localhost()
app.server_domain = domain
app.server_port = port
app.server_url = 'http://%s:%s' % (app.server_domain, app.server_port)
print('app.server_url = %s' % (app.server_url,))
http_server = tornado.httpserver.HTTPServer(tornado.wsgi.WSGIContainer(app))
http_server.listen(app.server_port)
tornado.ioloop.IOLoop.instance().start()
[docs]def render_html(html_str):
"""
makes a temporary html rendering
"""
import utool as ut
from os.path import abspath
import webbrowser
try:
html_str = html_str.decode('utf8')
except Exception:
pass
html_dpath = ut.ensure_app_resource_dir('utool', 'temp_html')
fpath = abspath(ut.unixjoin(html_dpath, 'temp.html'))
url = 'file://' + fpath
ut.writeto(fpath, html_str)
webbrowser.open(url)
if __name__ == '__main__':
r"""
CommandLine:
python -m utool.util_web
python -m utool.util_web --allexamples
"""
import multiprocessing
multiprocessing.freeze_support() # for win32
import utool as ut # NOQA
ut.doctest_funcs()