Skip to content

Instantly share code, notes, and snippets.

@wraithan
Created August 31, 2011 23:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wraithan/1185025 to your computer and use it in GitHub Desktop.
Save wraithan/1185025 to your computer and use it in GitHub Desktop.
def phasing(phaser_attr):
def phaser(f):
@wraps(f)
def wrapper(self, *args, **kwargs):
state = eval("self.%s" % phaser_attr)
if hasattr(f, "phases") and state in f.phases:
return f.phases[state](self, *args, **kwargs)
elif hasattr(f, "phase_points"):
points = [pt for pt in f.phase_points if pt <= state]
if len(points) > 0:
return f.phase_points[max(points)](self, *args, **kwargs)
else:
return f(self, *args, **kwargs)
else:
return f(self, *args, **kwargs)
wrapper.f = f
def phase_to(*states):
def phase_to_er(this_phase_f):
if not hasattr(wrapper.f, "phases"):
wrapper.f.phases = {}
for state in states:
wrapper.f.phases[state] = this_phase_f
return wrapper
return phase_to_er
wrapper.phase_to = phase_to
def phase_after(state):
def phase_after_er(this_phase_f):
if not hasattr(wrapper.f, "phase_points"):
wrapper.f.phase_points = {}
wrapper.f.phase_points[state] = this_phase_f
return wrapper
return phase_after_er
wrapper.phase_after = phase_after
return wrapper
return phaser
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment