)]}'
{"doc/source/_exts/deliverables.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"4b7abd51449b5ae5ecfdb0474cbf1e601882f13f","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        return node.children"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def build_finished(app, exception):"},{"line_number":473,"context_line":"    if exception is not None:"},{"line_number":474,"context_line":"        return"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_52a1b794","line":472,"updated":"2019-02-25 05:13:38.000000000","message":"This is a terrible function name I\u0027ll fix that tomorrow","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"97019676567a27814fd07216f8a931c4c7294edc","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        return node.children"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def build_finished(app, exception):"},{"line_number":473,"context_line":"    if exception is not None:"},{"line_number":474,"context_line":"        return"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_ce097b2b","line":472,"in_reply_to":"9fdfeff1_52a1b794","updated":"2019-02-25 13:54:59.000000000","message":"In other places we\u0027ve named the callback to match the event name in the same way, so it seems OK to me.","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"b7fd4a8304bf64cde693ef2a12543ab8d7555ac6","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        return node.children"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"def build_finished(app, exception):"},{"line_number":473,"context_line":"    if exception is not None:"},{"line_number":474,"context_line":"        return"},{"line_number":475,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_8ec02a52","line":472,"in_reply_to":"9fdfeff1_ce097b2b","updated":"2019-02-27 02:07:22.000000000","message":"OK.  I\u0027ll leave it then","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"5dc5aaa2f08b70648b17f58d11bb93a49f1e3e4b","unresolved":false,"context_lines":[{"line_number":478,"context_line":"    loader \u003d sphinx.jinja2glue.BuiltinTemplateLoader()"},{"line_number":479,"context_line":"    loader.init(app.builder)"},{"line_number":480,"context_line":"    rendered_output \u003d loader.render(\u0027htaccess\u0027,"},{"line_number":481,"context_line":"                                    dict(redirections\u003dredirections))"},{"line_number":482,"context_line":"    output_full_name \u003d os.path.join(app.builder.outdir, \u0027.htaccess\u0027)"},{"line_number":483,"context_line":"    with open(output_full_name, \"w\") as f:"},{"line_number":484,"context_line":"        f.write(rendered_output)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_e002150c","line":481,"updated":"2019-02-27 15:33:30.000000000","message":"You can get to this method via app.builder.templates.render() without creating a new loader. It should already be set up with the path to find the template.","commit_id":"f3dc1def8e1bdb403f7c971c1636f362b19af737"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"e488e008bd0bc0d54b3692e3cfd65699cc6cc559","unresolved":false,"context_lines":[{"line_number":478,"context_line":"    loader \u003d sphinx.jinja2glue.BuiltinTemplateLoader()"},{"line_number":479,"context_line":"    loader.init(app.builder)"},{"line_number":480,"context_line":"    rendered_output \u003d loader.render(\u0027htaccess\u0027,"},{"line_number":481,"context_line":"                                    dict(redirections\u003dredirections))"},{"line_number":482,"context_line":"    output_full_name \u003d os.path.join(app.builder.outdir, \u0027.htaccess\u0027)"},{"line_number":483,"context_line":"    with open(output_full_name, \"w\") as f:"},{"line_number":484,"context_line":"        f.write(rendered_output)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_23281d31","line":481,"in_reply_to":"9fdfeff1_e002150c","updated":"2019-02-27 22:06:17.000000000","message":"Done","commit_id":"f3dc1def8e1bdb403f7c971c1636f362b19af737"}],"doc/test/redirect-tests.txt":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b53006888fa2cf535f2b881fd0fc5f2e4cfb369e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9fdfeff1_a865b8e2","updated":"2019-02-28 13:13:47.000000000","message":"We will want this file to be a template eventually, too.","commit_id":"752ce5a491fbe8e087e2334a7d8abe54aef33f66"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"7f28ce634b96995975e0b4ec01932a1f28d44294","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9fdfeff1_9f1a5a7a","in_reply_to":"9fdfeff1_6d90354f","updated":"2019-02-28 23:06:19.000000000","message":"Done","commit_id":"752ce5a491fbe8e087e2334a7d8abe54aef33f66"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"52bdb7ff409c4fe2f87d397736bbdb67f3c56756","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9fdfeff1_ed50a50c","in_reply_to":"9fdfeff1_a865b8e2","updated":"2019-02-28 19:54:38.000000000","message":"I can do that as a follow-up today.\n\nIt\u0027s basically just an second \u0027write()\u0027 when I generate the .htaccess file.  Or did you want something more?","commit_id":"752ce5a491fbe8e087e2334a7d8abe54aef33f66"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"06d1a2096f7a01a70a101b3c4e089e9c702ee04b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"9fdfeff1_6d90354f","in_reply_to":"9fdfeff1_ed50a50c","updated":"2019-02-28 20:14:04.000000000","message":"Yeah, it\u0027s the same, just move the file to the templates directory and do write it using the same template parameters as the other file. We just don\u0027t want to have to keep it up to date by hand.","commit_id":"752ce5a491fbe8e087e2334a7d8abe54aef33f66"}],"openstack_releases/_redirections.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"97019676567a27814fd07216f8a931c4c7294edc","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":19,"context_line":"CONSTRAINTS_URL \u003d \u0027http://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt\u0027  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def generate_constraints_redirections(_deliverables, series_list\u003d[]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_33e0b097","line":19,"updated":"2019-02-25 13:54:59.000000000","message":"This part could just go into the template.","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"b7fd4a8304bf64cde693ef2a12543ab8d7555ac6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":19,"context_line":"CONSTRAINTS_URL \u003d \u0027http://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt\u0027  # noqa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def generate_constraints_redirections(_deliverables, series_list\u003d[]):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_4eab2287","line":19,"in_reply_to":"9fdfeff1_33e0b097","updated":"2019-02-27 02:07:22.000000000","message":"Okay, I was thinking that if we did it all in code then the template would be more generic but that\u0027s probably overthinking it","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"97019676567a27814fd07216f8a931c4c7294edc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                    dst\u003d\u0027%s?h\u003d%s\u0027 % (CONSTRAINTS_URL, dst))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    redirections \u003d []"},{"line_number":29,"context_line":"    redirections.append(new_redir_dict(\u0027master\u0027, \u0027master\u0027))"},{"line_number":30,"context_line":"    # FIXME(tonyb): Add support in series_status for named and upcomming"},{"line_number":31,"context_line":"    # releases"},{"line_number":32,"context_line":"    redirections.append(new_redir_dict(\u0027train\u0027, \u0027master\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_13f56c57","line":29,"updated":"2019-02-25 13:54:59.000000000","message":"Since this rule is static, it could also just go in the template.","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"b7fd4a8304bf64cde693ef2a12543ab8d7555ac6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                    dst\u003d\u0027%s?h\u003d%s\u0027 % (CONSTRAINTS_URL, dst))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    redirections \u003d []"},{"line_number":29,"context_line":"    redirections.append(new_redir_dict(\u0027master\u0027, \u0027master\u0027))"},{"line_number":30,"context_line":"    # FIXME(tonyb): Add support in series_status for named and upcomming"},{"line_number":31,"context_line":"    # releases"},{"line_number":32,"context_line":"    redirections.append(new_redir_dict(\u0027train\u0027, \u0027master\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_ee93f65a","line":29,"in_reply_to":"9fdfeff1_13f56c57","updated":"2019-02-27 02:07:22.000000000","message":"Done","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"97019676567a27814fd07216f8a931c4c7294edc","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    redirections.append(new_redir_dict(\u0027master\u0027, \u0027master\u0027))"},{"line_number":30,"context_line":"    # FIXME(tonyb): Add support in series_status for named and upcomming"},{"line_number":31,"context_line":"    # releases"},{"line_number":32,"context_line":"    redirections.append(new_redir_dict(\u0027train\u0027, \u0027master\u0027))"},{"line_number":33,"context_line":"    for series in sorted(series_list, reverse\u003dTrue):"},{"line_number":34,"context_line":"        target \u003d None"},{"line_number":35,"context_line":"        LOG.debug(\u0027Looking for constrainst redirections for %s\u0027, series)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_73039843","line":32,"updated":"2019-02-25 13:54:59.000000000","message":"Do we need the \"next\" series before it is open? I can\u0027t remember how we said we would roll out changes to the URL.","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"b7fd4a8304bf64cde693ef2a12543ab8d7555ac6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    redirections.append(new_redir_dict(\u0027master\u0027, \u0027master\u0027))"},{"line_number":30,"context_line":"    # FIXME(tonyb): Add support in series_status for named and upcomming"},{"line_number":31,"context_line":"    # releases"},{"line_number":32,"context_line":"    redirections.append(new_redir_dict(\u0027train\u0027, \u0027master\u0027))"},{"line_number":33,"context_line":"    for series in sorted(series_list, reverse\u003dTrue):"},{"line_number":34,"context_line":"        target \u003d None"},{"line_number":35,"context_line":"        LOG.debug(\u0027Looking for constrainst redirections for %s\u0027, series)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_0e9f5a50","line":32,"in_reply_to":"9fdfeff1_73039843","updated":"2019-02-27 02:07:22.000000000","message":"I don\u0027t really know we need to discuss the switch over mechanism but there was some comments that we could publish them as soon as we knew them.  For now we can drop the train stuff.","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"97019676567a27814fd07216f8a931c4c7294edc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        target \u003d None"},{"line_number":35,"context_line":"        LOG.debug(\u0027Looking for constrainst redirections for %s\u0027, series)"},{"line_number":36,"context_line":"        # We don\u0027t track constraints files for the \u0027independent\u0027 release type"},{"line_number":37,"context_line":"        # and upper-constraints.txt was added in the Juno release cycle"},{"line_number":38,"context_line":"        if (series \u003d\u003d \u0027independent\u0027 or series.lower()[0] \u003c \u0027j\u0027):"},{"line_number":39,"context_line":"            LOG.debug(\u0027Not interested %s series for constraints redirections\u0027,"},{"line_number":40,"context_line":"                      series)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_13680cf3","line":37,"updated":"2019-02-25 13:54:59.000000000","message":"I\u0027m worried about embedding too many assumptions about naming, since we\u0027re getting close to the end of the alphabet already. Another way to make this completely data driven would be to iterate over the deliverables for the requirements team using _deliverables.get_deliverable_history(), and to leave data for those older series out of the repo. Or if we want to keep it, then I think just skipping the independent series is good enough. If nothing uses those older series, then the redirects just won\u0027t matter, right?","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"b7fd4a8304bf64cde693ef2a12543ab8d7555ac6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        target \u003d None"},{"line_number":35,"context_line":"        LOG.debug(\u0027Looking for constrainst redirections for %s\u0027, series)"},{"line_number":36,"context_line":"        # We don\u0027t track constraints files for the \u0027independent\u0027 release type"},{"line_number":37,"context_line":"        # and upper-constraints.txt was added in the Juno release cycle"},{"line_number":38,"context_line":"        if (series \u003d\u003d \u0027independent\u0027 or series.lower()[0] \u003c \u0027j\u0027):"},{"line_number":39,"context_line":"            LOG.debug(\u0027Not interested %s series for constraints redirections\u0027,"},{"line_number":40,"context_line":"                      series)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_4eb242e7","line":37,"in_reply_to":"9fdfeff1_13680cf3","updated":"2019-02-27 02:07:22.000000000","message":"Yup for now I\u0027ll drop the history from the repo even if we included it all that would happen is we\u0027d point to ...?h\u003dfolsom-eol which would 404 which isn\u0027t terrible.\n\nI admit part of the reason I excluded them was because they\u0027re not tested and I didn\u0027t want to update the tests to show that the code generated the same thing as the static data.","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"97019676567a27814fd07216f8a931c4c7294edc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                      series)"},{"line_number":41,"context_line":"            continue"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        for deliv in _deliverables.get_deliverables(\u0027requirements\u0027, series):"},{"line_number":44,"context_line":"            if deliv.is_released:"},{"line_number":45,"context_line":"                latest_release \u003d deliv.releases[-1]"},{"line_number":46,"context_line":"                if latest_release.is_eol:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_5300d402","line":43,"updated":"2019-02-25 13:54:59.000000000","message":"I don\u0027t think the logic inside the loop is quite right. A series in which we have released a copy of the requirements library with a version but not EOL and no branch (like when we do a release from master) won\u0027t find the redirect rule.\n\nI think what we want to do is loop through the releases in the series and if we find one where is_eol is True we use the $series-eol target. If we don\u0027t find the EOL tag, then we should look for the stable/$series branch (using deliv.get_branch_location()). If we find it, use it. Otherwise, default to \"master\".","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"b7fd4a8304bf64cde693ef2a12543ab8d7555ac6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                      series)"},{"line_number":41,"context_line":"            continue"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        for deliv in _deliverables.get_deliverables(\u0027requirements\u0027, series):"},{"line_number":44,"context_line":"            if deliv.is_released:"},{"line_number":45,"context_line":"                latest_release \u003d deliv.releases[-1]"},{"line_number":46,"context_line":"                if latest_release.is_eol:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_0ec8ba52","line":43,"in_reply_to":"9fdfeff1_5300d402","updated":"2019-02-27 02:07:22.000000000","message":"Okay I think I have something that\u0027s neater now","commit_id":"02e4ef3f0e2eb7e4093b4d4f8cd3ee9bd9b8d87d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"5dc5aaa2f08b70648b17f58d11bb93a49f1e3e4b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # Unless there is a specific stable branch"},{"line_number":29,"context_line":"        for branch in deliv.branches:"},{"line_number":30,"context_line":"            if deliv.series in branch.name:"},{"line_number":31,"context_line":"                target \u003d branch.name"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        # Or we have a ${series}-eol tag"},{"line_number":34,"context_line":"        for release in deliv.releases:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_fb140443","line":31,"updated":"2019-02-27 15:33:30.000000000","message":"should this loop have a break?\n\nI\u0027d feel better about looking for an exact match on the name. We had driverfixes/$series branches at one point. I know we didn\u0027t for the requirements repo, but it still feels like a potential hole due to an assumption that we could avoid.","commit_id":"f3dc1def8e1bdb403f7c971c1636f362b19af737"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"e488e008bd0bc0d54b3692e3cfd65699cc6cc559","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # Unless there is a specific stable branch"},{"line_number":29,"context_line":"        for branch in deliv.branches:"},{"line_number":30,"context_line":"            if deliv.series in branch.name:"},{"line_number":31,"context_line":"                target \u003d branch.name"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        # Or we have a ${series}-eol tag"},{"line_number":34,"context_line":"        for release in deliv.releases:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_6332a5a9","line":31,"in_reply_to":"9fdfeff1_fb140443","updated":"2019-02-27 22:06:17.000000000","message":"Done","commit_id":"f3dc1def8e1bdb403f7c971c1636f362b19af737"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"5dc5aaa2f08b70648b17f58d11bb93a49f1e3e4b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        # Or we have a ${series}-eol tag"},{"line_number":34,"context_line":"        for release in deliv.releases:"},{"line_number":35,"context_line":"            if release.is_eol:"},{"line_number":36,"context_line":"                target \u003d str(release.version)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        redirections.append(dict(code\u003d301, src\u003ddeliv.series, dst\u003dtarget))"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_9b4cd876","line":36,"updated":"2019-02-27 15:33:30.000000000","message":"could also use a break statement","commit_id":"f3dc1def8e1bdb403f7c971c1636f362b19af737"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"e488e008bd0bc0d54b3692e3cfd65699cc6cc559","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        # Or we have a ${series}-eol tag"},{"line_number":34,"context_line":"        for release in deliv.releases:"},{"line_number":35,"context_line":"            if release.is_eol:"},{"line_number":36,"context_line":"                target \u003d str(release.version)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        redirections.append(dict(code\u003d301, src\u003ddeliv.series, dst\u003dtarget))"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0325d95b","line":36,"in_reply_to":"9fdfeff1_9b4cd876","updated":"2019-02-27 22:06:17.000000000","message":"Done","commit_id":"f3dc1def8e1bdb403f7c971c1636f362b19af737"}]}
