Skip to content

Commit

Permalink
Move option into Option.parse.
Browse files Browse the repository at this point in the history
  • Loading branch information
keleshev committed Jun 3, 2012
1 parent f35a6a9 commit 9943f4c
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 37 deletions.
36 changes: 18 additions & 18 deletions docopt.py
Expand Up @@ -152,6 +152,23 @@ def __init__(self, short=None, long=None, argcount=0, value=False):
self.short, self.long = short, long
self.argcount, self.value = argcount, value

@classmethod
def parse(class_, option_description):
short, long, argcount, value = None, None, 0, False
options, _, description = option_description.strip().partition(' ')
options = options.replace(',', ' ').replace('=', ' ')
for s in options.split():
if s.startswith('--'):
long = s
elif s.startswith('-'):
short = s
else:
argcount = 1
if argcount:
matched = re.findall('\[default: (.*)\]', description, flags=re.I)
value = matched[0] if matched else False
return class_(short, long, argcount, value)

def match(self, left, collected=None):
collected = [] if collected is None else collected
left_ = []
Expand Down Expand Up @@ -238,23 +255,6 @@ def match(self, left, collected=None):
return False, left, collected


def option(option_description):
short, long, argcount, value = None, None, 0, False
options, _, description = option_description.strip().partition(' ')
options = options.replace(',', ' ').replace('=', ' ')
for s in options.split():
if s.startswith('--'):
long = s
elif s.startswith('-'):
short = s
else:
argcount = 1
if argcount:
matched = re.findall('\[default: (.*)\]', description, flags=re.I)
value = matched[0] if matched else False
return Option(short, long, argcount, value)


class TokenStream(object):

def __init__(self, source, error):
Expand Down Expand Up @@ -409,7 +409,7 @@ def parse_args(source, options):


def parse_doc_options(doc):
return [option('-' + s) for s in re.split('^ *-|\n *-', doc)[1:]]
return [Option.parse('-' + s) for s in re.split('^ *-|\n *-', doc)[1:]]


def printable_usage(doc):
Expand Down
38 changes: 19 additions & 19 deletions test_docopt.py
Expand Up @@ -3,7 +3,7 @@
Option, Argument, Command,
Required, Optional, Either, OneOrMore, AnyOptions,
parse_args, parse_pattern,
parse_doc_options, option, printable_usage, formal_usage
parse_doc_options, printable_usage, formal_usage
)
from pytest import raises

Expand All @@ -15,32 +15,32 @@ def test_pattern_flat():


def test_option():
assert option('-h') == Option('-h', None)
assert option('--help') == Option(None, '--help')
assert option('-h --help') == Option('-h', '--help')
assert option('-h, --help') == Option('-h', '--help')
assert Option.parse('-h') == Option('-h', None)
assert Option.parse('--help') == Option(None, '--help')
assert Option.parse('-h --help') == Option('-h', '--help')
assert Option.parse('-h, --help') == Option('-h', '--help')

assert option('-h TOPIC') == Option('-h', None, 1)
assert option('--help TOPIC') == Option(None, '--help', 1)
assert option('-h TOPIC --help TOPIC') == Option('-h', '--help', 1)
assert option('-h TOPIC, --help TOPIC') == Option('-h', '--help', 1)
assert option('-h TOPIC, --help=TOPIC') == Option('-h', '--help', 1)
assert Option.parse('-h TOPIC') == Option('-h', None, 1)
assert Option.parse('--help TOPIC') == Option(None, '--help', 1)
assert Option.parse('-h TOPIC --help TOPIC') == Option('-h', '--help', 1)
assert Option.parse('-h TOPIC, --help TOPIC') == Option('-h', '--help', 1)
assert Option.parse('-h TOPIC, --help=TOPIC') == Option('-h', '--help', 1)

assert option('-h Description...') == Option('-h', None)
assert option('-h --help Description...') == Option('-h', '--help')
assert option('-h TOPIC Description...') == Option('-h', None, 1)
assert Option.parse('-h Description...') == Option('-h', None)
assert Option.parse('-h --help Description...') == Option('-h', '--help')
assert Option.parse('-h TOPIC Description...') == Option('-h', None, 1)

assert option(' -h') == Option('-h', None)
assert Option.parse(' -h') == Option('-h', None)

assert option('-h TOPIC Descripton... [default: 2]') == \
assert Option.parse('-h TOPIC Descripton... [default: 2]') == \
Option('-h', None, 1, '2')
assert option('-h TOPIC Descripton... [default: topic-1]') == \
assert Option.parse('-h TOPIC Descripton... [default: topic-1]') == \
Option('-h', None, 1, 'topic-1')
assert option('--help=TOPIC ... [default: 3.14]') == \
assert Option.parse('--help=TOPIC ... [default: 3.14]') == \
Option(None, '--help', 1, '3.14')
assert option('-h, --help=DIR ... [default: ./]') == \
assert Option.parse('-h, --help=DIR ... [default: ./]') == \
Option('-h', '--help', 1, "./")
assert option('-h TOPIC Descripton... [dEfAuLt: 2]') == \
assert Option.parse('-h TOPIC Descripton... [dEfAuLt: 2]') == \
Option('-h', None, 1, '2')


Expand Down

0 comments on commit 9943f4c

Please sign in to comment.