182 lines
5.1 KiB
Python
Raw Permalink Normal View History

2021-10-25 20:04:55 +01:00
# -*- python -*-
# -*- coding: utf-8 -*-
#
# This file is part of the easydev software
#
# Copyright (c) 2011-2017
#
# File author(s): Thomas Cokelaer <cokelaer@gmail.com>
#
# Distributed under the GPLv3 License.
# See accompanying file LICENSE.txt or copy at
# http://www.gnu.org/licenses/gpl-3.0.html
#
# Website: https://github.com/cokelaer/easydev
# Documentation: http://easydev-python.readthedocs.io
#
##############################################################################
"""Universal browser
This module provides a browser in 2 flavours: as a program to use in a Terminal,
or as a Python function that can be used in other software. The underlying code is based on the standard python module :mod:`webbrowser`. With webbrowser module itself, you can already open a URL as follows in a command line interface::
python -m webbrowser -t "http://www.python.org"
However, with **browse**, you can simply type::
browse http://www.python.org
It does not seem to be a big improvments but it is a bit more flexible. First,
there is no need to enter "http://" : it will be added if missing and if this is not a local file.::
browse docs.python.org
browse http://docs.python.org --verbose
Similarly, you can open an image (it uses the default image viewer)::
browse image.png
Or a txt file (or any document provided there is a default executable
to open it). It works like a charm under Linux. Under MAC, it uses the **open**
command so this should also work.
When invoking **browse**, under MacOSX, it actually tries to call **open**
first and then calls webbrowser, if unsuccessful only. Note tested under
Windows but uses webbrowser is used and works for open HTML document and URLs.
You can also look at a directory (starts nautilus under Fedora)::
browse ~/Pictures
See more examples below.
The interest of **browse** is that it can also be used programmatically::
from easydev.browser import browse
# open an image with the default image viewer:
browse("image.png")
# or a web page
browse("http://www.uniprot.org")
There is also an alias **onweb**::
from easydev import onweb
"""
import os
import sys, webbrowser
from optparse import OptionParser
import argparse
def browse(url, verbose=True):
from sys import platform as _platform
if _platform == "linux" or _platform == "linux2":
_browse_linux(url, verbose=True)
elif _platform == "darwin": # pragma: no cover
# under Mac, it looks like the standard webbrowser may not work as smoothly
# OS X
_browse_mac(url, verbose)
elif _platform == "win32": # pragma: no cover
# for windows and others, the same code as Linux should work
_browse_linux(url, verbose=True)
else:
_browse_linux(url, verbose=True) # pragma: no cover
def _browse_mac(url, verbose=True): # pragma: no cover
if verbose:
print("openning %s" % url)
import os
try:
os.system("open /Applications/Safari.app {}".format(url))
return
except:
pass
try:
os.system("open /Applications/Safari.app {}".format("http://" + url))
return
except:
pass
try:
webbrowser.open_new(url)
except:
if verbose:
print("Could not open %s. Trying to append http://" % url)
try:
webbrowser.open_new("open http://{}".format(url))
except:
print("Could not open http://%s" % url)
raise Exception
def _browse_linux(url, verbose=True): # pragma: no cover
if verbose:
print("openning %s" % url)
try:
webbrowser.open(url)
return
except:
pass
try:
if verbose:
print("Could not open %s" % url)
webbrowser.open("http://" + url)
return
except:
pass
raise Exception("Could not open http://{}".format(url))
def main(args=None): # pragma: no cover
if args is None:
args = sys.argv[:]
# check for verbosity
if "--verbose" in args:
verbose = True
args.remove("--verbose")
print(args)
else:
verbose = False
if "--help" in args or len(args) == 1:
print("Browse, a simple command line browser")
print("Author: Thomas Cokelaer, (c) 2012.")
print("USAGE\n\tbrowse http://docs.python.org ")
print("\tbrowse http://docs.python.org --verbose")
print("\tbrowse localfile.html")
print("\tbrowse local_directory (Linux only ?)")
return
url = args[1]
if os.path.exists(url):
if verbose:
print("%s is local file. Trying to open it.\n" % url)
browse(url, verbose)
else:
if verbose:
print("%s seems to be a web address. Trying to open it.\n" % url)
if url.startswith("http"):
browse(url, verbose)
else:
if verbose:
print(
"%s does not exists and does not starts with http, trying anyway."
% url
)
browse("http://" + url, verbose)
if __name__ == "__main__": # pragma: no cover
import sys
main(sys.argv)