Completed
Push — master ( c18a49...b09083 )
by Felipe A.
53s
created

browsepy.main()   A

Complexity

Conditions 1

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 16
rs 9.4286
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
11
12
13
class ArgParse(argparse.ArgumentParser):
14
    def __init__(self):
15
        super(ArgParse, self).__init__(
16
            description = 'Web file browser'
17
        )
18
        cwd = os.path.abspath(os.getcwd())
19
        host = os.getenv('BROWSEPY_HOST', '127.0.0.1')
20
        port = os.getenv('BROWSEPY_PORT', '8080')
21
        self.add_argument('host', nargs='?',
22
                          default=host,
23
                          help='address to listen (default: %s)' % host)
24
        self.add_argument('port', nargs='?', type=int,
25
                          default=port,
26
                          help='port to listen (default: %s)' % port)
27
        self.add_argument('--directory', metavar='PATH', type=self._directory,
28
                          default=cwd,
29
                          help='base serving directory (default: current path)')
30
        self.add_argument('--initial', metavar='PATH', type=self._directory,
31
                          help='initial directory (default: same as --directory)')
32
        self.add_argument('--removable', metavar='PATH', type=self._directory,
33
                          default=None,
34
                          help='base directory for remove (default: none)')
35
        self.add_argument('--upload', metavar='PATH', type=self._directory,
36
                          default=None,
37
                          help='base directory for upload (default: none)')
38
        self.add_argument('--plugin', metavar='PLUGIN_LIST', type=self._plugins,
39
                          default=[],
40
                          help='comma-separated list of plugins')
41
        self.add_argument('--debug', action='store_true', help='debug mode')
42
43
    def _plugins(self, arg):
44
        if not arg:
45
            return []
46
        return arg.split(',')
47
48
    def _directory(self, arg):
49
        if not arg:
50
            return None
51
        if os.path.isdir(arg):
52
            return os.path.abspath(arg)
53
        self.error('%s is not a valid directory' % arg)
54
55
def main(argv=sys.argv[1:], app=app, parser=ArgParse, run_fnc=flask.Flask.run):
56
    args = parser().parse_args(argv)
57
    app.config.update(
58
        directory_base = args.directory,
59
        directory_start = args.initial or args.directory,
60
        directory_remove = args.removable,
61
        directory_upload = args.upload,
62
        plugin_modules = args.plugin
63
        )
64
    run_fnc(
65
        app,
66
        host=args.host,
67
        port=args.port,
68
        debug=args.debug,
69
        use_reloader=False,
70
        threaded=True
71
        )
72
73
if __name__ == '__main__':
74
    main()
75