Completed
Push — master ( d23ecc...8328e5 )
by Felipe A.
47s
created

browsepy.ArgParse._directory()   B

Complexity

Conditions 5

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 5
dl 0
loc 8
rs 8.5454
1
#!/usr/bin/env python2
2
# -*- coding: utf-8 -*-
3
4
import sys
5
import os
6
import os.path
7
import argparse
8
import flask
9
10
from . import app, plugin_manager
11
from .compat import PY_LEGACY
12
13
14
class ArgParse(argparse.ArgumentParser):
15
    default_directory = os.path.abspath(os.getcwd())
16
    default_host = os.getenv('BROWSEPY_HOST', '127.0.0.1')
17
    default_port = os.getenv('BROWSEPY_PORT', '8080')
18
19
    description = 'extendable web filre browser'
20
21
    def __init__(self):
22
        super(ArgParse, self).__init__(description = self.description)
23
24
        self.add_argument('host', nargs='?',
25
                          default=self.default_host,
26
                          help='address to listen (default: %s)' % self.default_host)
27
        self.add_argument('port', nargs='?', type=int,
28
                          default=self.default_port,
29
                          help='port to listen (default: %s)' % self.default_port)
30
        self.add_argument('--directory', metavar='PATH', type=self._directory,
31
                          default=self.default_directory,
32
                          help='base serving directory (default: current path)')
33
        self.add_argument('--initial', metavar='PATH', type=self._directory,
34
                          help='initial directory (default: same as --directory)')
35
        self.add_argument('--removable', metavar='PATH', type=self._directory,
36
                          default=None,
37
                          help='base directory for remove (default: none)')
38
        self.add_argument('--upload', metavar='PATH', type=self._directory,
39
                          default=None,
40
                          help='base directory for upload (default: none)')
41
        self.add_argument('--plugin', metavar='PLUGIN_LIST', type=self._plugins,
42
                          default=[],
43
                          help='comma-separated list of plugins')
44
        self.add_argument('--debug', action='store_true', help='debug mode')
45
46
    def _plugins(self, arg):
47
        if not arg:
48
            return []
49
        return arg.split(',')
50
51
    def _directory(self, arg):
52
        if not arg:
53
            return None
54
        if PY_LEGACY and hasattr(sys.stdin, 'encoding'):
55
            arg = arg.decode(sys.stdin.encoding)
56
        if os.path.isdir(arg):
57
            return os.path.abspath(arg)
58
        self.error('%s is not a valid directory' % arg)
59
60
def main(argv=sys.argv[1:], app=app, parser=ArgParse, run_fnc=flask.Flask.run):
61
    args = parser().parse_args(argv)
62
    app.config.update(
63
        directory_base = args.directory,
64
        directory_start = args.initial or args.directory,
65
        directory_remove = args.removable,
66
        directory_upload = args.upload,
67
        plugin_modules = args.plugin
68
        )
69
    plugin_manager.reload()
70
    run_fnc(
71
        app,
72
        host=args.host,
73
        port=args.port,
74
        debug=args.debug,
75
        use_reloader=False,
76
        threaded=True
77
        )
78
79
if __name__ == '__main__':
80
    main()
81