)]}'
{"taskflow/engines/action_engine/analyzer.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7af2747431fab4c626cb80fdd66d9f667a37983a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from taskflow import states as st"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":28,"context_line":"class DeciderBase(object):"},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def check(self, runtime):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_36496861","line":27,"updated":"2015-07-30 01:33:00.000000000","message":"How about just \u0027Decider\u0027 vs \u0027DeciderBase\u0027\n\nWe used to do more of the postfix everything abstract with \u0027Base\u0027 but stopping doing that since IMHO it feels highly redundant with the usage of @six.add_metaclass(abc.ABCMeta) already clearly denoting what this is (a base class).\n\nA simple docstring on the class would be cool to, so that sphinx finds this class and references it when building http://docs.openstack.org/developer/taskflow/engines.html#components","commit_id":"3be7712c1d41631308f0d85177e863019f24bc34"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e78b70355263bd72f9828075da228e9589180652","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from taskflow import states as st"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":28,"context_line":"class DeciderBase(object):"},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def check(self, runtime):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_cfd96d24","line":27,"in_reply_to":"3a50d1a3_36496861","updated":"2015-07-30 15:15:38.000000000","message":"Done","commit_id":"3be7712c1d41631308f0d85177e863019f24bc34"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f3b891b5e85ffbb860efb10adecf13c560e50c05","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @abc.abstractmethod"},{"line_number":36,"context_line":"    def check(self, runtime):"},{"line_number":37,"context_line":"        \"\"\"Returns bool of whether this decider should allow running.\"\"\""},{"line_number":38,"context_line":"        raise NotImplementedError()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @abc.abstractmethod"},{"line_number":41,"context_line":"    def affect(self, runtime):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_e1ff6764","line":38,"updated":"2015-07-31 15:42:32.000000000","message":"So afaik u don\u0027t need to raise this as the metaclass will already ensure that these are implemented before a object can be constructed.\n\n    \u003e\u003e\u003e import six\n    \u003e\u003e\u003e import abc\n    \u003e\u003e\u003e @six.add_metaclass(abc.ABCMeta)\n    ... class Thing(object):\n    ...   @abc.abstractmethod\n    ...   def do_stuff(self):\n    ...     pass\n    ... \n    \u003e\u003e\u003e c \u003d Thing()\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n    TypeError: Can\u0027t instantiate abstract class Thing with abstract methods do_stuff\n\nSo I think just having this (and the following method) be:\n\n    @abc.abstractmethod\n    def check(self, runtime):\n        \"\"\"Returns bool of whether this decider should allow running.\"\"\"\n\nThat will work, no need to do \u0027raise NotImplementedError()\u0027","commit_id":"bc1a6ec05943bfa104cf99bd4c0a9dbfa3748340"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bc17850ec8835180b83a21957b310d13cc4e14f4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    @abc.abstractmethod"},{"line_number":36,"context_line":"    def check(self, runtime):"},{"line_number":37,"context_line":"        \"\"\"Returns bool of whether this decider should allow running.\"\"\""},{"line_number":38,"context_line":"        raise NotImplementedError()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @abc.abstractmethod"},{"line_number":41,"context_line":"    def affect(self, runtime):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_be173553","line":38,"in_reply_to":"3a50d1a3_e1ff6764","updated":"2015-07-31 17:34:12.000000000","message":"Done","commit_id":"bc1a6ec05943bfa104cf99bd4c0a9dbfa3748340"}]}
