)]}'
{"glance/db/metadata.py":[{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"9cf1d62d340625a4b75928a1bf702716e41965f4","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def db_unload_metadefs(session\u003dNone):"},{"line_number":61,"context_line":"    \"\"\"Unload metadefinitions from database\"\"\""},{"line_number":62,"context_line":"    return get_backend().db_unload_metadefs(session\u003ddb_api.get_session())"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_97683af7","line":61,"updated":"2015-04-13 12:20:40.000000000","message":"Incoming session is not used in this method. Did you mean to use pattern from db_load_metadefs/db_export_metadefs? \n\nnit: It could be also rewritten to:\n\nsession \u003d session or db_api.get_session() to get rid of if statement.","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"6d5bccf334dde889d0e5d1afdb7a9d48f602c5c1","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def db_unload_metadefs(session\u003dNone):"},{"line_number":61,"context_line":"    \"\"\"Unload metadefinitions from database\"\"\""},{"line_number":62,"context_line":"    return get_backend().db_unload_metadefs(session\u003ddb_api.get_session())"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_8cb6ecda","line":61,"in_reply_to":"7aaa499b_97683af7","updated":"2015-04-13 12:49:51.000000000","message":"ups, missed that one.","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"}],"glance/db/sqlalchemy/metadata.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"4608af4ccbf97be0f2c23ba071dce89cc990f459","unresolved":false,"context_lines":[{"line_number":30,"context_line":"import sqlalchemy.orm as sa_orm"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from glance.common import utils"},{"line_number":33,"context_line":"from glance.db.sqlalchemy.models_metadef import MetadefNamespace"},{"line_number":34,"context_line":"from glance.db.sqlalchemy.models_metadef import MetadefNamespaceResourceType"},{"line_number":35,"context_line":"from glance.db.sqlalchemy.models_metadef import MetadefObject"},{"line_number":36,"context_line":"from glance.db.sqlalchemy.models_metadef import MetadefProperty"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_d35b9453","line":33,"updated":"2014-12-26 18:21:36.000000000","message":"Shouldn\u0027t this more simply be\n\n    from glance.db.sqlalchemy import models_metadef\n\n(You could even rename it)\n\nI realize H302 is disabled for glance, but there\u0027s no reason to abuse that fact.","commit_id":"adf81ea22030c01cf730461da57347b8338b01c7"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"1ba675d7247770e45712d9dc1e1d20e5073b703c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import re"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":"from oslo.db import exception as db_exception"},{"line_number":28,"context_line":"from oslo_utils import timeutils"},{"line_number":29,"context_line":"import six"},{"line_number":30,"context_line":"import sqlalchemy.orm as sa_orm"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_f2251c5b","line":27,"updated":"2015-01-16 22:39:38.000000000","message":"We should wait a bit until Louis\u0027 oslo namespace changes land. Once that happens you\u0027ll need to rebase and use oslo_db instead of oslo.db.","commit_id":"d209d4f8ef51e43c22a01f78ebfd2a47ed00ed47"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"4299b1ad4a5238d762e33da31d14adee17af0b2b","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                    \u0027created_at\u0027: timeutils.utcnow()"},{"line_number":121,"context_line":"                }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"                try:"},{"line_number":124,"context_line":"                    session.query(db_metadef.MetadefNamespace).filter_by("},{"line_number":125,"context_line":"                        namespace\u003dvalues[\u0027namespace\u0027]).one()"},{"line_number":126,"context_line":"                    LOG.info(_LI(\"Skipping  namespace %s. \""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_efa2a7fa","line":123,"updated":"2015-02-19 11:22:07.000000000","message":"I would rather replace the whole try-except block with the simple conditional statement. The only thing you are trying to do in here is to check if given namespace already exists in the database, so it can be done with exists() method available at the Query object.\n\nSomething like:\n\nif session.query(db_metadef.MetadefNamespace).filter_by(\t                      namespace\u003dvalues[\u0027namespace\u0027]).exists(): [skip\u0026info-code]","commit_id":"f0a959c6dcd2f01782a35b4735eb1e3d21a145b5"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"4299b1ad4a5238d762e33da31d14adee17af0b2b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                        \u0027updated_at\u0027: timeutils_utcnow"},{"line_number":196,"context_line":"                    }"},{"line_number":197,"context_line":"                    tag \u003d db_metadef.MetadefTag()"},{"line_number":198,"context_line":"                    tag.updated(values)"},{"line_number":199,"context_line":"                    tag.save(session\u003dsession)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"            LOG.info(_LI(\"File %s loaded to database.\"), file)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_8ffbebbc","line":198,"updated":"2015-02-19 11:22:07.000000000","message":"Should be tag.update","commit_id":"f0a959c6dcd2f01782a35b4735eb1e3d21a145b5"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"9cf1d62d340625a4b75928a1bf702716e41965f4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        ).filter_by(id\u003did).one()"},{"line_number":69,"context_line":"    except sa_orm.exc.NoResultFound:"},{"line_number":70,"context_line":"        rt \u003d None"},{"line_number":71,"context_line":"    return rt"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def _get_namespace_resource_types(session, namespace_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_9736fa01","line":71,"updated":"2015-04-13 12:20:40.000000000","message":"As you are making such big refactoring in here, could you make a reusable method for getting resource_type which can be used by _get_resource_type_by_name and _get_resource_type_by_id? Right now we are repeating almost same method twice.","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"6d5bccf334dde889d0e5d1afdb7a9d48f602c5c1","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        ).filter_by(id\u003did).one()"},{"line_number":69,"context_line":"    except sa_orm.exc.NoResultFound:"},{"line_number":70,"context_line":"        rt \u003d None"},{"line_number":71,"context_line":"    return rt"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def _get_namespace_resource_types(session, namespace_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_ac73e84c","line":71,"in_reply_to":"7aaa499b_9736fa01","updated":"2015-04-13 12:49:51.000000000","message":"possible, will do.","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"9cf1d62d340625a4b75928a1bf702716e41965f4","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    return rt_id"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def _get_namespace_resource_type_by_ids(session, namespace_id, rt_id):"},{"line_number":121,"context_line":"    table \u003d db_metadef.MetadefNamespaceResourceType"},{"line_number":122,"context_line":"    try:"},{"line_number":123,"context_line":"        namespace_rt \u003d session.query("}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_09cf6e80","line":120,"updated":"2015-04-13 12:20:40.000000000","message":"Why is this method called `..._by_ids` as it gets data using single id and not list of ids?","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"6d5bccf334dde889d0e5d1afdb7a9d48f602c5c1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    return rt_id"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"def _get_namespace_resource_type_by_ids(session, namespace_id, rt_id):"},{"line_number":121,"context_line":"    table \u003d db_metadef.MetadefNamespaceResourceType"},{"line_number":122,"context_line":"    try:"},{"line_number":123,"context_line":"        namespace_rt \u003d session.query("}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_0ca41ca4","line":120,"in_reply_to":"7aaa499b_09cf6e80","updated":"2015-04-13 12:49:51.000000000","message":"ID of namespace and ID of resource type, that\u0027s why \"by_ids\"","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"9cf1d62d340625a4b75928a1bf702716e41965f4","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            objects.append({"},{"line_number":381,"context_line":"                \"name\": object[\u0027name\u0027],"},{"line_number":382,"context_line":"                \"description\": object[\u0027description\u0027],"},{"line_number":383,"context_line":"                \"properties\": object[\u0027json_schema\u0027]"},{"line_number":384,"context_line":"            })"},{"line_number":385,"context_line":"        values.update({"},{"line_number":386,"context_line":"            \u0027objects\u0027: objects"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_69303257","line":383,"updated":"2015-04-13 12:20:40.000000000","message":"What is the reason for removing json.loads?","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"6d5bccf334dde889d0e5d1afdb7a9d48f602c5c1","unresolved":false,"context_lines":[{"line_number":380,"context_line":"            objects.append({"},{"line_number":381,"context_line":"                \"name\": object[\u0027name\u0027],"},{"line_number":382,"context_line":"                \"description\": object[\u0027description\u0027],"},{"line_number":383,"context_line":"                \"properties\": object[\u0027json_schema\u0027]"},{"line_number":384,"context_line":"            })"},{"line_number":385,"context_line":"        values.update({"},{"line_number":386,"context_line":"            \u0027objects\u0027: objects"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_4c822402","line":383,"in_reply_to":"7aaa499b_69303257","updated":"2015-04-13 12:49:51.000000000","message":"DB object does the job.","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"9cf1d62d340625a4b75928a1bf702716e41965f4","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        properties \u003d {}"},{"line_number":390,"context_line":"        for property in db_properties:"},{"line_number":391,"context_line":"            properties.update({"},{"line_number":392,"context_line":"                property[\u0027name\u0027]: property[\u0027json_schema\u0027]"},{"line_number":393,"context_line":"            })"},{"line_number":394,"context_line":"        values.update({"},{"line_number":395,"context_line":"            \u0027properties\u0027: properties"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_293a2a37","line":392,"updated":"2015-04-13 12:20:40.000000000","message":"ditto","commit_id":"e4a446b0536c0056d6931bf4e1a2ce42d58868a9"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"d041db5db61e9cf81d5b2d068cab50df9ad08855","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    for json_schema_file in json_schema_files:"},{"line_number":170,"context_line":"        try:"},{"line_number":171,"context_line":"            file \u003d join(metadata_path, json_schema_file)"},{"line_number":172,"context_line":"            with open(file) as json_file:"},{"line_number":173,"context_line":"                metadata \u003d json.load(json_file)"},{"line_number":174,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3ab451fb_d1b0248e","line":171,"updated":"2015-04-17 08:38:03.000000000","message":"nit: Could you rename this one to something which won\u0027t shadow built-in `file`? In `_export_data_to_file` file_name is used instead.","commit_id":"3e2f165aecba404b34771eedbd263c243b3008ea"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"d041db5db61e9cf81d5b2d068cab50df9ad08855","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                try:"},{"line_number":190,"context_line":"                    db_namespace \u003d session.query("},{"line_number":191,"context_line":"                        db_metadef.MetadefNamespace"},{"line_number":192,"context_line":"                    ).filter_by(namespace\u003dvalues[\u0027namespace\u0027]).one()"},{"line_number":193,"context_line":"                except sa_orm.exc.NoResultFound:"},{"line_number":194,"context_line":"                    db_namespace \u003d None"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3ab451fb_146e7ac9","line":192,"updated":"2015-04-17 08:38:03.000000000","message":"Same code is used twice in this method. Can you consider moving it to separate function?","commit_id":"3e2f165aecba404b34771eedbd263c243b3008ea"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"8f70d532ce39680ca7af870967cf8969a3aa6870","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                try:"},{"line_number":190,"context_line":"                    db_namespace \u003d session.query("},{"line_number":191,"context_line":"                        db_metadef.MetadefNamespace"},{"line_number":192,"context_line":"                    ).filter_by(namespace\u003dvalues[\u0027namespace\u0027]).one()"},{"line_number":193,"context_line":"                except sa_orm.exc.NoResultFound:"},{"line_number":194,"context_line":"                    db_namespace \u003d None"},{"line_number":195,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dac4157f_70a143a9","line":192,"in_reply_to":"3ab451fb_146e7ac9","updated":"2015-04-20 11:13:18.000000000","message":"Good catch, thanks!","commit_id":"3e2f165aecba404b34771eedbd263c243b3008ea"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"d041db5db61e9cf81d5b2d068cab50df9ad08855","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"                    db_namespace \u003d session.query("},{"line_number":209,"context_line":"                        db_metadef.MetadefNamespace"},{"line_number":210,"context_line":"                    ).filter_by(namespace\u003dvalues[\u0027namespace\u0027]).one()"},{"line_number":211,"context_line":"                elif not merge:"},{"line_number":212,"context_line":"                    LOG.info(_LI(\"Skipping namespace %s. It already exists \""},{"line_number":213,"context_line":"                                 \"in the database.\"), values[\u0027namespace\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"3ab451fb_94628ad7","line":210,"updated":"2015-04-17 08:38:03.000000000","message":"ditto","commit_id":"3e2f165aecba404b34771eedbd263c243b3008ea"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"d041db5db61e9cf81d5b2d068cab50df9ad08855","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                        rt.save(session\u003dsession)"},{"line_number":233,"context_line":"                        rt \u003d _get_resource_type_by_name(session,"},{"line_number":234,"context_line":"                                                        resource_type[\u0027name\u0027])"},{"line_number":235,"context_line":"                    elif prefer_new:"},{"line_number":236,"context_line":"                        val \u003d {\u0027updated_at\u0027: timeutils.utcnow()}"},{"line_number":237,"context_line":"                        rt.update(val)"},{"line_number":238,"context_line":"                        rt.save(session\u003dsession)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3ab451fb_f45c2eef","line":235,"updated":"2015-04-17 08:38:03.000000000","message":"Is this one necessary? Resource type haven\u0027t been changed anywhere and we just update its updated_at field. Is there some magic purpose we do this?","commit_id":"3e2f165aecba404b34771eedbd263c243b3008ea"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"8f70d532ce39680ca7af870967cf8969a3aa6870","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                        rt.save(session\u003dsession)"},{"line_number":233,"context_line":"                        rt \u003d _get_resource_type_by_name(session,"},{"line_number":234,"context_line":"                                                        resource_type[\u0027name\u0027])"},{"line_number":235,"context_line":"                    elif prefer_new:"},{"line_number":236,"context_line":"                        val \u003d {\u0027updated_at\u0027: timeutils.utcnow()}"},{"line_number":237,"context_line":"                        rt.update(val)"},{"line_number":238,"context_line":"                        rt.save(session\u003dsession)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dac4157f_30dd0b43","line":235,"in_reply_to":"3ab451fb_f45c2eef","updated":"2015-04-20 11:13:18.000000000","message":"It is necessary in case of any debug or history of changes. Resource type was inside a file that was prefered over existing data, so I think that we should clearly inform that it was not omitted.","commit_id":"3e2f165aecba404b34771eedbd263c243b3008ea"}]}
