fabricã®envã£ã¦è¾æ¸ãé è¯ãã£ãã®ã§åå®è£ ãã¦ã¿ã
fabric 㯠Python製ã®ãããã¤ãªã©ãè¡ãã¹ã¯ãªãã
å
¬å¼ããã¥ã¡ã³ãã¯ä»¥ä¸
åè::Fabric — Fabric 1.4.4 pre-alpha (76f466d) documentation
ãã¨ã¯ @IanMLewis ããã®ããã¥ã¡ã³ãã詳ãã
åè::Fabric デプロイツールのPythonicな書き方 - Ian Lewis
ã§ãããã§ãã§ã¦ããã¨ããã« from fabric.api import env ã¨ããç°å¢ãè¨å®ã§ããè¾æ¸ã®ãããªãã®ããããããã䏿è°ã§æ®é dict ãªã dct[key] = value ã¨ããªããã°ãªããªãã®ã«ã env.key = value ã®ããã«ã§ãã¦ãããã䏿è°ã ã£ãããããã« env.key = value ã ã¨ç°¡åã ããªã®ã§ããã® fabric ã®å®è£
ãè¦ã¦ã¿ããæ¡å¤åç´ãªä»çµã¿ã§ãã»ãã¼ãã¨ãªã£ãã®ã§ããã
ã¤ã³ã¹ãã¼ã«
pip ã§ããã§ãã
pip install fabric
ä»å㯠1.4.3 ãã¯ãã£ãã
virtualenvç°å¢ã¯ããåæã ã¨ãä¾ãã° ~/.virtualenvs/myvertualenvs/lib/python2.7/site-packages/fabric ã¨ãã«ããã
ã³ã¼ããªã¼ãã£ã³ã°ãã
å ·ä½çã«ã¯ã¾ã from fabric.api import env ã¨ããã®ã§ env.py ãã¿ã¦ã¿ã
... from fabric.state import env, output ...
ãªãã»ã©ãä»åº¦ã¯ state.py ãæ¢ãã
... from fabric.utils import _AliasDict, _AttributeDict ... env = _AttributeDict({ 'again_prompt': 'Sorry, try again.', 'all_hosts': [], ... ... 'user': None, 'version': get_version('short') }) ...
ãªãã»ã©ã _AttributeDict ã£ã¦ã®ã宿 ãªã®ãã utls.py ãã¿ã¦ã¿ãã
class _AttributeDict(dict): ... def __getattr__(self, key): try: return self[key] except KeyError: # to conform with __getattr__ spec raise AttributeError(key) def __setattr__(self, key, value): self[key] = value def first(self, *names): for name in names: value = self.get(name) if value: return value
ããããã® env.key = value ã§ã¢ã¯ã»ã¹ã§ãã宿 ãããªãã»ã©ãåå®è£ ãã¦ã¿ãã
åå®è£ ãã¦ã¿ã
class ExDict(dict): """ããã©ã«ãã®è¾æ¸ã . ã§ã¢ã¯ã»ã¹ã§ããããã«æ¡å¼µãã""" def __getattr__(self, key): """屿§ãå¼ã³åºãã¨ãã«å¼ã°ãã""" print 'getattr' try: return self[key] except KeyError: raise AttributeError(key) def __setattr__(self, key, value): """屿§ã«ä»£å ¥ããã¨ãã«å¼ã°ãã""" print 'setattr' self[key] = value print self env = ExDict() env.a = 'aaa' print env.a env.b = 'bbb' print env.b print env.c
å®è¡çµæ
# ã¾ãã¯å¤ãä»£å ¥æä½ãå¼ã°ãã setattr # self ã§ã¤ã³ã¹ã¿ã³ã¹ãã¿ã¦ã¿ããè¾æ¸ã§ãã {'a': 'aaa'} # å¤ãåãåºãæä½ãå¼ã°ãã getattr # print env['a'] ã¨åã aaa # ããã²ã¨ã¤å¤ãä»£å ¥ããæä½ãå¼ã°ãã setattr # è¾æ¸ã«è¿½å ããã¦ããã®ãããã {'a': 'aaa', 'b': 'bbb'} # å¤ãåãåºãæä½ãå¼ã°ãã getattr # print env['b'] ã¨åã bbb # åå¨ããªã key ãåãåºãã¦ã¿ã getattr # print env['c'] ã¨åã # å½ç¶åå¨ããªãã®ã§ except ã§è½ã¡ã Traceback (most recent call last): File "/Users/atasatamatara/a.py", line 19, in <module> print env.c File "/Users/atasatamatara/a.py", line 7, in __getattr__ raise AttributeError(key) AttributeError: c
ãªãã»ã©ãªã¼ãè¾æ¸ãç¶æ¿ããã¯ã©ã¹ãä½ã£ã¦ããã®ã¤ã³ã¹ã¿ã³ã¹ã env ã¨ãããã§ãããã® __getattr__ 㨠__setattr__ ã§æ¬ä¼¼çã«è¾æ¸ã«æ ¼ç´ããããã«ãã¦ããã __getattr__ ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹ã®ããããã£ãå¼ã°ããæã«çºåããçµã¿è¾¼ã¿ã®é¢æ°ãã¾ãéã« __setattr__ ã¯ã¤ã³ã¹ã¿ã³ã¹ã®ããããã£ã«ä»£å ¥ããã¨ãã«çºåããçµã¿è¾¼ã¿ã®é¢æ°ã ããããã¸ãã«é¢ããå ¬å¼ããã¥ã¡ã³ã㯠3.4.2 属性値アクセスをカスタマイズする ã
ãããããã£ã
ããããã¡ã¿ããã°ã©ãã³ã°ã£ã½ã(ã¡ã¿ããã°ã©ãã³ã°ããããããªã)ãã¨ãé§ä½¿ããã®ã ruby ãªã®ããªã¼ãããã¯ããã§ããããããã ãããã©ããããã§ããããã¾ãèªåã¯ã¡ã¿ã¡ã¿ãããã¨ã¯ã¾ã ããã¾ã§ããªãã¦ããããæ®éã®ãã¨ãæ®éã«ãããããã«ãªãããããæ®éã®ããã°ã©ãã¼ãã®ã¬ãã«ã£ã¦ãã¼ãã«é«ãã£ãã