From bf118bca3d0e8072e5d84919413ecd68228bcba6 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 23 Jan 2014 22:53:19 -0500 Subject: [PATCH] Hotel additions.. lsot track --- src/app/dialogs/action_sorter.py | 3 +- src/app/dialogs/advanced_config.py | 26 ++++---- src/app/dialogs/advanced_config.pyc | Bin 5015 -> 5126 bytes src/app/dialogs/argparse_test_data.py | 7 +- src/app/dialogs/base_window.py | 12 ++-- src/app/dialogs/component_factory.py | 4 +- src/app/dialogs/component_factory.pyc | Bin 2873 -> 2852 bytes src/app/dialogs/controller.py | 7 +- src/app/dialogs/model.py | 91 ++++++++++++++++++++++++++ src/app/dialogs/msg_dialog.py | 17 +++++ src/app/dialogs/parse_validator.py | 19 ++++-- src/app/dialogs/window.py | 5 +- src/app/images/image_store.pyc | Bin 904 -> 904 bytes 13 files changed, 160 insertions(+), 31 deletions(-) create mode 100644 src/app/dialogs/model.py create mode 100644 src/app/dialogs/msg_dialog.py diff --git a/src/app/dialogs/action_sorter.py b/src/app/dialogs/action_sorter.py index ae3832e..f44dd17 100644 --- a/src/app/dialogs/action_sorter.py +++ b/src/app/dialogs/action_sorter.py @@ -12,7 +12,7 @@ from argparse import ( _CountAction, _AppendAction, _HelpAction) -DEBUG = 1 +DEBUG = 0 class ActionSorter(object): ''' @@ -68,6 +68,7 @@ class ActionSorter(object): self._display('ActionSorter: booleans', self._flags) self._display('ActionSorter: counters', self._counters) print '|-------------------------' + def _display(self, _type, something): for i in something: diff --git a/src/app/dialogs/advanced_config.py b/src/app/dialogs/advanced_config.py index ba23d52..6dac90c 100644 --- a/src/app/dialogs/advanced_config.py +++ b/src/app/dialogs/advanced_config.py @@ -19,11 +19,12 @@ class AdvancedConfigPanel(ScrolledPanel, OptionReader): ''' Abstract class for the Footer panels. ''' - def __init__(self, parent, parser, **kwargs): + def __init__(self, parent, model, **kwargs): ScrolledPanel.__init__(self, parent, **kwargs) self.SetupScrolling() - self.components = ComponentFactory(parser) + self.model = model + self.components = ComponentFactory(model.action_groups) self._controller = None @@ -33,22 +34,23 @@ class AdvancedConfigPanel(ScrolledPanel, OptionReader): def _init_components(self): - self._msg_req_args = self.BuildHeaderMsg("Required Arguments") + self._msg_req_args = (self.BuildHeaderMsg("Required Arguments") + if self.model.HasPositionals() else None) self._msg_opt_args = self.BuildHeaderMsg("Optional Arguments") def _do_layout(self): STD_LAYOUT = (0, wx.LEFT | wx.RIGHT | wx.EXPAND, PADDING) container = wx.BoxSizer(wx.VERTICAL) container.AddSpacer(15) - - container.Add(self._msg_req_args, 0, wx.LEFT | wx.RIGHT, PADDING) - container.AddSpacer(5) - container.Add(self._draw_horizontal_line(), *STD_LAYOUT) - container.AddSpacer(20) - - self.AddWidgets(container, self.components.required_args, add_space=True) - - container.AddSpacer(10) + if self.model.HasPositionals(): + container.Add(self._msg_req_args, 0, wx.LEFT | wx.RIGHT, PADDING) + container.AddSpacer(5) + container.Add(self._draw_horizontal_line(), *STD_LAYOUT) + container.AddSpacer(20) + + self.AddWidgets(container, self.components.required_args, add_space=True) + + container.AddSpacer(10) container.AddSpacer(10) container.Add(self._msg_opt_args, 0, wx.LEFT | wx.RIGHT, PADDING) diff --git a/src/app/dialogs/advanced_config.pyc b/src/app/dialogs/advanced_config.pyc index 897f9ff44003d727939d4ee1bb75274b2a397a1a..7965c65086ed635f1d35e7a742c04e1a2fcebbd4 100644 GIT binary patch delta 1222 zcmZ8g&1(}u6rY)7ce9(XZBoBe8@0CEQV)Wtmx48ZAzJOkRx6acc9*zmY~t=lQIs5l zJ*eQ}p&rGP7cUBeApQv+ym%D6c@(@>@V!}EMA&`&-kX`)F&)8Cm#c77Psj)s+5uJHVfehKE$@+|OLe?hAvN*?@d9_|(eZe>$ zsXLr8HsciGqj2`b8ag-Ip5KxJQJhEPF2_N8b*T}yyPXJrh^My9(3*~B<&GORB6ypg zg>NadXJd%*GPi`uOTrWuxA-#g(@%so{G%x}R2hDpiVJruS1=D<&Q?C#kyy-stoCR_smMkTK>4m3EQ>G08mb zd2%~6j04<)XT~t!0q>1-sFlb(-%Dza;~!0+VZ6#qJkN`KAKI-vFDk-@51H58hHK^{ zy^LGrLHKFL+BSqIA+UfC!f$KnDCsR}cH|J5-DHNz>_g)igy^&y&M3I&hti_hPLSE2 zHj3~Ze9iXG?xJ9YHqzbQXt=na&V&PA=B{hhSsnCz z4;xs^AI6?P~u^=jxibx@;~X&A9<(6XDODlt95(|$bfwz|HeQu&+h zVD)c)ShpkIfX+Z|ie_5UWl2(A$#@E1gDpXq?{hfJ9 zie>cF;2V&r`Fq({I&`roT@WKt$OVM0UFo zxk;-a0o@BZCf?MzI%^{!;Q8NDPPZ-vDYX+MhJ0tG?bYxIiWM?Y${?{4{$MxR1fZ$rY6pUnW9Au^%Kh_hqfOrx@1t}Bau zhwwwXsgDqx!I@0cILyvI{G90>XR_EPGhMGlb4d!{3z;F|YBO{)^6p)oyO_mww@Gq; zyJx7s)7~AOU&kV%w?)18We2=O1`nnDI93<<5$QgiZsY6htnUy~Tr}hdssh~0u89(^ z`A5YRzVZv&^yNt6u3tOB@?$pB<#@5Q@~E7o#rzDb4=VRVu0Z*mR<=Ps4$_=G&uqzp}g}-vGbdsA)WP$G8 M#NGT@YAGZB03iafH2?qr diff --git a/src/app/dialogs/argparse_test_data.py b/src/app/dialogs/argparse_test_data.py index 4f0f6b0..cfe1b6a 100644 --- a/src/app/dialogs/argparse_test_data.py +++ b/src/app/dialogs/argparse_test_data.py @@ -19,8 +19,5 @@ parser.add_argument('-c', '--constoption', action="store_const", const="myconsta parser.add_argument('-t', '--truify', action="store_true", help='Ensure the store_true actions are sorted') # Flag parser.add_argument('-f', '--falsificle', action="store_false", help='Ensure the store_false actions are sorted') # Flag -try: - parser.parse_args('fname -T yes'.split()) -except Exception as e: - print 'asdfads' - print type(e) \ No newline at end of file +print parser.parse_args('fname oname -T yes'.split()) + diff --git a/src/app/dialogs/base_window.py b/src/app/dialogs/base_window.py index d007d93..9552de7 100644 --- a/src/app/dialogs/base_window.py +++ b/src/app/dialogs/base_window.py @@ -11,15 +11,17 @@ New plan: ''' import os +import sys import wx import header import footer from app.dialogs.controller import Controller from app.images import image_store +from app.dialogs.model import Model class BaseWindow(wx.Frame): - def __init__(self, BodyPanel, parser): + def __init__(self, BodyPanel): wx.Frame.__init__( self, parent=None, @@ -28,7 +30,9 @@ class BaseWindow(wx.Frame): size=(610,530) ) - self._parser = parser + self._model = Model.GetInstance() + print self._model + sys.exit() self._controller = None self._init_properties() @@ -46,11 +50,11 @@ class BaseWindow(wx.Frame): # init components self.head_panel = header.FrameHeader( heading="Settings", - subheading = self._parser.description, + subheading = self._model.description, image_path=image_store.settings2, parent=self, size=(30,90)) - self.body_panel = BodyPanel(self, self._parser) + self.body_panel = BodyPanel(self, self._model) self.cfg_foot_panel = footer.ConfigFooter(self, self._controller) self.panels = [self.head_panel, self.body_panel, self.cfg_foot_panel] diff --git a/src/app/dialogs/component_factory.py b/src/app/dialogs/component_factory.py index b00b672..49184ec 100644 --- a/src/app/dialogs/component_factory.py +++ b/src/app/dialogs/component_factory.py @@ -15,9 +15,9 @@ class ComponentFactory(object): Aggregates all of the actions and ''' - def __init__(self, parser): + def __init__(self, sorted_actions): - self._actions = action_sorter.ActionSorter(parser._actions[:]) + self._actions = sorted_actions self.required_args = self.BuildPositionals(self._actions) self.flags = self.BuildFlags(self._actions) diff --git a/src/app/dialogs/component_factory.pyc b/src/app/dialogs/component_factory.pyc index 0e220c3ff9578b55a6815f4047bc416b0f5fd7e1..9e822624e157c3778c23588584b1029bccd2ad47 100644 GIT binary patch delta 467 zcmdlfwnU7b`78Mg*&7+_a~K#HY8V-67#QM#3?bcU`SzL2-aW(TIi?22_#E67#Jp-Gc6M019FPc;uDig zGV}9_Ckt={O*UngVC078R!!P2R!P2mnchQ*rp*oRFFMA7|(vYceM`907Dgrsi#i4Vv0iNDs^7yq^s6qU;r= zqs*EzX5Q~s2Dvu2g|eqh^T8cjV~g`H+`?Ju+1#IHFoMt0=L9|eaS{oUW?!UBYDSMTs0qjg9b_h?OClH zIrwD`J5wa-o{>qg2((^g6X?oO2VbolZ;6fzgf@X*4NvUQU8F=0SCUFYP;Fy08uLF{ CT~%ZN diff --git a/src/app/dialogs/controller.py b/src/app/dialogs/controller.py index 9e0abef..5dbf9e6 100644 --- a/src/app/dialogs/controller.py +++ b/src/app/dialogs/controller.py @@ -4,6 +4,8 @@ Created on Dec 22, 2013 @author: Chris ''' +import msg_dialog + class Controller(object): ''' Main controller for the gui. @@ -33,12 +35,15 @@ class Controller(object): def OnConfigNext(self, event): cmd_line_args = self._body.GetOptions() - +# self.ShowArgumentErrorDlg(error) def OnMainCancel(self, event): print 'OnMaingCancel pressed!' def OnMainNext(self, event): print 'OnCongigNext pressed!' + + def ShowArgumentErrorDlg(self, error): + msg_dialog.ShowError(error) diff --git a/src/app/dialogs/model.py b/src/app/dialogs/model.py new file mode 100644 index 0000000..32d2eff --- /dev/null +++ b/src/app/dialogs/model.py @@ -0,0 +1,91 @@ +''' +Created on Jan 23, 2014 + +@author: Chris +''' + +import types +from app.dialogs.action_sorter import ActionSorter + +class ArgumentError(Exception): + pass + +class Model(object): + _instance = None +# def __new__(cls, *args, **kwargs): +# if not cls._instance: +# cls._instance = super(Model, cls).__new__( +# cls, *args, **kwargs) +# return cls._instance + + def __init__(self, parser=None): + print parser + self._parser = parser + self.description = parser.description + + + self.action_groups = ActionSorter(self._parser._actions) + + # monkey patch + self._parser.error = types.MethodType( + self.ErrorAsString, + self._parser) + + Model._instance = self + print self + def HasPositionals(self): + if self.action_groups._positionals: + return True + return False + + def IsValidArgString(self, arg_string): + if isinstance(self._Parse(arg_string), str): + return False + return True + + def _Parse(self, arg_string): + try: + self._parser.parse_args(arg_string.split()) + return True + except ArgumentError as e: + return str(e) + + def GetErrorMsg(self, arg_string): + return self._FormatMsg(self._Parse(arg_string)) + + def _FormatMsg(self, msg): + output = list(msg) + output[output.index(':')] = ':\n ' + return ''.join(output) + + @staticmethod + def ErrorAsString(self, msg): + ''' + Monkey patch for parser.error + Returns the error string rather than + printing and silently exiting. + ''' + raise ArgumentError(msg) + + @classmethod + def GetInstance(cls): + return cls._instance + + + +if __name__ == '__main__': + import argparse_test_data + parser = argparse_test_data.parser + + model = Model(parser) + b = model.GetInstance() + print model + print b + print model == b + + +# print m2 + + + + diff --git a/src/app/dialogs/msg_dialog.py b/src/app/dialogs/msg_dialog.py new file mode 100644 index 0000000..df05bf9 --- /dev/null +++ b/src/app/dialogs/msg_dialog.py @@ -0,0 +1,17 @@ +''' +Created on Jan 23, 2014 + +@author: Chris +''' +import wx + +def ShowError(msg): + wx.MessageDialog( + None, + msg, + 'Argument Error', + wx.ICON_ERROR) + + +if __name__ == '__main__': + pass \ No newline at end of file diff --git a/src/app/dialogs/parse_validator.py b/src/app/dialogs/parse_validator.py index 338b7a8..812ff56 100644 --- a/src/app/dialogs/parse_validator.py +++ b/src/app/dialogs/parse_validator.py @@ -4,11 +4,20 @@ Created on Jan 22, 2014 @author: Chris ''' -def Validate(parser, argument_string): - try: - parser.parse_args(argument_string.split()) - except: - raise ValueError +import types +from argparse import ArgumentParser + + + + + + + + +def validate(parser, arg_string): + parser.error = types.MethodType(RaiseError, parser) + parser.parse_args(arg_string.split()) + if __name__ == '__main__': diff --git a/src/app/dialogs/window.py b/src/app/dialogs/window.py index 3574609..2c4ecea 100644 --- a/src/app/dialogs/window.py +++ b/src/app/dialogs/window.py @@ -27,6 +27,8 @@ import wx import base_window import advanced_config from app.dialogs import argparse_test_data +from app.dialogs.action_sorter import ActionSorter +from app.dialogs.model import Model def WithNoOptions(): pass @@ -34,7 +36,8 @@ def WithBasicOptions(): pass def WithAdvancedOptions(parser): app = wx.App(False) - frame = base_window.BaseWindow(advanced_config.AdvancedConfigPanel, parser) + model = Model(parser) + frame = base_window.BaseWindow(advanced_config.AdvancedConfigPanel) frame.Show(True) # Show the frame. app.MainLoop() diff --git a/src/app/images/image_store.pyc b/src/app/images/image_store.pyc index f4ba3ec5c4f38995b3833765a6adb3f2071916c7..96ef3b5a590a8c0e8dbcf8710338af912c673d48 100644 GIT binary patch delta 16 XcmeBR?_g(V{>;l|d;j4^_C{s^Dx?K$ delta 16 XcmeBR?_g(V{>;mDSO5M-_C{s^D%u5F