)]}'
{"marconi/common/pipeline.py":[{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"cc00fe041f02e5598f972bb8fbbf7ebc6f56317c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"This module implements a common Pipeline object"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Such implementation can be used to build a middleware like pipeline to"},{"line_number":19,"context_line":"ease the implementation of filtering, customizations, routing and even"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FvlA%3D","line":16,"updated":"2013-10-10 12:41:22.000000000","message":"Needs a period at the end.","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"4e3a0b541daff17b35b342ab46979e19f55cad53","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"This module implements a common Pipeline object"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Such implementation can be used to build a middleware like pipeline to"},{"line_number":19,"context_line":"ease the implementation of filtering, customizations, routing and even"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FviE%3D","line":16,"in_reply_to":"AAAATH%2F%2FvlA%3D","updated":"2013-10-10 12:47:39.000000000","message":"Done","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"cc00fe041f02e5598f972bb8fbbf7ebc6f56317c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Such implementation can be used to build a middleware like pipeline to"},{"line_number":19,"context_line":"ease the implementation of filtering, customizations, routing and even"},{"line_number":20,"context_line":"multiplexing. For example:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    \u003e\u003e\u003e pipes \u003d [MessageFiltering(), ShardManager(), QueueController()]"},{"line_number":23,"context_line":"    \u003e\u003e\u003e pipeline \u003d Pipeline(pipes)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FvkY%3D","line":20,"updated":"2013-10-10 12:41:22.000000000","message":"\"The pipeline can be used to enhance the storage layer with filtering, routing, multiplexing and the like. For example:\"","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"4e3a0b541daff17b35b342ab46979e19f55cad53","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Such implementation can be used to build a middleware like pipeline to"},{"line_number":19,"context_line":"ease the implementation of filtering, customizations, routing and even"},{"line_number":20,"context_line":"multiplexing. For example:"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    \u003e\u003e\u003e pipes \u003d [MessageFiltering(), ShardManager(), QueueController()]"},{"line_number":23,"context_line":"    \u003e\u003e\u003e pipeline \u003d Pipeline(pipes)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FviA%3D","line":20,"in_reply_to":"AAAATH%2F%2FvkY%3D","updated":"2013-10-10 12:47:39.000000000","message":"Done","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"cc00fe041f02e5598f972bb8fbbf7ebc6f56317c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Every pipe has to implement the method it wants to hook into. Such method"},{"line_number":27,"context_line":"will be called when the pipeline consumption gets to that point - pipes"},{"line_number":28,"context_line":"order matters - and will continue unless the method call returns a value"},{"line_number":29,"context_line":"that is not None."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"At least one of the pipes has to implement the calling method, if none of"},{"line_number":32,"context_line":"them do, an AttributeError exception will be raised."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fvjg%3D","line":29,"updated":"2013-10-10 12:41:22.000000000","message":"Such -\u003e This, \"pipes order matters\" -\u003e \"pipe ordering matters\"\n\n\"...method call returns a value that is *not* None\" -\u003e to be sure, do you mean that the pipeline terminates once the value *is* None?","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"4e3a0b541daff17b35b342ab46979e19f55cad53","unresolved":false,"context_lines":[{"line_number":26,"context_line":"Every pipe has to implement the method it wants to hook into. Such method"},{"line_number":27,"context_line":"will be called when the pipeline consumption gets to that point - pipes"},{"line_number":28,"context_line":"order matters - and will continue unless the method call returns a value"},{"line_number":29,"context_line":"that is not None."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"At least one of the pipes has to implement the calling method, if none of"},{"line_number":32,"context_line":"them do, an AttributeError exception will be raised."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fvhg%3D","line":29,"in_reply_to":"AAAATH%2F%2Fvjg%3D","updated":"2013-10-10 12:47:39.000000000","message":"Nope, the pipeline continues unless the returned value is not None. For example, ShardManager - at least in the way I see it being implemented along these lines - will return the result of calling `create` - for example - in the controller which will make the pipeline stop instead of continuing.","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"cc00fe041f02e5598f972bb8fbbf7ebc6f56317c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"order matters - and will continue unless the method call returns a value"},{"line_number":29,"context_line":"that is not None."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"At least one of the pipes has to implement the calling method, if none of"},{"line_number":32,"context_line":"them do, an AttributeError exception will be raised."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Other helper functions can also be found in this module, `get_storage_pipeline`"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FvjQ%3D","line":31,"updated":"2013-10-10 12:41:22.000000000","message":"\", if\" -\u003e \". If\"","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"4e3a0b541daff17b35b342ab46979e19f55cad53","unresolved":false,"context_lines":[{"line_number":28,"context_line":"order matters - and will continue unless the method call returns a value"},{"line_number":29,"context_line":"that is not None."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"At least one of the pipes has to implement the calling method, if none of"},{"line_number":32,"context_line":"them do, an AttributeError exception will be raised."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Other helper functions can also be found in this module, `get_storage_pipeline`"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FvhY%3D","line":31,"in_reply_to":"AAAATH%2F%2FvjQ%3D","updated":"2013-10-10 12:47:39.000000000","message":"Done","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"cc00fe041f02e5598f972bb8fbbf7ebc6f56317c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"At least one of the pipes has to implement the calling method, if none of"},{"line_number":32,"context_line":"them do, an AttributeError exception will be raised."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Other helper functions can also be found in this module, `get_storage_pipeline`"},{"line_number":35,"context_line":"for example, creates a pipeline based on the `storage_pipeline` configuration"},{"line_number":36,"context_line":"option. This config is a ListOpt and can be either set programmatically or in"},{"line_number":37,"context_line":"the configuration file itself:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fvi4%3D","line":34,"updated":"2013-10-10 12:41:22.000000000","message":"\"module,\" -\u003e \"module.\"","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"4e3a0b541daff17b35b342ab46979e19f55cad53","unresolved":false,"context_lines":[{"line_number":31,"context_line":"At least one of the pipes has to implement the calling method, if none of"},{"line_number":32,"context_line":"them do, an AttributeError exception will be raised."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Other helper functions can also be found in this module, `get_storage_pipeline`"},{"line_number":35,"context_line":"for example, creates a pipeline based on the `storage_pipeline` configuration"},{"line_number":36,"context_line":"option. This config is a ListOpt and can be either set programmatically or in"},{"line_number":37,"context_line":"the configuration file itself:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FvhQ%3D","line":34,"in_reply_to":"AAAATH%2F%2Fvi4%3D","updated":"2013-10-10 12:47:39.000000000","message":"Done","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"cc00fe041f02e5598f972bb8fbbf7ebc6f56317c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    storage_pipeline \u003d marconi.queues.storage.filters.ValidationFilter,"},{"line_number":41,"context_line":"                       marconi.queues.storage.sharding.ShardManager"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Note that controllers *must* not be present in this configuration option,"},{"line_number":44,"context_line":"they will be loaded - and automatically appended to the pipeline - using"},{"line_number":45,"context_line":"the `drivers:storage` configuration parameter."},{"line_number":46,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2Fviw%3D","line":43,"updated":"2013-10-10 12:41:22.000000000","message":"\"option, they\" -\u003e \"option. They\"","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"4e3a0b541daff17b35b342ab46979e19f55cad53","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    storage_pipeline \u003d marconi.queues.storage.filters.ValidationFilter,"},{"line_number":41,"context_line":"                       marconi.queues.storage.sharding.ShardManager"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Note that controllers *must* not be present in this configuration option,"},{"line_number":44,"context_line":"they will be loaded - and automatically appended to the pipeline - using"},{"line_number":45,"context_line":"the `drivers:storage` configuration parameter."},{"line_number":46,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FvhE%3D","line":43,"in_reply_to":"AAAATH%2F%2Fviw%3D","updated":"2013-10-10 12:47:39.000000000","message":"Done","commit_id":"ba8c02c29ade931ce8602cf50a786669009c0216"}],"marconi/queues/storage/base.py":[{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"d5de458896cbe3bf8860c33885dbf0ef6d1b448c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        controller \u003d self._queue_controller"},{"line_number":59,"context_line":"        pipes \u003d pipeline.get_pipeline(cfg.CONF)"},{"line_number":60,"context_line":"        pipes.add(controller)"},{"line_number":61,"context_line":"        return pipes"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @abc.abstractproperty"},{"line_number":64,"context_line":"    def _message_controller(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FwHs%3D","line":61,"updated":"2013-10-10 10:43:40.000000000","message":"Pretty clever way of updating the code without breaking anything. :P","commit_id":"5b4e5a2b993469dfcb1295e070bf52c3fd320cd6"}],"marconi/queues/storage/pipeline.py":[{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"d5de458896cbe3bf8860c33885dbf0ef6d1b448c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FwKE%3D","line":1,"updated":"2013-10-10 10:43:40.000000000","message":"Could you implement this file in marconi.common.storage.pipeline, since it is applicable to all storage drivers across all marconi sub-projects (proxy, queues, etc.)?","commit_id":"5b4e5a2b993469dfcb1295e070bf52c3fd320cd6"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"d5de458896cbe3bf8860c33885dbf0ef6d1b448c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# implied."},{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo.config import cfg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from marconi.common import pipeline"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FwIc%3D","line":15,"updated":"2013-10-10 10:43:40.000000000","message":"As part of the docstring for this module, I\u0027d love to see an example of what a pipeline would look like in a configuration file. Perhaps, even better, would be to have a the configuration component added to a conf file showing what it would look like + conf-comments.","commit_id":"5b4e5a2b993469dfcb1295e070bf52c3fd320cd6"}]}
