)]}'
{"rally/common/plugin/plugin.py":[{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"b01cb4d7d09d3b003740a09aca68496ccdd4d181","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    parent \u003d plugin_cls._get_base_cls()"},{"line_number":46,"context_line":"    if Plugin !\u003d getattr(plugin_cls, \"base_cls_ref\", Plugin):"},{"line_number":47,"context_line":"        raise exceptions.RallyException(_LE("},{"line_number":48,"context_line":"            \"\u0027%(plugin_cls)s\u0027 cann\u0027t be marked as plugin base, since it \""},{"line_number":49,"context_line":"            \"inherits from \u0027%(parent)s\u0027 which is also plugin base.\") % {"},{"line_number":50,"context_line":"            \"plugin_cls\": plugin_cls.__name__,"},{"line_number":51,"context_line":"            \"parent\": parent.__name__})"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a061dce_bd5610d0","line":48,"range":{"start_line":48,"start_character":30,"end_line":48,"end_character":36},"updated":"2016-04-05 15:32:38.000000000","message":"can\u0027t or cannot","commit_id":"1ebea605f9e6cea1859c53d64116d14011fbfcca"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6178aeb8b2121ac04be4eb8696fc29af24038311","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        :param name: Plugin\u0027s name"},{"line_number":184,"context_line":"        :param namespace: Namespace where to search for plugins"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        for p in cls.get_all(namespace\u003dnamespace):"},{"line_number":187,"context_line":"            if p.get_name() \u003d\u003d name:"},{"line_number":188,"context_line":"                return p"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_13e2769f","side":"PARENT","line":186,"updated":"2016-04-06 02:19:04.000000000","message":"here you will need to add cls.get_base().get_all(....)","commit_id":"9c882db4283e084875ffd4f5f43aa1009bc01e09"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6178aeb8b2121ac04be4eb8696fc29af24038311","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import inspect"},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from rally.common.i18n import _LE"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_732c9202","line":16,"updated":"2016-04-06 02:19:04.000000000","message":"This sounds like a lot of complications. \n\nWhat if we use code below? \n\n\n   @decorator.decorator\n   def base(plugin, isolated\u003dTrue):\n      \"\"\"Defines new base plugin.\n      \n      cls.base_parent \u003d\u003d None means that parent \u003d\u003d Plugin \n      cls.base \u003d\u003d cls means that cls is base class\n\n      isolated - all isolated bases can use the same names for \n                      the plugins. Note that you can\u0027t create a isolated\n                     plugin base that inherits isolated plugin base. \n      \"\"\"\n      #note(boris-42): use actually meta here, so plugin writers won\u0027t be able to do mess.\n      plugin.base_parent \u003d getattr(plugin, base)\n      plugin.base \u003d plugin\n  \n      parent \u003d plugin.base_parent \n      while parent: \n          if parent.isolated: \n             raise TypeError(\"Can\u0027t create isolated base %s that inherits already isolated base %s\" (plugin.base, parent))\n         parent \u003d plugin.base_parent\n\n      plugin.base_isolated \u003d isolated\n\n   @base(isolated\u003dFalse)\n   class Plugin(object):\n     # ....\n\n     def get_base(cls, isolated\u003dFalse): \n         if not isolated_base: \n            return cls.base \n       \n          base \u003d cls.base\n          while base.base_parent:\n             if base.isolated:\n                return base\n             base \u003d base.base_parent\n\n          # base is equal to Plugin in this case \n          return base\n            \n\n And you will need to do small change in check of plugin duplication and plugin get methods.","commit_id":"8af0f06f4c5434024db6624e9fd9c02a0ff8c6c0"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6178aeb8b2121ac04be4eb8696fc29af24038311","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def base_cls(plugin_cls):"},{"line_number":40,"context_line":"    \"\"\"Mark Plugin as a base class."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    .. warning:: This decorator should be written the line before"},{"line_number":43,"context_line":"        six.add_metaclass if it is used."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_301cd011","line":40,"updated":"2016-04-06 02:19:04.000000000","message":"Mark Plugin as a base. \n  \n   Decorator mark plugin as a base which creates separate \n   space so plugins with the same name can be add if they are in different plugin bases.","commit_id":"8af0f06f4c5434024db6624e9fd9c02a0ff8c6c0"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6178aeb8b2121ac04be4eb8696fc29af24038311","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            \"Plugin\u0027s Base can be only a subclass of Plugin class.\"))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    parent \u003d plugin_cls._get_base_cls()"},{"line_number":50,"context_line":"    if Plugin !\u003d getattr(plugin_cls, \"base_cls_ref\", Plugin):"},{"line_number":51,"context_line":"        raise exceptions.RallyException(_LE("},{"line_number":52,"context_line":"            \"\u0027%(plugin_cls)s\u0027 can not be marked as plugin base, since it \""},{"line_number":53,"context_line":"            \"inherits from \u0027%(parent)s\u0027 which is also plugin base.\") % {"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_5016a4a7","line":50,"updated":"2016-04-06 02:19:04.000000000","message":"This is strange. So basically I can do the next: \n\n  @configure()\n  class A(Plugin): \n     ...\n\n  @base \n  class B(A):\n    ...\n\nSo we have Plugin \u003c- A \u003c- B(which is base)\nAt the same point \n\n  @base\n  class A(Plugin):\n   ...\n\n  @base\n  class B(A):\n    ...\n\nWon\u0027t work. \n\nWe should pick one strategy or we will add inheritance of plugins bases or we will just use first subclasses of plugin as a base.","commit_id":"8af0f06f4c5434024db6624e9fd9c02a0ff8c6c0"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6178aeb8b2121ac04be4eb8696fc29af24038311","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    @classmethod"},{"line_number":184,"context_line":"    def _set_name_and_namespace(cls, name, namespace):"},{"line_number":185,"context_line":"        try:"},{"line_number":186,"context_line":"            existing_plugin \u003d cls._get_base_cls().get(name\u003dname,"},{"line_number":187,"context_line":"                                                      namespace\u003dnamespace)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        except exceptions.PluginNotFound:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_d3d75ebd","line":186,"updated":"2016-04-06 02:19:04.000000000","message":"existing_plugin \u003d cls.get_base(isolated\u003dTrue).get(....)","commit_id":"8af0f06f4c5434024db6624e9fd9c02a0ff8c6c0"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6178aeb8b2121ac04be4eb8696fc29af24038311","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        if len(potential_result) \u003d\u003d 1:"},{"line_number":234,"context_line":"            return potential_result[0]"},{"line_number":235,"context_line":"        elif potential_result:"},{"line_number":236,"context_line":"            hint \u003d _LE(\"Try to choose the correct Plugin base or namespace to \""},{"line_number":237,"context_line":"                       \"search in.\")"},{"line_number":238,"context_line":"            if namespace:"},{"line_number":239,"context_line":"                needle \u003d \"%s at %s namespace\" % (name, namespace)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_33f4da84","line":236,"updated":"2016-04-06 02:19:04.000000000","message":"This is dead code in case of my implementation, please revert it.","commit_id":"8af0f06f4c5434024db6624e9fd9c02a0ff8c6c0"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7676768f0a3fc8e53155ee43466a656b784c02aa","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    return decorator"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def base_cls(plugin_cls):"},{"line_number":39,"context_line":"    \"\"\"Mark Plugin as a base class."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_4d62d9ae","line":38,"updated":"2016-04-08 17:57:34.000000000","message":"I don\u0027t like the name, why it\u0027s not just base? \n\nIt will look like: \n\n   plugin.base\n\nas well I would recommend to make this function that generates decorator, otherwise if we decide to add at some point any additional arguments we won\u0027t be able to do it without non backward compatible change.\n\nany why argument is plugin_cls and not just plugin","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e3c195440f25d2f6c3a34cfbad7e411159329ffb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    return decorator"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def base_cls(plugin_cls):"},{"line_number":39,"context_line":"    \"\"\"Mark Plugin as a base class."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a18252c_546ebc2f","line":38,"in_reply_to":"9a061dce_4d62d9ae","updated":"2016-04-13 10:49:17.000000000","message":"Done","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7676768f0a3fc8e53155ee43466a656b784c02aa","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def base_cls(plugin_cls):"},{"line_number":39,"context_line":"    \"\"\"Mark Plugin as a base class."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"},{"line_number":42,"context_line":"        six.add_metaclass if it is used."}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_ed948d45","line":39,"updated":"2016-04-08 17:57:34.000000000","message":"Mark Plugin as a base. \n\nRemove from everywhere mentioning that it is class (because it is even not a true for scenarios.)","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e3c195440f25d2f6c3a34cfbad7e411159329ffb","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def base_cls(plugin_cls):"},{"line_number":39,"context_line":"    \"\"\"Mark Plugin as a base class."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"},{"line_number":42,"context_line":"        six.add_metaclass if it is used."}],"source_content_type":"text/x-python","patch_set":12,"id":"5a18252c_947854f4","line":39,"in_reply_to":"9a061dce_ed948d45","updated":"2016-04-13 10:49:17.000000000","message":"Done","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7676768f0a3fc8e53155ee43466a656b784c02aa","unresolved":false,"context_lines":[{"line_number":38,"context_line":"def base_cls(plugin_cls):"},{"line_number":39,"context_line":"    \"\"\"Mark Plugin as a base class."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"},{"line_number":42,"context_line":"        six.add_metaclass if it is used."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    if not issubclass(plugin_cls, Plugin):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_ed7bed27","line":41,"updated":"2016-04-08 17:57:34.000000000","message":"why?","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e3c195440f25d2f6c3a34cfbad7e411159329ffb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"def base_cls(plugin_cls):"},{"line_number":39,"context_line":"    \"\"\"Mark Plugin as a base class."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"},{"line_number":42,"context_line":"        six.add_metaclass if it is used."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    if not issubclass(plugin_cls, Plugin):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a18252c_df0ca53d","line":41,"in_reply_to":"9a061dce_ed7bed27","updated":"2016-04-13 10:49:17.000000000","message":"because we metaclasses(for example Abstract class) can change original class and reference on cls.base_ref will be not equal to cls itself.","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7676768f0a3fc8e53155ee43466a656b784c02aa","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"},{"line_number":42,"context_line":"        six.add_metaclass if it is used."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    if not issubclass(plugin_cls, Plugin):"},{"line_number":45,"context_line":"        raise exceptions.RallyException(_LE("},{"line_number":46,"context_line":"            \"Plugin\u0027s Base can be only a subclass of Plugin class.\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_8db4f1d1","line":44,"updated":"2016-04-08 17:57:34.000000000","message":"so actually we should be more strict it should be not just subclass (but it\u0027s parent should be Plugin)","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e3c195440f25d2f6c3a34cfbad7e411159329ffb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    .. warning:: This decorator should be written the line before"},{"line_number":42,"context_line":"        six.add_metaclass if it is used."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":"    if not issubclass(plugin_cls, Plugin):"},{"line_number":45,"context_line":"        raise exceptions.RallyException(_LE("},{"line_number":46,"context_line":"            \"Plugin\u0027s Base can be only a subclass of Plugin class.\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a18252c_747db8b0","line":44,"in_reply_to":"9a061dce_8db4f1d1","updated":"2016-04-13 10:49:17.000000000","message":"what is the difference between subclass and \"it\u0027s parent should be Plugin\"?\n\nIn [1]: class A(object):\n   ...:     pass\n   ...: \n\nIn [2]: class B(A):\n   ...:     pass\n   ...: \n\nIn [3]: class C(B):\n   ...:     pass\n   ...: \n\nIn [4]: issubclass(C, A)\nOut[4]: True","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7676768f0a3fc8e53155ee43466a656b784c02aa","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        cls._meta_clear()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    @classmethod"},{"line_number":168,"context_line":"    def _get_base_cls(cls):"},{"line_number":169,"context_line":"        return getattr(cls, \"base_cls_ref\", Plugin)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_cdcd495f","line":168,"updated":"2016-04-08 17:57:34.000000000","message":"_get_base(cls)","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e3c195440f25d2f6c3a34cfbad7e411159329ffb","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        cls._meta_clear()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    @classmethod"},{"line_number":168,"context_line":"    def _get_base_cls(cls):"},{"line_number":169,"context_line":"        return getattr(cls, \"base_cls_ref\", Plugin)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a18252c_1f361de7","line":168,"in_reply_to":"9a061dce_cdcd495f","updated":"2016-04-13 10:49:17.000000000","message":"Done","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7676768f0a3fc8e53155ee43466a656b784c02aa","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    @classmethod"},{"line_number":168,"context_line":"    def _get_base_cls(cls):"},{"line_number":169,"context_line":"        return getattr(cls, \"base_cls_ref\", Plugin)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @classmethod"},{"line_number":172,"context_line":"    def _set_name_and_namespace(cls, name, namespace):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_2ddb251d","line":169,"updated":"2016-04-08 17:57:34.000000000","message":"base_ref","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e3c195440f25d2f6c3a34cfbad7e411159329ffb","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    @classmethod"},{"line_number":168,"context_line":"    def _get_base_cls(cls):"},{"line_number":169,"context_line":"        return getattr(cls, \"base_cls_ref\", Plugin)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @classmethod"},{"line_number":172,"context_line":"    def _set_name_and_namespace(cls, name, namespace):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a18252c_1f0f3d2f","line":169,"in_reply_to":"9a061dce_2ddb251d","updated":"2016-04-13 10:49:17.000000000","message":"Done","commit_id":"5efc781cc5ee2fc99e2ad168a478cb330aaf4d17"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"b295470e048ebf37e63738d412540af40fe13ff1","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            if namespace:"},{"line_number":229,"context_line":"                needle \u003d \"%s at %s namespace\" % (name, namespace)"},{"line_number":230,"context_line":"            else:"},{"line_number":231,"context_line":"                needle \u003d \"%s at any of namespaces\" % namespace"},{"line_number":232,"context_line":"            raise exceptions.MultipleMatchesFound("},{"line_number":233,"context_line":"                needle\u003dneedle,"},{"line_number":234,"context_line":"                haystack\u003d\", \".join(p.get_name() for p in potential_result),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9abb7d3a_0362ccd7","line":231,"updated":"2016-06-01 14:47:05.000000000","message":"s/% namespace/% name/","commit_id":"0da81822f63c5d834d61f25c9135584ccfad36d7"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"fc1a42e2e44bb0459d2a294974101956afc724ba","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            if namespace:"},{"line_number":229,"context_line":"                needle \u003d \"%s at %s namespace\" % (name, namespace)"},{"line_number":230,"context_line":"            else:"},{"line_number":231,"context_line":"                needle \u003d \"%s at any of namespaces\" % namespace"},{"line_number":232,"context_line":"            raise exceptions.MultipleMatchesFound("},{"line_number":233,"context_line":"                needle\u003dneedle,"},{"line_number":234,"context_line":"                haystack\u003d\", \".join(p.get_name() for p in potential_result),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9abb7d3a_f2b2ef4a","line":231,"in_reply_to":"9abb7d3a_0362ccd7","updated":"2016-06-01 14:59:39.000000000","message":"good catch","commit_id":"0da81822f63c5d834d61f25c9135584ccfad36d7"}],"rally/deployment/engine.py":[{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"72b724822e315024126759ca543e5f0bd3050b08","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def configure(name, namespace\u003d\"default\"):"},{"line_number":33,"context_line":"    return plugin.configure(name, namespace\u003dnamespace)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_774adead","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":41},"updated":"2016-04-05 14:18:20.000000000","message":"Should we get rid of this?","commit_id":"814995213131c836bca6b0df057be9d710a451fd"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0cb5127aba5a97181cb166b16a1830749cf7e113","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def configure(name, namespace\u003d\"default\"):"},{"line_number":33,"context_line":"    return plugin.configure(name, namespace\u003dnamespace)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_468a8ac0","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":41},"in_reply_to":"9a061dce_774adead","updated":"2016-04-05 15:10:33.000000000","message":"no) it is just simlink like we have for scenario. see comment https://github.com/openstack/rally/blob/0.3.3/rally/plugins/openstack/scenario.py#L19-L20","commit_id":"814995213131c836bca6b0df057be9d710a451fd"}],"rally/plugins/common/exporter/file_system.py":[{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"72b724822e315024126759ca543e5f0bd3050b08","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        available_formats_str \u003d \", \".join(available_formats)"},{"line_number":49,"context_line":"        if self.connection_string is None or parse_obj.path \u003d\u003d \"\":"},{"line_number":50,"context_line":"            raise exceptions.InvalidConnectionString("},{"line_number":51,"context_line":"                \"It should be `file:///\u003cpath\u003e.\u003ctype-of-output\u003e`.\")"},{"line_number":52,"context_line":"        if self.type not in available_formats:"},{"line_number":53,"context_line":"            raise exceptions.InvalidConnectionString("},{"line_number":54,"context_line":"                \"Type of the exported task is not available. The available \""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_b7663627","line":51,"range":{"start_line":51,"start_character":27,"end_line":51,"end_character":29},"updated":"2016-04-05 14:18:20.000000000","message":"Looks like it belongs to another patch","commit_id":"814995213131c836bca6b0df057be9d710a451fd"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0cb5127aba5a97181cb166b16a1830749cf7e113","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        available_formats_str \u003d \", \".join(available_formats)"},{"line_number":49,"context_line":"        if self.connection_string is None or parse_obj.path \u003d\u003d \"\":"},{"line_number":50,"context_line":"            raise exceptions.InvalidConnectionString("},{"line_number":51,"context_line":"                \"It should be `file:///\u003cpath\u003e.\u003ctype-of-output\u003e`.\")"},{"line_number":52,"context_line":"        if self.type not in available_formats:"},{"line_number":53,"context_line":"            raise exceptions.InvalidConnectionString("},{"line_number":54,"context_line":"                \"Type of the exported task is not available. The available \""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_667d0eb1","line":51,"range":{"start_line":51,"start_character":27,"end_line":51,"end_character":29},"in_reply_to":"9a061dce_b7663627","updated":"2016-04-05 15:10:33.000000000","message":"ok, I\u0027ll move this change to separate patch","commit_id":"814995213131c836bca6b0df057be9d710a451fd"}],"rally/verification/exporter.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6178aeb8b2121ac04be4eb8696fc29af24038311","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":34,"context_line":"@configure(name\u003d\"base_verify_exporter\")"},{"line_number":35,"context_line":"class VerifyExporter(plugin.Plugin):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_b010e002","line":34,"updated":"2016-04-06 02:19:04.000000000","message":"this should be replaced by @plugin.base_cls","commit_id":"8af0f06f4c5434024db6624e9fd9c02a0ff8c6c0"}]}
