)]}'
{"Engine/agent/storlet_daemon/daemon.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"28f106d518012e670d0fb241181a10ac4d60298d","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                self.logger.debug(\u0027Start storlet execution\u0027)"},{"line_number":259,"context_line":"                with StorletLogger(self.storlet_name, logger_fd) as logger:"},{"line_number":260,"context_line":"                    handler \u003d self.storlet_cls(logger)"},{"line_number":261,"context_line":"                    handler(in_md, in_files, out_md_files, out_files)"},{"line_number":262,"context_line":"                self.logger.debug(\u0027Completed\u0027)"},{"line_number":263,"context_line":"            except Exception:"},{"line_number":264,"context_line":"                self.logger.exception(\u0027Error in storlet invocation\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a89bdaa_80230205","line":261,"range":{"start_line":261,"start_character":20,"end_line":261,"end_character":69},"updated":"2016-09-04 07:40:42.000000000","message":"I noticed that I missed to pass request parameters to storlet.\nThis is fixed in the next patch.","commit_id":"91cd0b749fc096215c6be9a29ab55d0e95479216"},{"author":{"_account_id":11317,"name":"Eran Rom","email":"eran@itsonlyme.name","username":"eranr"},"change_message_id":"0e03ae6de73e99983e4611ce73085f51fcfe4c84","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    pass"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class StorletLogger(object):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def __init__(self, storlet_name, fd):"},{"line_number":50,"context_line":"        self.fd \u003d fd"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_105e5be9","line":47,"updated":"2016-09-04 18:29:20.000000000","message":"Nice! we should definitely need to adopt this in the Java code!","commit_id":"878536e8ca6b5ee859e5d0de95199ce3738d6759"},{"author":{"_account_id":11317,"name":"Eran Rom","email":"eran@itsonlyme.name","username":"eranr"},"change_message_id":"0e03ae6de73e99983e4611ce73085f51fcfe4c84","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                  % (in_fds, in_md, out_md_fds, out_fds,"},{"line_number":253,"context_line":"                                     logger_fd))"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"                in_files \u003d [os.fdopen(fd, \u0027r\u0027) for fd in in_fds]"},{"line_number":256,"context_line":"                out_md_files \u003d [MetadataFile(fd) for fd in out_md_fds]"},{"line_number":257,"context_line":"                out_files \u003d [os.fdopen(fd, \u0027w\u0027) for fd in out_fds]"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_70ec07c8","line":255,"updated":"2016-09-04 18:29:20.000000000","message":"ok, so we give the app writers in_files, out_files which are python file objects, out_md_files which are MetadataFile, and in_md which is a dictionary - perfect! I guess we need a way to document this in the code.\n\nA random thought: I know this is against the Python philosophy, but do we want to protect the app developer here from doing mistakes such as trying to do seek? (in fact in some cases we do want to allow this - when running on object node - and sometimes we don\u0027t). Anyway at this point just something to think about.","commit_id":"878536e8ca6b5ee859e5d0de95199ce3738d6759"}],"StorletSamples/python/simple/simple.py":[{"author":{"_account_id":11317,"name":"Eran Rom","email":"eran@itsonlyme.name","username":"eranr"},"change_message_id":"0e03ae6de73e99983e4611ce73085f51fcfe4c84","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        # TODO(takashi): This is just for drafting interface"},{"line_number":27,"context_line":"        raise NotImplementedError()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __call__(self, in_md, in_files, out_md_files, out_files, params):"},{"line_number":30,"context_line":"        self.logger.debug(\u0027Returning metadata\u0027)"},{"line_number":31,"context_line":"        metadata \u003d in_md[0]"},{"line_number":32,"context_line":"        metadata[\u0027test\u0027] \u003d \u0027simple\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a89bdaa_7d0ea035","line":29,"updated":"2016-09-04 18:29:20.000000000","message":"IMO, the API definition is good.\nWe somehow need to make the \u0027types\u0027 clear for app developers \nI guess one way to do so is to define an \u0027abstract base class\u0027 and add the doc there...","commit_id":"878536e8ca6b5ee859e5d0de95199ce3738d6759"}]}
