)]}'
{"doc/source/architecture.rst":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"bbb11c7ed7614164d6b8abdd13654fc4bccf4f4c","unresolved":false,"context_lines":[{"line_number":133,"context_line":"A general class under each backend named ``Driver`` exists to provide an"},{"line_number":134,"context_line":"abstract base class for any implementations, identifying the expected service"},{"line_number":135,"context_line":"implementations. The drivers for the services are:"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"* :mod:`keystone.assignment.core.Driver`"},{"line_number":138,"context_line":"* :mod:`keystone.assignment.core.RoleDriver`"},{"line_number":139,"context_line":"* :mod:`keystone.catalog.core.Driver`"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3a961159_e365b145","line":136,"updated":"2015-01-05 23:16:22.000000000","message":"Well, I think it would be clearer if we had separate naming for the two parts of assignment: `engine` and `role`.","commit_id":"9dfc5702b31d2fff6c0b79c23fe11f551fa90428"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"bbb11c7ed7614164d6b8abdd13654fc4bccf4f4c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"abstract base class for any implementations, identifying the expected service"},{"line_number":135,"context_line":"implementations. The drivers for the services are:"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"* :mod:`keystone.assignment.core.Driver`"},{"line_number":138,"context_line":"* :mod:`keystone.assignment.core.RoleDriver`"},{"line_number":139,"context_line":"* :mod:`keystone.catalog.core.Driver`"},{"line_number":140,"context_line":"* :mod:`keystone.identity.core.Driver`"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3a961159_6351c161","line":137,"updated":"2015-01-05 23:16:22.000000000","message":"So this driver would be called `keystone.assignment.engine.core.Driver` or `keystone.assignment.mapper.core.Driver`","commit_id":"9dfc5702b31d2fff6c0b79c23fe11f551fa90428"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"bbb11c7ed7614164d6b8abdd13654fc4bccf4f4c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"implementations. The drivers for the services are:"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"* :mod:`keystone.assignment.core.Driver`"},{"line_number":138,"context_line":"* :mod:`keystone.assignment.core.RoleDriver`"},{"line_number":139,"context_line":"* :mod:`keystone.catalog.core.Driver`"},{"line_number":140,"context_line":"* :mod:`keystone.identity.core.Driver`"},{"line_number":141,"context_line":"* :mod:`keystone.policy.core.Driver`"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3a961159_03ce3d2d","line":138,"updated":"2015-01-05 23:16:22.000000000","message":"And this one: `keystone.assignment.role.core.Driver`\n\n---\n\nIn few words, the rationally is: keystone.assignment.engine is something that uses everything in keystone.assignment (except for \u0027role\u0027 and itself) and returns what an actor can do on a resource, i.e, keystone.assignment.role.\n\n---\n\nLike this, it would be easier to the deployer to add a new assignment logic. She only needs to completly drop `keystone.assignment.engine` and plug her own implementation.\nAs we have today, she would need to delete the engine Driver class (that hasn\u0027t an appropriate name and is inside the same file of RoleDriver) and provide her implementation.\n\nNote that `keystone.assignment.role` will never be removed, since it handles what really matters: the roles/capabilities, that goes in the token.\n\nIn addition, it would be easier to:\n\ni) add a new `keystone.assignment.domain_role`, if needed;\n\nii) rename `keystone.assignment.role` to `keystone.assignment.capability` and `keystone.assignment.domain_role` to `keystone.assignment.role`, if needed;\n\niii) add a new `keystone.assignment.\u003cattribute_X\u003e`, if needed.","commit_id":"9dfc5702b31d2fff6c0b79c23fe11f551fa90428"}],"doc/source/configuration.rst":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"bbb11c7ed7614164d6b8abdd13654fc4bccf4f4c","unresolved":false,"context_lines":[{"line_number":1498,"context_line":"  [identity]"},{"line_number":1499,"context_line":"  driver \u003d keystone.identity.backends.ldap.Identity"},{"line_number":1500,"context_line":""},{"line_number":1501,"context_line":"  [assignment]"},{"line_number":1502,"context_line":"  driver \u003d keystone.assignment.backends.sql.Assignment"},{"line_number":1503,"context_line":""},{"line_number":1504,"context_line":"  [role]"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3a961159_c32b55e9","line":1501,"updated":"2015-01-05 23:16:22.000000000","message":"Again, as I pointed out at doc/source/architecture.rst, it would be clearer if we had something like assignment.engine here, in order to highlight the difference between the two parts of assignment.","commit_id":"9dfc5702b31d2fff6c0b79c23fe11f551fa90428"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"bbb11c7ed7614164d6b8abdd13654fc4bccf4f4c","unresolved":false,"context_lines":[{"line_number":1501,"context_line":"  [assignment]"},{"line_number":1502,"context_line":"  driver \u003d keystone.assignment.backends.sql.Assignment"},{"line_number":1503,"context_line":""},{"line_number":1504,"context_line":"  [role]"},{"line_number":1505,"context_line":"  driver \u003d keystone.assignment.role_backends.sql.Role"},{"line_number":1506,"context_line":""},{"line_number":1507,"context_line":"With the above configuration, Keystone will only lookup identity related"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3a961159_433f6525","line":1504,"updated":"2015-01-05 23:16:22.000000000","message":"And this one would be called assignment.role","commit_id":"9dfc5702b31d2fff6c0b79c23fe11f551fa90428"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":491,"context_line":"        ``Keystone``.  This option is set in the ``[assignment]`` section of the"},{"line_number":492,"context_line":"        configuration file."},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        Currently ``assignment`` has caching for ``project``, ``domain``, and ``role``"},{"line_number":495,"context_line":"        specific requests (primarily around the CRUD actions).  Caching is currently not"},{"line_number":496,"context_line":"        implemented on grants.  The list (``list_projects``, ``list_domains``, etc)"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3a961159_63318b0a","line":493,"updated":"2015-01-07 14:33:40.000000000","message":"Since roles don\u0027t belong to assignment backend anymore, please remove \", and ``role``\".","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":491,"context_line":"        ``Keystone``.  This option is set in the ``[assignment]`` section of the"},{"line_number":492,"context_line":"        configuration file."},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        Currently ``assignment`` has caching for ``project``, ``domain``, and ``role``"},{"line_number":495,"context_line":"        specific requests (primarily around the CRUD actions).  Caching is currently not"},{"line_number":496,"context_line":"        implemented on grants.  The list (``list_projects``, ``list_domains``, etc)"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3a961159_cebc1fb8","line":493,"in_reply_to":"3a961159_63318b0a","updated":"2015-01-09 22:10:28.000000000","message":"Done","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":512,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":513,"context_line":"        ``Keystone``.  This option is set in the ``[role]`` section of the"},{"line_number":514,"context_line":"        configuration file."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"For more information about the different backends (and configuration options):"},{"line_number":517,"context_line":"    * `dogpile.cache.backends.memory`_"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3a961159_1e8c9c7f","line":514,"updated":"2015-01-07 14:33:40.000000000","message":"It could be useful to add information here saying that \"Currently ``role`` only has caching for ``role`` entities.\", since this info has to be removed from line 494.","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        that can be set to a value above or below the global ``expiration_time``"},{"line_number":512,"context_line":"        default, allowing for different caching behavior from the other systems in"},{"line_number":513,"context_line":"        ``Keystone``.  This option is set in the ``[role]`` section of the"},{"line_number":514,"context_line":"        configuration file."},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"For more information about the different backends (and configuration options):"},{"line_number":517,"context_line":"    * `dogpile.cache.backends.memory`_"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3a961159_4e9aef62","line":514,"in_reply_to":"3a961159_1e8c9c7f","updated":"2015-01-09 22:10:28.000000000","message":"Done","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"With the above configuration, Keystone will only lookup identity related"},{"line_number":1508,"context_line":"information such users, groups, and group membership from the directory,"},{"line_number":1509,"context_line":"while assignment related information will be provided by the SQL backend."},{"line_number":1510,"context_line":"Also note that if there is an LDAP Identity, and no assignment or role backend"},{"line_number":1511,"context_line":"is specified, they will default to LDAP. Although this may seem"},{"line_number":1512,"context_line":"counterintuitive, it is provided for backwards compatibility. Nonetheless,"},{"line_number":1513,"context_line":"the explicit option will always override the implicit option, so specifying"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3a961159_9e088c81","line":1510,"updated":"2015-01-07 14:33:40.000000000","message":"Assignment and Role, starting with uppercase letter, if needs to be in accordance with Identity.","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"With the above configuration, Keystone will only lookup identity related"},{"line_number":1508,"context_line":"information such users, groups, and group membership from the directory,"},{"line_number":1509,"context_line":"while assignment related information will be provided by the SQL backend."},{"line_number":1510,"context_line":"Also note that if there is an LDAP Identity, and no assignment or role backend"},{"line_number":1511,"context_line":"is specified, they will default to LDAP. Although this may seem"},{"line_number":1512,"context_line":"counterintuitive, it is provided for backwards compatibility. Nonetheless,"},{"line_number":1513,"context_line":"the explicit option will always override the implicit option, so specifying"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3a961159_6ecb2b53","line":1510,"in_reply_to":"3a961159_9e088c81","updated":"2015-01-09 22:10:28.000000000","message":"I think it is \"Identity\" that is out of sync with the rest of the text, I\u0027ll raise a separate defect to fix that","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"}],"etc/keystone.conf.sample":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f5247c701b848f09fc3994ce1711e8e90d0036ed","unresolved":false,"context_lines":[{"line_number":454,"context_line":"# They can be relative to any directory in the search path"},{"line_number":455,"context_line":"# defined by the config_dir option, or absolute paths. The"},{"line_number":456,"context_line":"# file defined by policy_file must exist for these directories"},{"line_number":457,"context_line":"# to be searched. (multi valued)"},{"line_number":458,"context_line":"#policy_dirs\u003dpolicy.d"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"3a961159_65875ed8","line":457,"updated":"2014-12-29 21:15:31.000000000","message":"looks master conf.sample is current is out of sync with openstack.common.policy","commit_id":"93813888f44df302a5e37a9bb882dc15b27001e0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"5001dfddebf03c19e5569ee97cd4d683b9d1cb19","unresolved":false,"context_lines":[{"line_number":454,"context_line":"# They can be relative to any directory in the search path"},{"line_number":455,"context_line":"# defined by the config_dir option, or absolute paths. The"},{"line_number":456,"context_line":"# file defined by policy_file must exist for these directories"},{"line_number":457,"context_line":"# to be searched. (multi valued)"},{"line_number":458,"context_line":"#policy_dirs\u003dpolicy.d"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"3a961159_c52d72aa","line":457,"updated":"2014-12-29 21:43:58.000000000","message":"looks like master conf.sample is out of sync with master keystone.openstack.common.policy","commit_id":"44bf3c59c96e1abb72b0fe7de5792b1af1530b01"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":1292,"context_line":"[role]"},{"line_number":1293,"context_line":""},{"line_number":1294,"context_line":"#"},{"line_number":1295,"context_line":"# Options defined in keystone"},{"line_number":1296,"context_line":"#"},{"line_number":1297,"context_line":""},{"line_number":1298,"context_line":"# Role backend driver. (string value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"3a961159_deda14e8","line":1295,"updated":"2015-01-07 14:33:40.000000000","message":"(nit): Just to be in accordance, why not use \u0027# From keystone\u0027, as all the other sections do.","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":1292,"context_line":"[role]"},{"line_number":1293,"context_line":""},{"line_number":1294,"context_line":"#"},{"line_number":1295,"context_line":"# Options defined in keystone"},{"line_number":1296,"context_line":"#"},{"line_number":1297,"context_line":""},{"line_number":1298,"context_line":"# Role backend driver. (string value)"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"3a961159_4ee82fb3","line":1295,"in_reply_to":"3a961159_deda14e8","updated":"2015-01-09 22:10:28.000000000","message":"Actually I think this must be a merge hiccup, since that text is generated by our sample generator...which changed while this patch was in flight....I\u0027ll regenerate it...","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"}],"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c8e372ad94ca3eb5de8e05249e19a3225c2a51ce","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            role_assignments.append(assignment)"},{"line_number":419,"context_line":"        return role_assignments"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":422,"context_line":"        # NOTE(henry-nash): The ldap driver doesn\u0027t support domain assignments"},{"line_number":423,"context_line":"        # so there is no work to do here."},{"line_number":424,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_c62f3f3d","line":421,"updated":"2014-12-29 17:06:33.000000000","message":"this is not needed in this patch, will remove","commit_id":"55e27cce1a0b7b04f07481c65bd867b0b930d37f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"c8e372ad94ca3eb5de8e05249e19a3225c2a51ce","unresolved":false,"context_lines":[{"line_number":520,"context_line":"    options_name \u003d \u0027role\u0027"},{"line_number":521,"context_line":"    attribute_options_names \u003d {\u0027name\u0027: \u0027name\u0027}"},{"line_number":522,"context_line":"    immutable_attrs \u003d [\u0027id\u0027]"},{"line_number":523,"context_line":"    model \u003d models.Role"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def __init__(self, conf, user_api):"},{"line_number":526,"context_line":"        super(RoleApi, self).__init__(conf)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_861537e7","line":523,"updated":"2014-12-29 17:06:33.000000000","message":"the above attributes should be defined once between here and the role backend","commit_id":"55e27cce1a0b7b04f07481c65bd867b0b930d37f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import ldap.filter"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone import assignment"},{"line_number":22,"context_line":"from keystone.assignment.role_backends.ldap import RoleLDAPStructureMixin"},{"line_number":23,"context_line":"from keystone import clean"},{"line_number":24,"context_line":"from keystone.common import driver_hints"},{"line_number":25,"context_line":"from keystone.common import ldap as common_ldap"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_424ce99d","line":22,"updated":"2015-01-02 17:16:29.000000000","message":"should we be importing classes?","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import ldap.filter"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from keystone import assignment"},{"line_number":22,"context_line":"from keystone.assignment.role_backends.ldap import RoleLDAPStructureMixin"},{"line_number":23,"context_line":"from keystone import clean"},{"line_number":24,"context_line":"from keystone.common import driver_hints"},{"line_number":25,"context_line":"from keystone.common import ldap as common_ldap"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_3cf37d0b","line":22,"in_reply_to":"3a961159_424ce99d","updated":"2015-01-03 02:50:16.000000000","message":"nope, good point! Fixed.","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":509,"context_line":"# TODO(termie): turn this into a data object and move logic to driver"},{"line_number":510,"context_line":"# NOTE(heny-nash): The RoleLDAPStructureMixin class enables the sharing of the"},{"line_number":511,"context_line":"# LDAP structure between here and the role backend LDAP, no methods are shared."},{"line_number":512,"context_line":"class RoleApi(RoleLDAPStructureMixin, common_ldap.BaseLdap):"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def __init__(self, conf, user_api):"},{"line_number":515,"context_line":"        super(RoleApi, self).__init__(conf)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_c257f925","line":512,"updated":"2015-01-02 17:16:29.000000000","message":"should we reference this as: \n\n    class RoleApi(ldap.RoleLdapStructureMixin, common_ldap.BaseLdap):","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":509,"context_line":"# TODO(termie): turn this into a data object and move logic to driver"},{"line_number":510,"context_line":"# NOTE(heny-nash): The RoleLDAPStructureMixin class enables the sharing of the"},{"line_number":511,"context_line":"# LDAP structure between here and the role backend LDAP, no methods are shared."},{"line_number":512,"context_line":"class RoleApi(RoleLDAPStructureMixin, common_ldap.BaseLdap):"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    def __init__(self, conf, user_api):"},{"line_number":515,"context_line":"        super(RoleApi, self).__init__(conf)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_1cec0129","line":512,"in_reply_to":"3a961159_c257f925","updated":"2015-01-03 02:50:16.000000000","message":"you are correct, fixed.","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":391,"context_line":"    def delete_grant(self, role_id, user_id\u003dNone, group_id\u003dNone,"},{"line_number":392,"context_line":"                     domain_id\u003dNone, project_id\u003dNone,"},{"line_number":393,"context_line":"                     inherited_to_projects\u003dFalse):"},{"line_number":394,"context_line":"        self.get_role(role_id)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        if domain_id:"},{"line_number":397,"context_line":"            self.get_domain(domain_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_945f8c0e","side":"PARENT","line":394,"updated":"2015-01-07 14:33:40.000000000","message":"So all those checks for the validity of the provided role for grant CRUD are now done by the manager. Nice!","commit_id":"31807b4cd69c9ffe08b416505eedb4729aab746f"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        nullable\u003dFalse)"},{"line_number":776,"context_line":"    actor_id \u003d sql.Column(sql.String(64), nullable\u003dFalse, index\u003dTrue)"},{"line_number":777,"context_line":"    target_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":778,"context_line":"    role_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027role.id\u0027),"},{"line_number":779,"context_line":"                         nullable\u003dFalse)"},{"line_number":780,"context_line":"    inherited \u003d sql.Column(sql.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":781,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027type\u0027, \u0027actor_id\u0027, \u0027target_id\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_949cec6b","side":"PARENT","line":778,"updated":"2015-01-07 14:33:40.000000000","message":"Since the same Role table is declared at `keystone/assignment/role_backends/sql.py`, why not keep this constraint?","commit_id":"31807b4cd69c9ffe08b416505eedb4729aab746f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        nullable\u003dFalse)"},{"line_number":776,"context_line":"    actor_id \u003d sql.Column(sql.String(64), nullable\u003dFalse, index\u003dTrue)"},{"line_number":777,"context_line":"    target_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":778,"context_line":"    role_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027role.id\u0027),"},{"line_number":779,"context_line":"                         nullable\u003dFalse)"},{"line_number":780,"context_line":"    inherited \u003d sql.Column(sql.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":781,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027type\u0027, \u0027actor_id\u0027, \u0027target_id\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_ee61db39","side":"PARENT","line":778,"in_reply_to":"3a961159_949cec6b","updated":"2015-01-09 22:10:28.000000000","message":"Well, we *could*, although we then require roles to be stored in SQL and be first class entities if assignments are stored in SQL.  It\u0027s a reasonable question to ask...but in general we try not to let FK relationships transcend backend boundaries.  One glaring example, however, where we currently DO this is that domain_id is still a FK for users and groups.  I actually think we should drop that, and will raise a spec for that.","commit_id":"31807b4cd69c9ffe08b416505eedb4729aab746f"}],"keystone/assignment/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027name\u0027: u\u0027Default\u0027}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def deprecated_to_role(f):"},{"line_number":53,"context_line":"    \"\"\"Specialized deprecation wrapper for assignment to role."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    This wraps the standard deprecation wrapper and fills in the method"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_62e725ad","line":52,"updated":"2015-01-02 17:16:29.000000000","message":"nit: \n\n    def deprecated_to_role_api(f):\n\nmight lead to be more descriptive.","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027name\u0027: u\u0027Default\u0027}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def deprecated_to_role(f):"},{"line_number":53,"context_line":"    \"\"\"Specialized deprecation wrapper for assignment to role."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    This wraps the standard deprecation wrapper and fills in the method"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_bc8f6d74","line":52,"in_reply_to":"3a961159_62e725ad","updated":"2015-01-03 02:50:16.000000000","message":"Done","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"bbb11c7ed7614164d6b8abdd13654fc4bccf4f4c","unresolved":false,"context_lines":[{"line_number":1323,"context_line":"            # the `delete_role` method logic. Work needs to be done to make"},{"line_number":1324,"context_line":"            # the behavior between drivers consistent (capable of revoking"},{"line_number":1325,"context_line":"            # tokens for the same circumstances).  This is related to the bug"},{"line_number":1326,"context_line":"            # https://bugs.launchpad.net/keystone/+bug/1221805"},{"line_number":1327,"context_line":"            pass"},{"line_number":1328,"context_line":"        self.assignment_api.delete_role_assignments(role_id)"},{"line_number":1329,"context_line":"        self.driver.delete_role(role_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_36dd3871","line":1326,"updated":"2015-01-05 23:16:22.000000000","message":"This comment is not valid anymore.\nlist_role_assignments_for_role is implemented at manager level and not at drivers.","commit_id":"9dfc5702b31d2fff6c0b79c23fe11f551fa90428"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"122e0023378af3bc8e9d36e29f365de97c198bbe","unresolved":false,"context_lines":[{"line_number":1323,"context_line":"            # the `delete_role` method logic. Work needs to be done to make"},{"line_number":1324,"context_line":"            # the behavior between drivers consistent (capable of revoking"},{"line_number":1325,"context_line":"            # tokens for the same circumstances).  This is related to the bug"},{"line_number":1326,"context_line":"            # https://bugs.launchpad.net/keystone/+bug/1221805"},{"line_number":1327,"context_line":"            pass"},{"line_number":1328,"context_line":"        self.assignment_api.delete_role_assignments(role_id)"},{"line_number":1329,"context_line":"        self.driver.delete_role(role_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a961159_860ea23b","line":1326,"in_reply_to":"3a961159_36dd3871","updated":"2015-01-06 16:51:50.000000000","message":"sounds like this doc error should be fixed as separate bug...","commit_id":"9dfc5702b31d2fff6c0b79c23fe11f551fa90428"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            \u0027name\u0027: u\u0027Default\u0027}"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def deprecated_to_role_api(f):"},{"line_number":53,"context_line":"    \"\"\"Specialized deprecation wrapper for assignment to role api."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    This wraps the standard deprecation wrapper and fills in the method"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_f408d092","line":52,"updated":"2015-01-07 14:33:40.000000000","message":"Nice wrapper!","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"    @notifications.updated(\u0027role\u0027)"},{"line_number":1309,"context_line":"    def update_role(self, role_id, role):"},{"line_number":1310,"context_line":"        ret \u003d self.driver.update_role(role_id, role)"},{"line_number":1311,"context_line":"        self.get_role.invalidate(self, role_id)"},{"line_number":1312,"context_line":"        return ret"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"    @notifications.deleted(\u0027role\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_34e9787f","line":1311,"updated":"2015-01-07 14:33:40.000000000","message":"In the case of deletion it makes sense to just invalidate the cache.\n\nBut in the case of updation, shouldn\u0027t we update the cache as well, instead of just invalidating it?","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"    @notifications.updated(\u0027role\u0027)"},{"line_number":1309,"context_line":"    def update_role(self, role_id, role):"},{"line_number":1310,"context_line":"        ret \u003d self.driver.update_role(role_id, role)"},{"line_number":1311,"context_line":"        self.get_role.invalidate(self, role_id)"},{"line_number":1312,"context_line":"        return ret"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"    @notifications.deleted(\u0027role\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_0ef38773","line":1311,"in_reply_to":"3a961159_34e9787f","updated":"2015-01-09 22:10:28.000000000","message":"we could....(it will get filled in next time of course)...but since the original code did not do that, we shouldn\u0027t change it in this patch.","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"}],"keystone/assignment/role_backends/ldap.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"# NOTE(heny-nash): A mixin class to enable the sharing of the LDAP structure"},{"line_number":83,"context_line":"# between here and the assignment LDAP."},{"line_number":84,"context_line":"class RoleLDAPStructureMixin(object):"},{"line_number":85,"context_line":"    DEFAULT_OU \u003d \u0027ou\u003dRoles\u0027"},{"line_number":86,"context_line":"    DEFAULT_STRUCTURAL_CLASSES \u003d []"},{"line_number":87,"context_line":"    DEFAULT_OBJECTCLASS \u003d \u0027organizationalRole\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_42330913","line":84,"updated":"2015-01-02 17:16:29.000000000","message":"Suggest renaming to: \n\n    RoleLdapStructureMixin\n\nto be consistent with how \u0027Ldap\u0027 is used in other class names, like BaseLdap.","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"# NOTE(heny-nash): A mixin class to enable the sharing of the LDAP structure"},{"line_number":83,"context_line":"# between here and the assignment LDAP."},{"line_number":84,"context_line":"class RoleLDAPStructureMixin(object):"},{"line_number":85,"context_line":"    DEFAULT_OU \u003d \u0027ou\u003dRoles\u0027"},{"line_number":86,"context_line":"    DEFAULT_STRUCTURAL_CLASSES \u003d []"},{"line_number":87,"context_line":"    DEFAULT_OBJECTCLASS \u003d \u0027organizationalRole\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_fce81518","line":84,"in_reply_to":"3a961159_42330913","updated":"2015-01-03 02:50:16.000000000","message":"Done","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":9,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":"from __future__ import absolute_import"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from keystone import assignment"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_947eacad","line":11,"updated":"2015-01-07 14:33:40.000000000","message":"I think it needs a blank line here between the copyright note and the first import.","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":8,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":9,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":"from __future__ import absolute_import"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from keystone import assignment"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_0e9aa713","line":11,"in_reply_to":"3a961159_947eacad","updated":"2015-01-09 22:10:28.000000000","message":"Done","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"}],"keystone/assignment/role_backends/sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from keystone import assignment as keystone_assignment"},{"line_number":14,"context_line":"from keystone.common import sql"},{"line_number":15,"context_line":"from keystone import exception"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_826fb1fb","line":13,"updated":"2015-01-02 17:16:29.000000000","message":"I think this is just left as: \n\n    from keystone import assignment\n\nin the ldap driver.","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from keystone import assignment as keystone_assignment"},{"line_number":14,"context_line":"from keystone.common import sql"},{"line_number":15,"context_line":"from keystone import exception"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_7cdc2575","line":13,"in_reply_to":"3a961159_826fb1fb","updated":"2015-01-03 02:50:16.000000000","message":"Done","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone import exception"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class Role(keystone_assignment.RoleDriver):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027role\u0027)"},{"line_number":21,"context_line":"    def create_role(self, role_id, role):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_c270d9dc","line":18,"updated":"2015-01-02 17:16:29.000000000","message":"this is: \n\n    class Role(assignment.RoleDriver): \n\nin keystone/assignment/role_backends/ldap.py","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone import exception"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class Role(keystone_assignment.RoleDriver):"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027role\u0027)"},{"line_number":21,"context_line":"    def create_role(self, role_id, role):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_9cd7114f","line":18,"in_reply_to":"3a961159_c270d9dc","updated":"2015-01-03 02:50:16.000000000","message":"Done","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"}],"keystone/common/config.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"eb858de75a8ee2749c2a17db96804ae8881aec6d","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        # If role driver is not specified, the assignment driver chooses"},{"line_number":450,"context_line":"        # the backend"},{"line_number":451,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"},{"line_number":452,"context_line":"                   help\u003d\u0027Role backend driver.\u0027),"},{"line_number":453,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":454,"context_line":"                    help\u003d\u0027Toggle for role caching. This has no effect \u0027"},{"line_number":455,"context_line":"                         \u0027unless global caching is enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_f762c7ab","line":452,"updated":"2015-01-14 18:50:56.000000000","message":"This needs (in a subsequent patch) to include some basic information on default behavior to include in the sample config.","commit_id":"3408515e8c1ea0c7716de0d65824e64016d021f7"}],"keystone/common/sql/migrate_repo/versions/062_drop_assignment_role_fk.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"eb858de75a8ee2749c2a17db96804ae8881aec6d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def upgrade(migrate_engine):"},{"line_number":31,"context_line":"    # SQLite does not support constraints, and querying the constraints"},{"line_number":32,"context_line":"    # raises an exception"},{"line_number":33,"context_line":"    if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":34,"context_line":"        return"},{"line_number":35,"context_line":"    migration_helpers.remove_constraints(list_constraints(migrate_engine))"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_779fb750","line":32,"updated":"2015-01-14 18:50:56.000000000","message":"Yet another case to drop SQLite support in migration testing. [has nothing to do with this patchset, just a recent conversation on IRC]","commit_id":"3408515e8c1ea0c7716de0d65824e64016d021f7"}],"keystone/tests/test_backend_sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from keystone import config"},{"line_number":29,"context_line":"from keystone import exception"},{"line_number":30,"context_line":"from keystone.identity.backends import sql as identity_sql"},{"line_number":31,"context_line":"from keystone.openstack.common import log as logging"},{"line_number":32,"context_line":"from keystone import tests"},{"line_number":33,"context_line":"from keystone.tests import default_fixtures"},{"line_number":34,"context_line":"from keystone.tests.ksfixtures import database"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_a20aed24","line":31,"updated":"2015-01-02 17:16:29.000000000","message":"should we use this like; \n\n     from keystone.openstack.common import log\n     ...\n     LOG \u003d log.getLogger(__name__)\n\nto be consistent with how the rest of Keystone uses the oslo log.py module?","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from keystone import config"},{"line_number":29,"context_line":"from keystone import exception"},{"line_number":30,"context_line":"from keystone.identity.backends import sql as identity_sql"},{"line_number":31,"context_line":"from keystone.openstack.common import log as logging"},{"line_number":32,"context_line":"from keystone import tests"},{"line_number":33,"context_line":"from keystone.tests import default_fixtures"},{"line_number":34,"context_line":"from keystone.tests.ksfixtures import database"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_1cd32160","line":31,"in_reply_to":"3a961159_a20aed24","updated":"2015-01-03 02:50:16.000000000","message":"So this isn\u0027t the normal use of logging...I need to get at the logging exceptions....can I do that with log.getLogger ?","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":782,"context_line":"class DeprecatedDecorators(SqlTests):"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"    def test_assignment_to_role_api(self):"},{"line_number":785,"context_line":"        \"\"\"Test that calling one of the methods does call LOG.depreated."},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"        This method is really generic to the type of backend, but we need"},{"line_number":788,"context_line":"        one to execute the test, so the SQL backend is as good as any."}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_d783d653","line":785,"updated":"2015-01-07 14:33:40.000000000","message":"(nit): s/LOG.depreated/LOG.deprecated","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ab847f64d1d828e386eab8439395e0c3c2d4c7d8","unresolved":false,"context_lines":[{"line_number":782,"context_line":"class DeprecatedDecorators(SqlTests):"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"    def test_assignment_to_role_api(self):"},{"line_number":785,"context_line":"        \"\"\"Test that calling one of the methods does call LOG.depreated."},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"        This method is really generic to the type of backend, but we need"},{"line_number":788,"context_line":"        one to execute the test, so the SQL backend is as good as any."}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_8e85b7ae","line":785,"in_reply_to":"3a961159_d783d653","updated":"2015-01-09 22:10:28.000000000","message":"Done","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"ab27b4b80e80e7dd3e1f3d305bcd4d53c65ea82b","unresolved":false,"context_lines":[{"line_number":809,"context_line":"            \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":810,"context_line":"        self.assertRaises(logging.DeprecatedConfig,"},{"line_number":811,"context_line":"                          self.assignment_api.create_role,"},{"line_number":812,"context_line":"                          role_ref[\u0027id\u0027], role_ref)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_37f41af0","line":812,"updated":"2015-01-07 14:33:40.000000000","message":"Really nice test! Glad to know about this.","commit_id":"32ee502084b7b68cffa42ca7836edf5c2b1d893b"}],"keystone/tests/test_sql_upgrade.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6f95abc109edcedaffd89c0012dd51023b55dda8","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"        self.downgrade(61)"},{"line_number":1517,"context_line":"        self.assertTrue(self.does_fk_exist(\u0027assignment\u0027, \u0027role_id\u0027))"},{"line_number":1518,"context_line":""},{"line_number":1519,"context_line":"    def does_fk_exist(self, table, fk_column):"},{"line_number":1520,"context_line":"        inspector \u003d reflection.Inspector.from_engine(self.engine)"},{"line_number":1521,"context_line":"        for fk in inspector.get_foreign_keys(table):"},{"line_number":1522,"context_line":"            if fk_column in fk[\u0027constrained_columns\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_e84cd778","line":1519,"updated":"2015-01-02 17:16:29.000000000","message":"This is a handy method, would it make sense to move this up to SqlMigrateBase instead of grouping it with the tests?","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d3795c52d9f7daf0ab7570eb78bc75a58a9d41dd","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"        self.downgrade(61)"},{"line_number":1517,"context_line":"        self.assertTrue(self.does_fk_exist(\u0027assignment\u0027, \u0027role_id\u0027))"},{"line_number":1518,"context_line":""},{"line_number":1519,"context_line":"    def does_fk_exist(self, table, fk_column):"},{"line_number":1520,"context_line":"        inspector \u003d reflection.Inspector.from_engine(self.engine)"},{"line_number":1521,"context_line":"        for fk in inspector.get_foreign_keys(table):"},{"line_number":1522,"context_line":"            if fk_column in fk[\u0027constrained_columns\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_7cc3458a","line":1519,"in_reply_to":"3a961159_e84cd778","updated":"2015-01-03 02:50:16.000000000","message":"might be a good idea..do you mean in migration_helpers? Or somewhere else?","commit_id":"e8fc6d45a828d5c6b06a59246be9eb28fbf23e37"}]}
