Skip to content

Commit

Permalink
Add command line argument handling, fixes #4
Browse files Browse the repository at this point in the history
  • Loading branch information
witchard committed Sep 22, 2017
1 parent 12929fe commit 5833869
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
29 changes: 26 additions & 3 deletions grole.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import mimetypes
import pathlib
import html
import sys
import argparse
from collections import defaultdict

__author__ = 'witchard'
Expand Down Expand Up @@ -399,8 +401,29 @@ def run(self, host='localhost', port=1234):
loop.run_until_complete(server.wait_closed())
loop.close()

def parse_args(args=sys.argv[1:]):
"""
Parse command line arguments for Grole server running as static file server
"""
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--address', help='address to listen on, default localhost',
default='localhost')
parser.add_argument('-p', '--port', help='port to listen on, default 1234',
default=1234, type=int)
parser.add_argument('-d', '--directory', help='directory to serve, default .',
default='.')
parser.add_argument('-n', '--noindex', help='do not show directory indexes',
default=False, action='store_true')
return parser.parse_args(args)

def main(args=sys.argv[1:]):
"""
Run Grole static file server
"""
args = parse_args(args)
app = Grole()
serve_static(app, '', args.directory, not args.noindex)
app.run(args.address, args.port)

if __name__ == '__main__':
app = Grole()
serve_static(app, '', '.', True)
app.run()
main()
20 changes: 20 additions & 0 deletions test/test_args.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import unittest

import grole

class TestArgs(unittest.TestCase):

def test_defaults(self):
args = grole.parse_args([])
self.assertEqual(args.address, 'localhost')
self.assertEqual(args.port, 1234)
self.assertEqual(args.directory, '.')
self.assertEqual(args.noindex, False)

def test_override(self):
args = grole.parse_args(['-a', 'foo', '-p', '27', '-d', 'bar', '-n'])
self.assertEqual(args.address, 'foo')
self.assertEqual(args.port, 27)
self.assertEqual(args.directory, 'bar')
self.assertEqual(args.noindex, True)

12 changes: 11 additions & 1 deletion test/test_serve.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ def hello(env, req):

app.run()


class TestServe(unittest.TestCase):

def test_simple(self):
Expand All @@ -27,3 +26,14 @@ def test_simple(self):
html = response.read()
self.assertEqual(html, b'Hello, World!')
p.terminate()

def test_fileserver(self):
p = multiprocessing.Process(target=grole.main, args=[[]])
p.start()
time.sleep(0.1)
with urllib.request.urlopen('http://localhost:1234/test/test.dat') as response:
html = response.read()
self.assertEqual(html, b'foo\n')
p.terminate()


0 comments on commit 5833869

Please sign in to comment.