)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"78b42ac0646c827ea7405527d79c3a5c3a09a65d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"},{"line_number":13,"context_line":"users, but of course, doesn\u0027t need the sql driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_cbb16de3","line":11,"updated":"2016-05-09 14:29:13.000000000","message":"It can\u0027t be correct that the sql model is the one that all drivers must use. Not all drivers are based on sql.","commit_id":"d6736425570298cc802d44d263f50ab3f48246b8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9dfadcdefb02c544fb9a4a9182b2469cd77f460f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"},{"line_number":13,"context_line":"users, but of course, doesn\u0027t need the sql driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_9d9de25b","line":11,"in_reply_to":"dab17558_9d45e218","updated":"2016-05-09 18:24:40.000000000","message":"So we only support the default? Why have anything other than the default?","commit_id":"d6736425570298cc802d44d263f50ab3f48246b8"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"423cf11e8f4dc272706fe5a6b4b7d8e159005424","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"},{"line_number":13,"context_line":"users, but of course, doesn\u0027t need the sql driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_58ed4824","line":11,"in_reply_to":"dab17558_9d9de25b","updated":"2016-05-09 18:42:51.000000000","message":"You can of course have a custom shadow backend that may not be sql.  In that rare case, the sql model may not be used.  However, by default we will use it to shadow all backend identities, which is the main reason why I want to separate it out.","commit_id":"d6736425570298cc802d44d263f50ab3f48246b8"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"aa3c3e828076163f81adbed092fe00fdb6b324fa","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"},{"line_number":13,"context_line":"users, but of course, doesn\u0027t need the sql driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_d1fe3b37","line":11,"in_reply_to":"dab17558_cbb16de3","updated":"2016-05-09 16:44:29.000000000","message":"Not all drivers use the sql model, correct.  But all drivers will be shadowed using the sql model.","commit_id":"d6736425570298cc802d44d263f50ab3f48246b8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9ccc1db3b4f7823a9a5fc3f0c062f25dc168aa5e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"},{"line_number":13,"context_line":"users, but of course, doesn\u0027t need the sql driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_e250cb60","line":11,"in_reply_to":"dab17558_d1fe3b37","updated":"2016-05-09 18:00:57.000000000","message":"What if I have a non-sql shadow backend?","commit_id":"d6736425570298cc802d44d263f50ab3f48246b8"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"35b4e359adbe02c221150b2a8abecebf81a233aa","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"},{"line_number":13,"context_line":"users, but of course, doesn\u0027t need the sql driver."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dab17558_9d45e218","line":11,"in_reply_to":"dab17558_e250cb60","updated":"2016-05-09 18:17:03.000000000","message":"No, in that case.  But by default, all drivers will be shadowed in sql.","commit_id":"d6736425570298cc802d44d263f50ab3f48246b8"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"272a1835110b852f1c25b5ba55ed7f95ad4b3741","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move identity.backends.sql model code to sql_model.py"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"dab17558_098cebd8","line":9,"updated":"2016-05-10 11:53:28.000000000","message":"Maybe lines 9-20 just need to be replaced with:\n\n  This patch moves identity.backends.sql model code to sql_model.py so that they can be shared with the shadow users SQL backend.","commit_id":"db299828ae99c4e21d1b17ffc6efe59950165c23"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"9bfcb231664a18fcc029a6715923998ba79b3f55","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move identity.backends.sql model code to sql_model.py"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"dab17558_a06a087f","line":9,"in_reply_to":"dab17558_098cebd8","updated":"2016-05-10 14:43:14.000000000","message":"Done","commit_id":"db299828ae99c4e21d1b17ffc6efe59950165c23"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"7b424db3591cb37b4627ec5b38924ca5b4e9cb59","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move identity.backends.sql model code to sql_model.py"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"dab17558_00b794f5","line":9,"in_reply_to":"dab17558_098cebd8","updated":"2016-05-10 14:43:47.000000000","message":"Thanks Stanek, good suggestion.","commit_id":"db299828ae99c4e21d1b17ffc6efe59950165c23"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"65ae84a9c0aca89b2524c5d066d15662f13d0306","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move identity.backends.sql model code to sql_model.py"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"dab17558_ee6b68ef","line":9,"in_reply_to":"dab17558_098cebd8","updated":"2016-05-10 13:03:30.000000000","message":"shared by what? Other code can\u0027t depend on the shadow users backend being the SQL backend. So making it available is just going to lead to code making incorrect assumptions.","commit_id":"db299828ae99c4e21d1b17ffc6efe59950165c23"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4af85c3ff17ddc003e0fcaea60ecd9e49322b373","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move identity.backends.sql model code to sql_model.py"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch moves identity.backends.sql model code to sql_model.py. The"},{"line_number":10,"context_line":"sql model code (User, FederatedUser, LdapUser...) provides a model for"},{"line_number":11,"context_line":"all identity backend drivers, not only sql. For example, shadow users"},{"line_number":12,"context_line":"references the sql model to shadow federated (and eventually ldap)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"dab17558_7192bdf7","line":9,"in_reply_to":"dab17558_ee6b68ef","updated":"2016-05-10 13:18:59.000000000","message":"I don\u0027t think other code will depend on shadow users being SQL. This is really a refactor for something that we already do. The shadow users SQL backend reuses the identity SQL models: http://git.openstack.org/cgit/openstack/keystone/tree/keystone/identity/shadow_backends/sql.py?id\u003d7c3497c#n18\n\nThis patch makes it better in that the shadow users SQL driver no longer directly depends on the identity SQL driver. Instead they share a common set of models.\n\nThis should have no impact on any other driver implementations.","commit_id":"db299828ae99c4e21d1b17ffc6efe59950165c23"}],"keystone/identity/backends/model.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4f4d84d17753f90740fd88b3d864b2ea67ccc4a5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from sqlalchemy.ext.hybrid import hybrid_property"},{"line_number":17,"context_line":"from sqlalchemy import orm"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class User(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_c464c0e6","line":19,"updated":"2016-03-14 21:23:28.000000000","message":"since this isn\u0027t sql specific there should be no importing of sql.","commit_id":"d3b6449b34a3ca4731a16c3958b5a251ea86111e"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"50b5597f5c5ebd87675683f5662e95a45ac0e178","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from sqlalchemy.ext.hybrid import hybrid_property"},{"line_number":17,"context_line":"from sqlalchemy import orm"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class User(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_67484b88","line":19,"in_reply_to":"3afc51ec_64efac87","updated":"2016-03-15 00:39:32.000000000","message":"And just to add, ShadowUsers depends on the User model for all identity drivers (sql, ldap...), which is the main reason for the separation.  You could also argue that separating the driver from the model is a cleaner implementation.","commit_id":"d3b6449b34a3ca4731a16c3958b5a251ea86111e"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"f0b0ceded0a14a6075e78455d4bf10002e242d1f","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from sqlalchemy.ext.hybrid import hybrid_property"},{"line_number":17,"context_line":"from sqlalchemy import orm"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class User(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_64efac87","line":19,"in_reply_to":"3afc51ec_c464c0e6","updated":"2016-03-14 21:41:58.000000000","message":"This is creating the sqlalchemy class-table mapping, so I do believe that I require importing sql.  And I\u0027m not saying that the model is not sql specific.  What I am saying is that the model will be used to model all identity drivers (sql, ldap...).  So for example, an identity (User) can have a relationship to a federated user and an LDAP user.","commit_id":"d3b6449b34a3ca4731a16c3958b5a251ea86111e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c52f8240485f9cfc842eb68ec8c168e659f04eb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_8a24210d","line":1,"updated":"2016-03-18 18:27:25.000000000","message":"Maybe we change the name of this module to be something like sql_model.py? It seems that would be fitting because the model is SQL specific - can this be used with LDAP?","commit_id":"95f255e047639e3c9ef04b396b6cb2328af74ef3"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"661e098abc424580ff8803265d32656e4c58c3a2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_fb948b37","line":1,"in_reply_to":"1af94dfe_8a24210d","updated":"2016-03-19 00:32:08.000000000","message":"Done","commit_id":"95f255e047639e3c9ef04b396b6cb2328af74ef3"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"7af6cb25d041e0cf477c45b7cf8be4a40958c959","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_bb704341","line":1,"in_reply_to":"1af94dfe_8a24210d","updated":"2016-03-19 00:31:55.000000000","message":"Good suggestion Lance, it is SQL specific. And it will be used with LDAP when we shadow LDAP users, which will be implemented in Newton.","commit_id":"95f255e047639e3c9ef04b396b6cb2328af74ef3"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"388b6b4603995f1318198445b5e1d6c83ee51544","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_5ccc3435","line":1,"in_reply_to":"1af94dfe_fb948b37","updated":"2016-03-29 16:03:59.000000000","message":"It will be used with LDAP such that when a user authenticates successfully with LDAP - we will hit this code to store an LdapUser in SQL, right?","commit_id":"95f255e047639e3c9ef04b396b6cb2328af74ef3"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"fcfcd78c68351d3328361ca18d8134c94cc3dd8b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba0121b8_f713a15a","line":1,"in_reply_to":"ba0121b8_5ccc3435","updated":"2016-03-29 16:07:14.000000000","message":"@Lance: You are correct, when an ldap user authenticates, we\u0027ll store a ldap_user record in SQL.","commit_id":"95f255e047639e3c9ef04b396b6cb2328af74ef3"}],"keystone/identity/backends/sql_model.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9969a381d9f9e75e18d0cdf295baf7743cb00cd9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class User(sql.ModelBase, sql.DictBase):"},{"line_number":23,"context_line":"    __tablename__ \u003d \u0027user\u0027"},{"line_number":24,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027name\u0027, \u0027domain_id\u0027, \u0027password\u0027, \u0027enabled\u0027,"},{"line_number":25,"context_line":"                  \u0027default_project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_b7576901","line":22,"updated":"2016-03-29 16:11:10.000000000","message":"nit: we could add docstring explaining why (or when) each of these is employed. I can see people wondering \"why are we using a FederatedUser for SQL when I\u0027m authenticating with LDAP?\"","commit_id":"b99ac9d75557b652008732c67440970f501fff74"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"db5a4575e5bbab707256e9f8cd5afe2713187319","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class User(sql.ModelBase, sql.DictBase):"},{"line_number":23,"context_line":"    __tablename__ \u003d \u0027user\u0027"},{"line_number":24,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027name\u0027, \u0027domain_id\u0027, \u0027password\u0027, \u0027enabled\u0027,"},{"line_number":25,"context_line":"                  \u0027default_project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_f67d2cb2","line":22,"in_reply_to":"ba0121b8_b7576901","updated":"2016-05-09 20:22:46.000000000","message":"Done","commit_id":"b99ac9d75557b652008732c67440970f501fff74"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a1952d0591defedeaca9db20bd209414c38694da","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.common import sql"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class User(sql.ModelBase, sql.DictBase):"},{"line_number":23,"context_line":"    __tablename__ \u003d \u0027user\u0027"},{"line_number":24,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027name\u0027, \u0027domain_id\u0027, \u0027password\u0027, \u0027enabled\u0027,"},{"line_number":25,"context_line":"                  \u0027default_project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_9214f3f5","line":22,"in_reply_to":"ba0121b8_b7576901","updated":"2016-03-29 16:28:17.000000000","message":"Good point.  And just for clarification, a User object can have a local user identity and zero to many federated user identities.  This will be more realized when we do things like account linking.","commit_id":"b99ac9d75557b652008732c67440970f501fff74"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9969a381d9f9e75e18d0cdf295baf7743cb00cd9","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class LocalUser(sql.ModelBase, sql.DictBase):"},{"line_number":109,"context_line":"    __tablename__ \u003d \u0027local_user\u0027"},{"line_number":110,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027user_id\u0027, \u0027domain_id\u0027, \u0027name\u0027]"},{"line_number":111,"context_line":"    id \u003d sql.Column(sql.Integer, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_5787ed60","line":108,"updated":"2016-03-29 16:11:10.000000000","message":"This is essentially the default (identity store) backend for keystone.","commit_id":"b99ac9d75557b652008732c67440970f501fff74"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a1952d0591defedeaca9db20bd209414c38694da","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        return d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class LocalUser(sql.ModelBase, sql.DictBase):"},{"line_number":109,"context_line":"    __tablename__ \u003d \u0027local_user\u0027"},{"line_number":110,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027user_id\u0027, \u0027domain_id\u0027, \u0027name\u0027]"},{"line_number":111,"context_line":"    id \u003d sql.Column(sql.Integer, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_b7264966","line":108,"in_reply_to":"ba0121b8_5787ed60","updated":"2016-03-29 16:28:17.000000000","message":"Correct","commit_id":"b99ac9d75557b652008732c67440970f501fff74"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9969a381d9f9e75e18d0cdf295baf7743cb00cd9","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    password \u003d sql.Column(sql.String(128))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class FederatedUser(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":132,"context_line":"    __tablename__ \u003d \u0027federated_user\u0027"},{"line_number":133,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027user_id\u0027, \u0027idp_id\u0027, \u0027protocol_id\u0027, \u0027unique_id\u0027,"},{"line_number":134,"context_line":"                  \u0027display_name\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_17e57536","line":131,"updated":"2016-03-29 16:11:10.000000000","message":"A docstring could be added here to give an example of when this would be used. If a user authenticates and their IdP is an external LDAP server, we would store a FederatedUser reference, etc..","commit_id":"b99ac9d75557b652008732c67440970f501fff74"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"db5a4575e5bbab707256e9f8cd5afe2713187319","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    password \u003d sql.Column(sql.String(128))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class FederatedUser(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":132,"context_line":"    __tablename__ \u003d \u0027federated_user\u0027"},{"line_number":133,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027user_id\u0027, \u0027idp_id\u0027, \u0027protocol_id\u0027, \u0027unique_id\u0027,"},{"line_number":134,"context_line":"                  \u0027display_name\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_76481c88","line":131,"in_reply_to":"ba0121b8_17e57536","updated":"2016-05-09 20:22:46.000000000","message":"Done","commit_id":"b99ac9d75557b652008732c67440970f501fff74"}]}
