Help me pick an API design (OO vs functional)
Michael Herrmann
michael.herrmann at getautoma.com
Tue Mar 26 10:59:21 EDT 2013
On Tuesday, March 26, 2013 2:41:38 PM UTC+1, Mitya Sirenef wrote:
> ...
> At the __exit__, further commands are no longer routed to that window;
> if it was a nested context, window is switched to the outer context,
> WHEN there are commands in it (i.e. on the first command). This seems
> pretty intuitive to me:
>
> with notepad1:
> ^S
> with notepad2:
> ^S
> write('something')
>
> ...
> > What I am most afraid of: that the window that's currently the
> > context "disappears":
>
> > notepad = start("Notepad")
> > with notepad:
> > press(ALT + TAB)
> > write("Am I in Notepad now?")
>
>
> Alt-tab needs to be handled by a wrapper function that gives you the
> object of the window you've switched to:
>
> otherwin = alt_tab()
> with otherwin:
> ...
>
> If window is changed within 'with' block, the rest of block should be
> ignored. Perhaps there could also be a way to switch this behaviour off,
> for the entire script or for current block only.
>
>
> > What do you think of designs #3 and #4?
> > ...
>
> These are ok, too, but I feel it's much easier to send commands to a
> wrong window vs. context managers. The same command in a different
> window can have vastly different and dangerous effect. In other python
> code that's generally not common at all, and would be bad style:
>
> lst = lst1
> lst.append('x')
> del lst[3]
> lst.insert(0, 'a')
> lst = lst2
> del lst[2]
> lst.append('y')
> lst = lst3
> lst.insert(0, 'x')
> lst += [1,2]
>
> I think current window should also be acquired explicitly:
>
> with get_current_window():
> type("some kind of snippet")
>
> For usage when a command should apply to all types of windows.
I was skeptical of your suggestion at first but trying it out on an example script made me see its appeal:
notepad_main = start("Notepad")
with notepad_main:
write("Hello World!")
save_dialogue = press(CTRL + 's')
with save_dialogue:
write("test.txt", into="File name")
click("Save")
click("Close")
Forcing the library user to always use the "with ..." seems like overkill though. I think the gained precision does not justify this burden on the library user. Hm....
More information about the Python-list
mailing list