From e2b01813b47e0f9edcade50d8b1bd6627fdb109f Mon Sep 17 00:00:00 2001 From: Steven Honson Date: Fri, 27 Jul 2012 22:43:23 +1000 Subject: [PATCH] Basic support for assignments. --- AUTHORS.rst | 1 + README.rst | 46 ++++++++++++++++++++++++++-------------------- args.py | 14 ++++++++++++++ tests.py | 11 +++++++++++ 4 files changed, 52 insertions(+), 20 deletions(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 92de956..a04435f 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -7,6 +7,7 @@ Development Lead Patches and Suggestions --- - Kracekumar + - Steven Honson diff --git a/README.rst b/README.rst index cfaab13..442e835 100644 --- a/README.rst +++ b/README.rst @@ -16,6 +16,7 @@ Here's an example application:: print 'Files detected: ' + str(args.files) print 'NOT files detected: ' + str(args.not_files) print 'Grouped Arguments: ' + str(args.grouped) + print 'Assignments detected: ' + str(args.assignments) No arguments:: @@ -23,44 +24,49 @@ No arguments:: Arguments passed in: [] Flags detected: Files detected: [] - NOT Files detected: - Grouped Arguments: {'_': } + NOT files detected: + Grouped Arguments: OrderedDict([('_', )]) + Assignments detected: OrderedDict() A few arguments:: - $ tool -s this that --import this and that and this and that - Arguments passed in: ['-s', 'this', 'that', '--import', 'this', 'and', 'that', 'and', 'this', 'and', 'that'] - Flags detected: Files detected: [] - NOT Files detected: - Grouped Arguments: {'--import': , '_': , '-s': } + NOT files detected: + Grouped Arguments: OrderedDict([('_', ), ('-s', ), ('--arch=x64', ), ('--import', ), ('--arch=i386', )]) + Assignments detected: OrderedDict([('--arch=', )]) A few expanded file arguments:: $ tool *.py - Arguments passed in: ['args.py', 'setup.py'] + Arguments passed in: ['args.py', 'setup.py', 'tests.py'] Flags detected: - Files detected: ['args.py', 'setup.py'] - NOT Files detected: - Grouped Arguments: {'_': } + Files detected: ['args.py', 'setup.py', 'tests.py'] + NOT files detected: + Grouped Arguments: OrderedDict([('_', )]) + Assignments detected: OrderedDict() A few non-expanded file arguments:: $ tool '*.py' Arguments passed in: ['*.py'] Flags detected: - Files detected: ['args.py', 'setup.py'] - NOT Files detected: - Grouped Arguments: {'_': } + Files detected: ['args.py', 'setup.py', 'tests.py'] + NOT files detected: + Grouped Arguments: OrderedDict([('_', )]) + Assignments detected: OrderedDict() A few mixed files/flags/arguments:: - $ tool '*.py' --test test face book -s ~/.ssh - Arguments passed in: ['*.py', '--test', 'test', 'face', 'book', '-s', '/Users/kreitz/.ssh'] - Flags detected: - Files detected: ['args.py', 'setup.py', '/Users/kreitz/.ssh/id_rsa', '/Users/kreitz/.ssh/id_rsa.pub', '/Users/kreitz/.ssh/known_hosts'] - NOT Files detected: - Grouped Arguments: {'--test': , '_': , '-s': } + $ tool '*.py' --test test face book -s ~/.ssh --arch=x64 + Arguments passed in: ['*.py', '--test', 'test', 'face', 'book', '-s', '/home/example/.ssh', '--arch=x64'] + Flags detected: + Files detected: ['args.py', 'setup.py', 'tests.py', '/home/example/.ssh/authorized_keys'] + NOT files detected: + Grouped Arguments: OrderedDict([('_', ), ('--test', ), ('-s', ), ('--arch=x64', )]) + Assignments detected: OrderedDict([('--arch=', )]) Installation diff --git a/args.py b/args.py index dbf0fcc..ffa4d1c 100644 --- a/args.py +++ b/args.py @@ -379,6 +379,19 @@ class ArgsList(object): return ArgsList(self.all) + @property + def assignments(self): + """Extracts assignment values from assignments.""" + + collection = OrderedDict() + + for arg in self.all: + if '=' in arg: + collection.setdefault(arg.split('=', 1)[0], ArgsList(no_argv=True)) + collection[arg.split('=', 1)[0]]._args.append(arg.split('=', 1)[1]) + + return collection + args = ArgsList() get = args.get @@ -404,3 +417,4 @@ not_flags = args.not_flags files = args.files not_files = args.not_files copy = args.copy +assignments = args.assignments diff --git a/tests.py b/tests.py index 051ed60..a322265 100644 --- a/tests.py +++ b/tests.py @@ -52,4 +52,15 @@ def test_start_with(): arg = args.ArgsList(args = arguments) ok_(arg.start_with('p').all == dynamic_lang) +def test_assignments(): + details = {'--arch': ['x64', 'i386'], 'lang': ['']} + arguments = [] + for key in details: + for argument in details[key]: + arguments.append(key + '=' + argument) + + arg = args.ArgsList(args = arguments) + for item in arg.assignments: + ok_(arg.assignments[item].all == details[item]) +