Improve help. Add missing dependencies

This commit is contained in:
Luke Murphy 2019-10-07 19:19:12 +02:00
parent fa9acea169
commit 0e940df399
No known key found for this signature in database
GPG Key ID: 5E2EF5A63E3718CC
20 changed files with 67 additions and 49 deletions

View File

@ -27,9 +27,15 @@ After installing etherpump on the Varia server, we collectively decided to not w
Change log / notes
==================
**October 2019**
Improve `etherpump --help` handling to make it easier for new users.
Added the `python-dateutil` and `pypandoc` dependencies
**September 2019**
Forking *etherpump* into *etherpump*. (Work in progress!)
Forking *etherpump* into *etherpump*.
<https://git.vvvvvvaria.org/varia/etherpump>

View File

@ -2,6 +2,7 @@
import os
import sys
from importlib import import_module
from pathlib import Path
from etherpump import __VERSION__
@ -9,14 +10,23 @@ from etherpump import __VERSION__
def subcommands():
"""List all sub-commands for the `--help` output."""
not_sub_commands = ['common.py', 'appendmeta.py', 'html5tidy.py', 'join.py']
subcommands = []
all_files = os.listdir(Path().absolute() / 'etherpump' / 'commands')
modules = filter(lambda file: not file.startswith('__'), all_files)
modules = filter(
lambda file: not file.startswith('__')
and not any(file == module for module in not_sub_commands),
all_files,
)
for module in modules:
name = module.split('.py')[0]
subcommands.append(f' {name}')
try:
doc = import_module(f'etherpump.commands.{name}').__doc__
except ModuleNotFoundError:
doc = ""
subcommands.append(f' {name}: {doc}')
subcommands.sort()

View File

@ -1,8 +1,6 @@
#!/usr/bin/env python
import json
import os
from argparse import ArgumentParser

View File

@ -1,3 +1,5 @@
"""Calls the createDiffHTML API function for the given padid"""
import json
from argparse import ArgumentParser
from urllib.error import HTTPError, URLError

View File

@ -1,3 +1,5 @@
"""Calls the getText API function for the given padid"""
import json
from argparse import ArgumentParser
from urllib.error import HTTPError, URLError

View File

@ -1,3 +1,5 @@
"""Dumps a CSV of all pads"""
import json
import re
import sys

View File

@ -1,3 +1,5 @@
"""Calls the getHTML API function for the given padid"""
import json
from argparse import ArgumentParser
from urllib.error import HTTPError, URLError

View File

@ -1,3 +1,5 @@
"""Calls the getText API function for the given padid"""
import json
import sys
from argparse import ArgumentParser

View File

@ -1,3 +1,5 @@
"""Generate pages from etherpumps using a template"""
import json
import os
import re
@ -5,14 +7,12 @@ import sys
import time
from argparse import ArgumentParser
from datetime import datetime
from time import sleep
from urllib.parse import quote, urlencode, urlparse, urlunparse
from urllib.request import HTTPError, URLError, urlopen
from urllib.parse import urlparse, urlunparse
from jinja2 import Environment, FileSystemLoader
import dateutil.parser
from etherpump.commands.common import *
from etherpump.commands.common import * # noqa
"""
@ -39,10 +39,6 @@ def group(items, key=lambda x: x):
return ret
# def base (x):
# return re.sub(r"(\.raw\.html)|(\.diff\.html)|(\.meta\.json)|(\.raw\.txt)$", "", x)
def splitextlong(x):
""" split "long" extensions, i.e. foo.bar.baz => ('foo', '.bar.baz') """
m = re.search(r"^(.*?)(\..*)$", x)

View File

@ -1,3 +1,5 @@
"""Initialize an etherpump folder"""
import json
import os
import sys
@ -11,7 +13,6 @@ def get_api(url, cmd=None, data=None, verbose=False):
useurl = url + cmd
if data:
useurl += "?" + urlencode(data)
# data['apikey'] = "7c8faa070c97f83d8f705c935a32d5141f89cbaa2158042fa92e8ddad5dbc5e1"
if verbose:
print("trying", useurl, file=sys.stderr)
resp = urlopen(useurl).read()
@ -29,10 +30,6 @@ def get_api(url, cmd=None, data=None, verbose=False):
if e.code == 401:
# Unauthorized is how the API responds to an incorrect API key
return {"code": 401, "message": e}
# resp = json.load(e)
# if "code" in resp and "message" in resp:
# # print ("returning", resp, file=sys.stderr)
# return resp
def tryapiurl(url, verbose=False):
@ -58,8 +55,6 @@ def tryapiurl(url, verbose=False):
apiurl = urlunparse((scheme, netloc, path, params, query, fragment))
if get_api(apiurl, "listAllPads", verbose=verbose):
return apiurl
# except ValueError as e:
# print ("ValueError", e, file=sys.stderr)
except URLError as e:
print("URLError", e, file=sys.stderr)

View File

@ -1,3 +1,5 @@
"""Call listAllPads and print the results"""
import json
import sys
from argparse import ArgumentParser

View File

@ -1,6 +1,7 @@
"""Call listAuthorsOfPad for the padid"""
import json
from argparse import ArgumentParser
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import urlopen

View File

@ -1,3 +1,5 @@
"""Generate a single document from etherpumps using a template"""
import json
import os
import re
@ -5,15 +7,13 @@ import sys
import time
from argparse import ArgumentParser
from datetime import datetime
from time import sleep
from urllib.parse import quote, urlencode, urlparse, urlunparse
from urllib.request import HTTPError, URLError, urlopen
from urllib.parse import urlparse, urlunparse
from jinja2 import Environment, FileSystemLoader
import dateutil.parser
import pypandoc
from etherpump.commands.common import *
from etherpump.commands.common import * # noqa
"""

View File

@ -1,3 +1,5 @@
"""Check for pads that have changed since last sync (according to .meta.json)"""
import json
import os
import re
@ -7,12 +9,12 @@ from datetime import datetime
from fnmatch import fnmatch
from time import sleep
from urllib.parse import quote, urlencode
from urllib.request import HTTPError, URLError, urlopen
from urllib.request import HTTPError
from xml.etree import ElementTree as ET
import html5lib
from etherpump.commands.common import *
from etherpump.commands.common import * # noqa
from etherpump.commands.html5tidy import html5tidy
@ -20,12 +22,8 @@ from etherpump.commands.html5tidy import html5tidy
pull(meta):
Update meta data files for those that have changed.
Check for changed pads by looking at revisions & comparing to existing
todo...
use/prefer public interfaces ? (export functions)
"""
@ -33,7 +31,7 @@ def try_deleting(files):
for f in files:
try:
os.remove(f)
except OSError as e:
except OSError:
pass

View File

@ -1,3 +1,5 @@
"""Call getRevisionsCount for the given padid"""
import json
from argparse import ArgumentParser
from urllib.error import HTTPError, URLError

View File

@ -1,7 +1,8 @@
"""Calls the setHTML API function for the given padid"""
import json
import sys
from argparse import ArgumentParser
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import urlopen

View File

@ -1,8 +1,10 @@
"""Calls the getText API function for the given padid"""
import json
import sys
from argparse import ArgumentParser
from urllib.parse import quote, urlencode
from urllib.request import HTTPError, URLError, urlopen
from urllib.parse import urlencode
from urllib.request import urlopen
import requests

View File

@ -1,9 +1,11 @@
"""Extract and output selected fields of metadata"""
import json
import re
import sys
from argparse import ArgumentParser
from .common import *
from .common import * # noqa
"""

View File

@ -1,15 +1,10 @@
import json
import os
import re
import sys
from argparse import ArgumentParser
from datetime import datetime
from math import ceil, floor
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import urlopen
"""Update meta data files for those that have changed"""
from .common import *
import os
from argparse import ArgumentParser
from urllib.parse import urlencode
from .common import * # noqa
"""
@ -22,7 +17,7 @@ design decisions...
ok based on the fact that only the txt file is pushable (via setText)
it makes sense to give this file "primacy" ... ie to put the other forms
(html, diff.html) in a special place (if created at all). Otherwise this
complicates the "syncing" idea....
complicates the "syncing" idea....
"""

View File

@ -42,7 +42,7 @@ setup(
description='Etherpump: pumping text from etherpads into publications',
long_description=long_description,
long_description_content_type='text/markdown',
install_requires=["html5lib", "jinja2"],
install_requires=["html5lib", "jinja2", "python-dateutil", "pypandoc"],
classifiers=[
'Programming Language :: Python :: 3',
'Environment :: Console',