From 8fa531bbcd6f48ce561578b4971222b0c2bbe82e Mon Sep 17 00:00:00 2001 From: Daniel Jewell <23286051+danieldjewell@users.noreply.github.com> Date: Tue, 1 Oct 2019 19:29:00 -0700 Subject: [PATCH] Fix path issues w/setup.py One cannot assume that /etc is writable in setup.py as doing so breaks installs w/o root permissions; moved config to user only, copy sample config file to config directory if it doesn't exist; update config to provide suggestions for additional languages; Also, change default URL to use TLS/HTTPS --- conf/wikicurses.conf.dist | 28 ++++++++++++++++ wikicurses.1 => docs/wikicurses.1 | 0 wikicurses.conf.5 => docs/wikicurses.conf.5 | 0 setup.py | 37 ++++++++++++++++----- wikicurses.conf | 16 --------- wikicurses/settings.py | 17 ++++++++-- _wikicurses => zsh/_wikicurses | 0 7 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 conf/wikicurses.conf.dist rename wikicurses.1 => docs/wikicurses.1 (100%) rename wikicurses.conf.5 => docs/wikicurses.conf.5 (100%) delete mode 100644 wikicurses.conf rename _wikicurses => zsh/_wikicurses (100%) diff --git a/conf/wikicurses.conf.dist b/conf/wikicurses.conf.dist new file mode 100644 index 0000000..a2d5c34 --- /dev/null +++ b/conf/wikicurses.conf.dist @@ -0,0 +1,28 @@ +### +# Wikicurses configuration +# This file will automatically be copied to the user configuration path on first run +# User configuration stored in ~/.config/wikicurses/config (i.e. $HOME/.config/wikicurses/config) + +[general] +default = Wikipedia_EN +mouse = False +hide_references = False + +[keymap] +q = quit +c = contents +o = open +h = back +l = forward +left = back +right = forward + +[Wikipedia_EN] +url = https://en.wikipedia.org/w/api.php + +[Wiktionary_EN] +url = https://en.wiktionary.org/w/api.php + +# Additional Languages +# [Wikipedia_DE] +# url = https://de.wikipdia.org/w/api.php diff --git a/wikicurses.1 b/docs/wikicurses.1 similarity index 100% rename from wikicurses.1 rename to docs/wikicurses.1 diff --git a/wikicurses.conf.5 b/docs/wikicurses.conf.5 similarity index 100% rename from wikicurses.conf.5 rename to docs/wikicurses.conf.5 diff --git a/setup.py b/setup.py index 5a485a9..2aab5af 100644 --- a/setup.py +++ b/setup.py @@ -1,21 +1,42 @@ -#!/usr/bin/env python3 + #!/usr/bin/env python3 from setuptools import setup +import os.path +import sys +import warnings + +# Changed paths to remove absolutes + +files_spec = [ + ('share/wikicurses', ['conf/wikicurses.conf.dist']), + ('share/zsh/site-functions', ['zsh/_wikicurses']), + ('share/man/man1', ['docs/wikicurses.1']), + ('share/man/man5', ['docs/wikicurses.conf.5']) + ] + +# Loop through and make the install relative to where we are now +# Concept from github:ytdl-org/youtube-dl/setup.py +root = os.path.dirname(os.path.abspath(__file__)) +data_files = [] +for dirname, files in files_spec: + resfiles = [] + for fn in files: + if not os.path.exists(fn): + warnings.warn('Skipping file %s since it is not present. Type make to build all automatically generated files.' % fn) + else: + resfiles.append(fn) + data_files.append((dirname, resfiles)) + setup(name='Wikicurses', - version='1.4', + version='1.4.1', description='A simple curses interface for accessing Wikipedia.', author='Ian D. Scott', author_email='ian@perebruin.com', license = "MIT", url='http://github.com/ids1024/wikicurses/', packages = ['wikicurses'], - data_files=[ - ('/etc', ['wikicurses.conf']), - ('/usr/share/man/man1', ['wikicurses.1']), - ('/usr/share/man/man5', ['wikicurses.conf.5']), - ('/usr/share/zsh/site-functions', ['_wikicurses']) - ], + data_files=data_files, entry_points={'console_scripts': ['wikicurses = wikicurses.main:main']}, install_requires = ['beautifulsoup4', 'lxml', 'urwid'], classifiers=[ diff --git a/wikicurses.conf b/wikicurses.conf deleted file mode 100644 index 9c6c432..0000000 --- a/wikicurses.conf +++ /dev/null @@ -1,16 +0,0 @@ -[general] -default = Wikipedia -mouse = False -hide_references = False - -[keymap] -q = quit -c = contents -o = open -h = back -l = forward -left = back -right = forward - -[Wikipedia] -url = http://en.wikipedia.org/w/api.php diff --git a/wikicurses/settings.py b/wikicurses/settings.py index f038688..74493c1 100644 --- a/wikicurses/settings.py +++ b/wikicurses/settings.py @@ -1,16 +1,29 @@ +import sys import os import json import collections import configparser +import shutil from wikicurses import formats from urllib.parse import urlparse -default_configdir = os.environ['HOME'] + '/.config' +# TODO: This may cause issues with python 2.7; however, as of 01OCT2019, it is nearing sunset +default_configdir = os.path.expanduser('~') + '/.config' configpath = os.environ.get( 'XDG_CONFIG_HOME', default_configdir) + '/wikicurses' +configfile = os.path.join(configpath, "config") + +os.makedirs(configpath, exist_ok=True) + +if not os.path.isfile(configfile): + # Copy the default config file + current_run_path = os.path.dirname(os.path.realpath(sys.argv[0])) + default_config = os.path.normpath(os.path.join(current_run_path, "../share/wikicurses/wikicurses.conf.dist")) + shutil.copyfile(default_config, configfile) + conf = configparser.ConfigParser() -conf.read(['/etc/wikicurses.conf', configpath + '/config']) +conf.read(configpath + '/config') try: mouse = conf.getboolean('general', 'mouse') diff --git a/_wikicurses b/zsh/_wikicurses similarity index 100% rename from _wikicurses rename to zsh/_wikicurses