)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"cebee4812abdb0b5d12854cdb0c53f46ca0aa2ad","unresolved":false,"context_lines":[{"line_number":14,"context_line":"* DELETE /vnf_packages/{vnfPkgId}"},{"line_number":15,"context_line":"* PUT    /vnf_packages/{vnfPkgId}/package_content"},{"line_number":16,"context_line":"* POST   /vnf_packages/{vnfPkgId}/package_content/upload_from_uri"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Partial-Implements: blueprint tosca-csar-mgmt-driver"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Co-Author: Neha Alhat \u003cneha.alhat@nttdata.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7faddb67_5df966c2","line":17,"updated":"2019-09-05 08:47:14.000000000","message":"missing GET /vnf_packges/{vnfPkgId}/vnfd","commit_id":"e9315992a8de0fe34da7fb606a76e173aef1c920"}],"tacker/api/views/vnf_packages.py":[{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9b4306ea33d07e5d444be379b1a43f7537206db9","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _get_software_images(self, vnf_flavors):"},{"line_number":40,"context_line":"        if not vnf_flavors:"},{"line_number":41,"context_line":"            return"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        software_images \u003d list()"},{"line_number":44,"context_line":"        for vnf_flavor in vnf_flavors:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_7612de0b","line":41,"range":{"start_line":41,"start_character":12,"end_line":41,"end_character":18},"updated":"2019-09-10 07:24:14.000000000","message":"Don\u0027t we needs to return empty dir or {\u0027softwareImages\u0027: software_images}?\n\ncurrent one will be null, which may leads a TypeError at line #98","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _get_software_images(self, vnf_flavors):"},{"line_number":40,"context_line":"        if not vnf_flavors:"},{"line_number":41,"context_line":"            return"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        software_images \u003d list()"},{"line_number":44,"context_line":"        for vnf_flavor in vnf_flavors:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_4b5fc20d","line":41,"range":{"start_line":41,"start_character":12,"end_line":41,"end_character":18},"in_reply_to":"5faad753_7612de0b","updated":"2019-09-12 08:33:44.000000000","message":"Once the package is onboarded, vnf deployment flavors will be always present. So we will remove this check from here and upload a new PS soon.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9b4306ea33d07e5d444be379b1a43f7537206db9","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _get_vnfd(self, vnf_package):"},{"line_number":67,"context_line":"        if not vnf_package.vnfd:"},{"line_number":68,"context_line":"            return"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        vnfd \u003d vnf_package.vnfd"},{"line_number":71,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_d602b2b4","line":68,"updated":"2019-09-10 07:24:14.000000000","message":"same","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _get_vnfd(self, vnf_package):"},{"line_number":67,"context_line":"        if not vnf_package.vnfd:"},{"line_number":68,"context_line":"            return"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        vnfd \u003d vnf_package.vnfd"},{"line_number":71,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_aba51606","line":68,"in_reply_to":"5faad753_d602b2b4","updated":"2019-09-12 08:33:44.000000000","message":"When the vnf package is onboarded, vnfd will be always present. So we will remove this check from here and upload a new PS.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"}],"tacker/api/vnfpkgm/v1/controller.py":[{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    @validation.schema(vnf_packages.create)"},{"line_number":54,"context_line":"    def create(self, request, body):"},{"line_number":55,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":56,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027create\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        vnf_package \u003d vnf_package_obj.VnfPackage(context\u003drequest.context)"},{"line_number":59,"context_line":"        vnf_package.onboarding_state \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_c13e33d9","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":60},"updated":"2019-09-12 08:11:09.000000000","message":"Why don\u0027t you catch exceptions.Forbidden from here?","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    @validation.schema(vnf_packages.create)"},{"line_number":54,"context_line":"    def create(self, request, body):"},{"line_number":55,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":56,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027create\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        vnf_package \u003d vnf_package_obj.VnfPackage(context\u003drequest.context)"},{"line_number":59,"context_line":"        vnf_package.onboarding_state \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_92572b03","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":60},"in_reply_to":"5faad753_c13e33d9","updated":"2019-09-12 08:33:44.000000000","message":"It\u0027s handled in expected_errors decorator.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @wsgi.expected_errors((http_client.FORBIDDEN, http_client.NOT_FOUND))"},{"line_number":73,"context_line":"    def show(self, request, id):"},{"line_number":74,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":75,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027show\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # check if id is of type uuid format"},{"line_number":78,"context_line":"        if not uuidutils.is_uuid_like(id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_81203bb2","line":75,"range":{"start_line":75,"start_character":8,"end_line":75,"end_character":58},"updated":"2019-09-12 08:11:09.000000000","message":"ditto","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    @wsgi.expected_errors((http_client.FORBIDDEN, http_client.NOT_FOUND))"},{"line_number":73,"context_line":"    def show(self, request, id):"},{"line_number":74,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":75,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027show\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # check if id is of type uuid format"},{"line_number":78,"context_line":"        if not uuidutils.is_uuid_like(id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_723cefbe","line":75,"range":{"start_line":75,"start_character":8,"end_line":75,"end_character":58},"in_reply_to":"5faad753_81203bb2","updated":"2019-09-12 08:33:44.000000000","message":"It\u0027s handled in expected_errors decorator.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    @wsgi.expected_errors((http_client.FORBIDDEN))"},{"line_number":93,"context_line":"    def index(self, request):"},{"line_number":94,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":95,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027index\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        vnf_packages \u003d vnf_package_obj.VnfPackagesList.get_all("},{"line_number":98,"context_line":"            request.context, expected_attrs\u003d[\"vnf_flavors\", \"vnfd\"])"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_011e8b6f","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":59},"updated":"2019-09-12 08:11:09.000000000","message":"ditto","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    @wsgi.expected_errors((http_client.FORBIDDEN))"},{"line_number":93,"context_line":"    def index(self, request):"},{"line_number":94,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":95,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027index\u0027)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        vnf_packages \u003d vnf_package_obj.VnfPackagesList.get_all("},{"line_number":98,"context_line":"            request.context, expected_attrs\u003d[\"vnf_flavors\", \"vnfd\"])"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_124b3b59","line":95,"range":{"start_line":95,"start_character":8,"end_line":95,"end_character":59},"in_reply_to":"5faad753_011e8b6f","updated":"2019-09-12 08:33:44.000000000","message":"It\u0027s handled in expected_errors decorator.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        if vnf_package.operational_state \u003d\u003d \\"},{"line_number":121,"context_line":"                fields.PackageOperationalStateType.ENABLED:"},{"line_number":122,"context_line":"            msg \u003d _(\"VNF Package %(id)s operational state is %(state)s\")"},{"line_number":123,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":124,"context_line":"                explanation\u003dmsg % {"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_81c7db45","line":121,"range":{"start_line":121,"start_character":23,"end_line":121,"end_character":58},"updated":"2019-09-12 08:11:09.000000000","message":"PackageUsageStateType.IN_USE","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                           http_client.CONFLICT))"},{"line_number":134,"context_line":"    def upload_vnf_package_content(self, request, id, body):"},{"line_number":135,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":136,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027upload_package_content\u0027)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # check if id is of type uuid format"},{"line_number":139,"context_line":"        if not uuidutils.is_uuid_like(id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_610e5f3c","line":136,"range":{"start_line":136,"start_character":8,"end_line":136,"end_character":76},"updated":"2019-09-12 08:11:09.000000000","message":"ditto","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                           http_client.CONFLICT))"},{"line_number":134,"context_line":"    def upload_vnf_package_content(self, request, id, body):"},{"line_number":135,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":136,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027upload_package_content\u0027)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # check if id is of type uuid format"},{"line_number":139,"context_line":"        if not uuidutils.is_uuid_like(id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_d27603a5","line":136,"range":{"start_line":136,"start_character":8,"end_line":136,"end_character":76},"in_reply_to":"5faad753_610e5f3c","updated":"2019-09-12 08:33:44.000000000","message":"It\u0027s handled in expected_errors decorator.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            (location, size, checksum, multihash,"},{"line_number":164,"context_line":"            loc_meta) \u003d glance_store.store_csar(context, id, body)"},{"line_number":165,"context_line":"        except exceptions.UploadFailedToGlanceStore:"},{"line_number":166,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":167,"context_line":"                vnf_package.onboarding_state \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_f7f3f171","line":164,"range":{"start_line":164,"start_character":24,"end_line":164,"end_character":66},"updated":"2019-09-12 08:11:09.000000000","message":"VNF Package is stored by tacker.service in case of local file uploading but on the other hand, it is stored by tacker.conductor in case of web-download. IMO, we should store VNF Package either tacker.server or tacker.conductor in both case. Of course, we may want to spawn a thread to do it.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            (location, size, checksum, multihash,"},{"line_number":164,"context_line":"            loc_meta) \u003d glance_store.store_csar(context, id, body)"},{"line_number":165,"context_line":"        except exceptions.UploadFailedToGlanceStore:"},{"line_number":166,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":167,"context_line":"                vnf_package.onboarding_state \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_52dd336e","line":164,"range":{"start_line":164,"start_character":24,"end_line":164,"end_character":66},"in_reply_to":"5faad753_f7f3f171","updated":"2019-09-12 08:33:44.000000000","message":"I don\u0027t think it\u0027s advisable to pass CSAR of huge size on RPC. also, at present it only supports to pass JSON data over RPC, hence added CSAR zip file in glance store in tacker.service for direct-file case.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":167,"context_line":"                vnf_package.onboarding_state \u003d ("},{"line_number":168,"context_line":"                    fields.PackageOnboardingStateType.CREATED)"},{"line_number":169,"context_line":"                vnf_package.save()"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        vnf_package.onboarding_state \u003d ("},{"line_number":172,"context_line":"            fields.PackageOnboardingStateType.PROCESSING)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_5cc6aa9c","line":169,"updated":"2019-09-12 08:11:09.000000000","message":"Don\u0027t we need to add return?","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":167,"context_line":"                vnf_package.onboarding_state \u003d ("},{"line_number":168,"context_line":"                    fields.PackageOnboardingStateType.CREATED)"},{"line_number":169,"context_line":"                vnf_package.save()"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        vnf_package.onboarding_state \u003d ("},{"line_number":172,"context_line":"            fields.PackageOnboardingStateType.PROCESSING)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_92a5eb06","line":169,"in_reply_to":"5faad753_5cc6aa9c","updated":"2019-09-12 08:33:44.000000000","message":"Calling save method of vnf_package, so all updated fields are available in the same object. also, upload_vnf_package_content doesn\u0027t need to return any response body back to the user.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    def upload_vnf_package_from_uri(self, request, id, body):"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":190,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027upload_from_uri\u0027)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # check if id is of type uuid format"},{"line_number":193,"context_line":"        if not uuidutils.is_uuid_like(id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_dcfffafe","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":69},"updated":"2019-09-12 08:11:09.000000000","message":"ditto","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"8e7e8d3eed563623fdfb444ec5856fb3d5051635","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    def upload_vnf_package_from_uri(self, request, id, body):"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        context \u003d request.environ[\u0027tacker.context\u0027]"},{"line_number":190,"context_line":"        context.can(vnf_package_policies.VNFPKGM % \u0027upload_from_uri\u0027)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        # check if id is of type uuid format"},{"line_number":193,"context_line":"        if not uuidutils.is_uuid_like(id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_b2a827db","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":69},"in_reply_to":"5faad753_dcfffafe","updated":"2019-09-12 08:33:44.000000000","message":"It\u0027s handled in expected_errors decorator.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"}],"tacker/common/csar_utils.py":[{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"cebee4812abdb0b5d12854cdb0c53f46ca0aa2ad","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        return"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    for artifact_value in artifacts.values():"},{"line_number":49,"context_line":"        if \u0027type\u0027 in artifact_value:"},{"line_number":50,"context_line":"            if artifact_value[\u0027type\u0027] \u003d\u003d \u0027tosca.artifacts.nfv.SwImage\u0027:"},{"line_number":51,"context_line":"                return artifact_value"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def _get_vnf_data(nodetemplates):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_fdb7f2d6","line":51,"range":{"start_line":49,"start_character":0,"end_line":51,"end_character":37},"updated":"2019-09-05 08:47:14.000000000","message":"Could you consider to support short notation of artifact, i.e.\n\n  artifacts:\n    \u003cartifact_name\u003e: \u003cartifact_file_URI\u003e\n\nBelow is a suggestion of changes.\n\n  for artifact_value in artifacts.values():\n      if type(artifact_value) \u003d\u003d dict:\n          if \u0027type\u0027 in artifact_value:\n              if artifact_value[\u0027type\u0027] \u003d\u003d \u0027tosca.artifacts.nfv.SwImage\u0027:\n                  return artifact_value\n      else:\n          return {\u0027file\u0027: artifact_value}","commit_id":"e9315992a8de0fe34da7fb606a76e173aef1c920"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9b4306ea33d07e5d444be379b1a43f7537206db9","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def load_csar_data(context, package_uuid, zip_path):"},{"line_number":243,"context_line":"    extract_zip_path \u003d os.path.join(CONF.vnf_package.vnf_package_csar_path,"},{"line_number":244,"context_line":"                                    package_uuid)"},{"line_number":245,"context_line":"    _extract_csar_zip_file(zip_path, extract_zip_path)"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_33d8f87d","line":243,"range":{"start_line":243,"start_character":36,"end_line":243,"end_character":74},"updated":"2019-09-10 07:24:14.000000000","message":"validate path existence before accessing.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"de24d363a927aad67f03891f927c1a91da76b1b5","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def load_csar_data(context, package_uuid, zip_path):"},{"line_number":243,"context_line":"    extract_zip_path \u003d os.path.join(CONF.vnf_package.vnf_package_csar_path,"},{"line_number":244,"context_line":"                                    package_uuid)"},{"line_number":245,"context_line":"    _extract_csar_zip_file(zip_path, extract_zip_path)"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_5e99b476","line":243,"range":{"start_line":243,"start_character":36,"end_line":243,"end_character":74},"in_reply_to":"5faad753_33d8f87d","updated":"2019-09-12 14:51:48.000000000","message":"I have added check in conductor server init_host method. If the path doesn\u0027t exists, the conductor service will be terminated.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"16e9087dc9ff2a336dffb34f402df69eeffddb25","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    artifacts \u003d node_tpl.get(\u0027artifacts\u0027)"},{"line_number":207,"context_line":"    if artifacts:"},{"line_number":208,"context_line":"        for key, value in artifacts.items():"},{"line_number":209,"context_line":"            if value.get(\u0027type\u0027) \u003d\u003d \u0027tosca.artifacts.nfv.SwImage\u0027:"},{"line_number":210,"context_line":"                artifact_type.append(value.get(\u0027type\u0027))"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if len(artifact_type) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_ae133f66","line":209,"range":{"start_line":209,"start_character":11,"end_line":209,"end_character":66},"updated":"2019-09-18 07:43:16.000000000","message":"As I commented on patchset 5, I would like to support short notation of artifact, i.e.\n\n  artifacts:\n    \u003cartifact_name\u003e: \u003cartifact_file_URI\u003e\n\nIf short notation, we don\u0027t need to validate type of the artifact (we have to suppose it is tosca.artifacts.nfv.SwImage). Change can be done in additional patch if needed.","commit_id":"8dc07cc3896c38fc05a8be332e11861906b908f9"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"d21df109f2cbaa7c305336fa9d85ef244ae9b535","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    artifacts \u003d node_tpl.get(\u0027artifacts\u0027)"},{"line_number":207,"context_line":"    if artifacts:"},{"line_number":208,"context_line":"        for key, value in artifacts.items():"},{"line_number":209,"context_line":"            if value.get(\u0027type\u0027) \u003d\u003d \u0027tosca.artifacts.nfv.SwImage\u0027:"},{"line_number":210,"context_line":"                artifact_type.append(value.get(\u0027type\u0027))"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if len(artifact_type) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_9788bdc6","line":209,"range":{"start_line":209,"start_character":11,"end_line":209,"end_character":66},"in_reply_to":"3fa7e38b_9208dd28","updated":"2019-09-19 07:21:09.000000000","message":"See TOSCA [1]  3.6.7.2.1 for short notation of artifact. And also SOL 001 [2] 6.8.3.7 describes below.\n\nNode templates of type tosca.nodes.nfv.Vdu.Compute may contain an artifact definition of type tosca.artifacts.nfv.SwImage. There shall be a maximum number of one such artifact definition in a tosca.nodes.nfv.Vdu.Compute node template.\n\nSo, if Vdu has a artifact definition in short notation, we have no way except supposing it\u0027s type is tosca.artifacts.nfv.SwImge.\n\n[1] https://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/os/TOSCA-Simple-Profile-YAML-v1.2-os.html#DEFN_ENTITY_ARTIFACT_DEF\n[2] https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/001/02.06.01_60/gs_NFV-SOL001v020601p.pdf","commit_id":"8dc07cc3896c38fc05a8be332e11861906b908f9"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"ed251c5a1d6c8700fbf6b345eccc434339fc81c9","unresolved":false,"context_lines":[{"line_number":206,"context_line":"    artifacts \u003d node_tpl.get(\u0027artifacts\u0027)"},{"line_number":207,"context_line":"    if artifacts:"},{"line_number":208,"context_line":"        for key, value in artifacts.items():"},{"line_number":209,"context_line":"            if value.get(\u0027type\u0027) \u003d\u003d \u0027tosca.artifacts.nfv.SwImage\u0027:"},{"line_number":210,"context_line":"                artifact_type.append(value.get(\u0027type\u0027))"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if len(artifact_type) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_9208dd28","line":209,"range":{"start_line":209,"start_character":11,"end_line":209,"end_character":66},"in_reply_to":"3fa7e38b_ae133f66","updated":"2019-09-18 12:29:28.000000000","message":"In case type is missing, do we need to assume it\u0027s tosca.artifacts.nfv.SwImage?\nCan you please give us the reference where this is specified so that we can add a comment in the code accordingly.","commit_id":"8dc07cc3896c38fc05a8be332e11861906b908f9"}],"tacker/conductor/conductor_server.py":[{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9b4306ea33d07e5d444be379b1a43f7537206db9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from tacker.common import safe_utils"},{"line_number":34,"context_line":"from tacker.common import topics"},{"line_number":35,"context_line":"from tacker.common import utils"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"import tacker.conf"},{"line_number":38,"context_line":"from tacker import context as t_context"},{"line_number":39,"context_line":"from tacker.db.common_services import common_services_db"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_f6eeceb2","line":36,"updated":"2019-09-10 07:24:14.000000000","message":"this blank line can be removed","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        self._onboard_vnf_package(context, vnf_package, vnf_data, flavors)"},{"line_number":199,"context_line":"        vnf_package.onboarding_state \u003d ("},{"line_number":200,"context_line":"            fields.PackageOnboardingStateType.ONBOARDED)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        vnf_package.save()"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    @revert_upload_vnf_package"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_6e60a8a6","line":201,"updated":"2019-09-12 08:11:09.000000000","message":"operationalState should be changed to ENABLED here.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        vnf_package.onboarding_state \u003d ("},{"line_number":230,"context_line":"            fields.PackageOnboardingStateType.ONBOARDED)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        vnf_package.save()"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def delete_vnf_package(self, context, vnf_package):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_77462124","line":231,"updated":"2019-09-12 08:11:09.000000000","message":"ditto","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"}],"tacker/glance_store/store.py":[{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9b4306ea33d07e5d444be379b1a43f7537206db9","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 glance_store"},{"line_number":17,"context_line":"from glance_store import exceptions as store_exceptions"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":"from oslo_utils import encodeutils"},{"line_number":21,"context_line":"from oslo_utils import excutils"},{"line_number":22,"context_line":"from six.moves import urllib"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from tacker.common import exceptions"},{"line_number":25,"context_line":"from tacker.common import utils"},{"line_number":26,"context_line":"import tacker.conf"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d tacker.conf.CONF"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_56dd6240","line":26,"range":{"start_line":16,"start_character":0,"end_line":26,"end_character":18},"updated":"2019-09-10 07:24:14.000000000","message":"Please follow import guidelines:\n\n\u003cstandard lib imports\u003e\n\n\u003c3rd party imports\u003e\n\n\u003ctacker lib imports\u003e","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9b4306ea33d07e5d444be379b1a43f7537206db9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":50,"context_line":"            LOG.warn(\"Failed to open csar URL: %s\", url)"},{"line_number":51,"context_line":"            exp.reraise \u003d False"},{"line_number":52,"context_line":"            raise exceptions.VNFPackageURLInvalid(url\u003durl)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def store_csar(context, package_uuid, body):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_167e0a19","line":52,"range":{"start_line":52,"start_character":12,"end_line":52,"end_character":58},"updated":"2019-09-10 07:24:14.000000000","message":"excutils.save_and_reraise_exception and raise  should not be used together.\nIf it needed to raise customized errors, do not use excutils.save_and_reraise_exception","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"ed4423be83067996c5a5ff225631b85790885d26","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    except Exception as e:"},{"line_number":70,"context_line":"        with excutils.save_and_reraise_exception() as exp:"},{"line_number":71,"context_line":"            error \u003d encodeutils.exception_to_unicode(e)"},{"line_number":72,"context_line":"            LOG.warn(\"Failed to store csar data in glance store for \""},{"line_number":73,"context_line":"                     \"package %(uuid)s due to error: %(error)s\","},{"line_number":74,"context_line":"                     {\"uuid\": package_uuid,"},{"line_number":75,"context_line":"                     \"error\": error})"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_5c28eae0","line":72,"range":{"start_line":72,"start_character":48,"end_line":72,"end_character":63},"updated":"2019-09-12 08:11:09.000000000","message":"IMO, this term should be remove as it is misleading. users may think tacker always store VNF Package to Glance.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":1011,"name":"Tushar Patil","email":"tushar.vitthal.patil@gmail.com","username":"tpatil"},"change_message_id":"141d6bd93d473f4bc98eabcd04dd19c9207e1756","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    except Exception as e:"},{"line_number":70,"context_line":"        with excutils.save_and_reraise_exception() as exp:"},{"line_number":71,"context_line":"            error \u003d encodeutils.exception_to_unicode(e)"},{"line_number":72,"context_line":"            LOG.warn(\"Failed to store csar data in glance store for \""},{"line_number":73,"context_line":"                     \"package %(uuid)s due to error: %(error)s\","},{"line_number":74,"context_line":"                     {\"uuid\": package_uuid,"},{"line_number":75,"context_line":"                     \"error\": error})"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_249cec68","line":72,"range":{"start_line":72,"start_character":48,"end_line":72,"end_character":63},"in_reply_to":"5faad753_5c28eae0","updated":"2019-09-12 13:18:28.000000000","message":"Logs are accessible only to operators and not end users.\n\n\"Failed to store csar data for package %(uuid)s due to error : %(error)s\" enough?\n\nThere are also few other occurrence of glance store in this module, I can remove glance store from all places, is it acceptable?","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9b4306ea33d07e5d444be379b1a43f7537206db9","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                     {\"uuid\": package_uuid,"},{"line_number":75,"context_line":"                     \"error\": error})"},{"line_number":76,"context_line":"            exp.reraise \u003d False"},{"line_number":77,"context_line":"            raise exceptions.UploadFailedToGlanceStore(uuid\u003dpackage_uuid,"},{"line_number":78,"context_line":"                                                       error\u003derror)"},{"line_number":79,"context_line":"    finally:"},{"line_number":80,"context_line":"        if hasattr(data_iter, \u0027close\u0027):"},{"line_number":81,"context_line":"            data_iter.close()"}],"source_content_type":"text/x-python","patch_set":10,"id":"5faad753_d677123a","line":78,"range":{"start_line":77,"start_character":12,"end_line":78,"end_character":67},"updated":"2019-09-10 07:24:14.000000000","message":"same as above.","commit_id":"d11d814c4936e4380f843bd81c8622a6a33f386c"}],"tacker/wsgi.py":[{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"cebee4812abdb0b5d12854cdb0c53f46ca0aa2ad","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    return encodeutils.to_utf8(body)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def expected_errors(errors):"},{"line_number":98,"context_line":"    \"\"\"Decorator for Restful API methods which specifies expected exceptions."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    Specify which exceptions may occur when an API method is called. If an"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_3df90a4d","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":28},"updated":"2019-09-05 08:47:14.000000000","message":"IMO, this decorator is better to be placed into api/api_common.py.","commit_id":"e9315992a8de0fe34da7fb606a76e173aef1c920"},{"author":{"_account_id":26588,"name":"Hiroyuki Jo","email":"joxyuki@gmail.com","username":"joxyuki"},"change_message_id":"cebee4812abdb0b5d12854cdb0c53f46ca0aa2ad","unresolved":false,"context_lines":[{"line_number":877,"context_line":"        return False"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"def response(code):"},{"line_number":881,"context_line":"    \"\"\"Attaches response code to a method."},{"line_number":882,"context_line":""},{"line_number":883,"context_line":"    This decorator associates a response code with a method.  Note"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_9d835ea9","line":880,"range":{"start_line":880,"start_character":3,"end_line":880,"end_character":12},"updated":"2019-09-05 08:47:14.000000000","message":"IMO, this decorator is better to be placed into api/api_common.py","commit_id":"e9315992a8de0fe34da7fb606a76e173aef1c920"}]}
