Mercurial > hg > IntentMadeManifest
comparison intentmademanifest/actions.py @ 15:c7585bd93680
stub for actions module for python function dep unrolling
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Sat, 08 Jun 2013 07:12:15 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
14:6715102c5a86 | 15:c7585bd93680 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 """ | |
4 ``intentmademanifest.actions`` is a dependency resolver for python instance | |
5 methods | |
6 """ | |
7 | |
8 # TODO: generalize, if possible. For instance, we don't care about | |
9 # parameter space; should we? how? | |
10 | |
11 class Actions(object): | |
12 | |
13 @classmethod | |
14 def requires(cls, method, *requirements): | |
15 """ | |
16 Require all dependencies to be run before invoking the method. | |
17 - requirements: method names | |
18 """ | |
19 # TODO: as is, the intent is to run all of the requirements | |
20 # and then invoke ``method`` | |
21 # alternatively, e.g. via subclass, one could err out if the | |
22 # requirements have not been run | |
23 | |
24 class ActionsCLI(object): | |
25 """command line handler for an actions-based class""" | |
26 def __init__(self): | |
27 raise NotImplementedError("TODO") | |
28 | |
29 requires = Actions.requires | |
30 | |
31 if __name__ == '__main__': | |
32 # TODO: -> test | |
33 | |
34 class ActionsExample(object): | |
35 """example class for illustration of ``intentmademanifest.actions``""" | |
36 | |
37 def foo(self): | |
38 self.attr = 1 | |
39 | |
40 @requires('foo') | |
41 def bar(self): | |
42 self.attr *= 2 | |
43 | |
44 def fleem(self): | |
45 self.another_attr = 3 | |
46 | |
47 @requires('bar', 'fleem') | |
48 def result(self): | |
49 return self.attr * self.another_attr | |
50 | |
51 instance = ActionsExample() | |
52 assert instance.result() == 6 |