summer update

This commit is contained in:
bendtherules
2014-07-07 18:18:56 -07:00
parent d1f4cc61cc
commit 0cf8b29572
58 changed files with 9282 additions and 766 deletions
+141
View File
@@ -0,0 +1,141 @@
from utils import KW_EVENTS, fuzzy_match_event_name
from functools import partial
import logging
logging.basicConfig(level=logging.DEBUG)
class fun_Class(object):
# dict_action_func -> dict of action funcs, key=event_numb like KEYDOWN
dict_action_func = {}
@classmethod
def register_event(cls, event_name=None, func_to_register=None):
'''
@fun_Class.register_event()
def event_key_down(ev):
pass
OR
@fun_Class.register_event(event_name) # event_name=KEYDOWN (or "key_down")
def whatever(ev):
pass
OR
fun_Class.register_event(event_name,func)
'''
if hasattr(func_to_register, "im_class"):
print("im_class=")
print func_to_register.im_class,func_to_register.imelf,
if (event_name is None) and (func_to_register is None):
# i.e No param passed, used as decorator (1st step of ex. 1)
logging.info("Nothing passed")
return cls.register_event
elif (not(event_name is None)) and (func_to_register is None):
# i.e. one param is passed, maybe func or (str or int)
logging.info("Event Name only passed")
if isinstance(event_name, int) or isinstance(event_name, str):
# i.e. 1st parm-> str or int, is event name, acts as decorator
# (2nd ex.)
# dont hardcode func name- use metaclass
logging.info("Event Name is event_name")
return partial(cls.register_event, event_name)
elif hasattr(event_name, "__call__"):
# first param is func, actually func_to_register.
# So get event_name from func_name (2nd step of 1st ex.)
logging.info("Event Name is actually func")
func_to_register = event_name
event_name = fuzzy_match_event_name(func_to_register.func_name)
return cls.register_event(event_name, func_to_register)
else:
raise TypeError("event_name must be (str or int) or func")
else:
# Both params present
logging.info("Both param passed")
if isinstance(event_name, str):
event_name = fuzzy_match_event_name(event_name)
event_numb = KW_EVENTS[event_name]
elif isinstance(event_name, int):
event_numb = event_name
else:
raise TypeError("event_name should be str or int")
logging.info("Registering func")
if not (event_numb in cls.dict_action_func):
cls.dict_action_func[event_numb] = []
cls.dict_action_func[event_numb].append(func_to_register)
# logging.debug(func_to_register)
return func_to_register
class child(fun_Class):
pass
@child.register_event("key_down")
def ev_arbit(self):
pass
logging.info(fun_Class.dict_action_func)
logging.info(child.dict_action_func)
class child2(fun_Class):
@fun_Class.register_event("key_down")
def ev_arbit_2(self):
pass
logging.info(fun_Class.dict_action_func)
logging.info(child2.dict_action_func)
# Test 1
# logging.info("\nRunning Test 1")
# @fun_Class.register_event("KEydown")
# def ev_arbit():
# pass
# logging.info(ev_arbit)
# Test 1.1
# logging.info("\nRunning Test 1.1")
# @fun_Class.register_event("KEydown")
# def ev_arbit_2():
# pass
# logging.info(fun_Class.dict_action_func)
# logging.info(ev_arbit_2)
# Test 2
# logging.info("\nRunning Test 2")
# @fun_Class.register_event
# def ev_key_up():
# pass
# logging.info(fun_Class.dict_action_func)
# logging.info(ev_key_up)
# Test 3
# logging.info("\nRunning Test 3")
# def test_mousemotion():
# pass
# test_mousemotion = fun_Class.register_event(test_mousemotion)
# logging.info(fun_Class.dict_action_func)
# logging.info(test_mousemotion)
# Test 4
# logging.info("\nRunning Test 4")
# def test_wat():
# pass
# test_wat = fun_Class.register_event("mousemotion", test_wat)
# logging.info(fun_Class.dict_action_func)
# logging.info(test_wat)