)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fd244d380ae0610e8526daed228f4b22b869ee8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Some minor refactoring, e.g. moving unit tests, in preparation for"},{"line_number":10,"context_line":"shadowing LDAP users implementation"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"* Deprecating shadows users driver backend"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"bp shadow-users-newton"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7aa08908_dd6c340a","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":42},"updated":"2016-06-08 13:41:15.000000000","message":"Why?","commit_id":"0e4fba871ac494a4d1b4ee4f77a15bd6e8d09ed1"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"6d528c6fb5dd3789148816b25a62f28967155208","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Some minor refactoring, e.g. moving unit tests, in preparation for"},{"line_number":10,"context_line":"shadowing LDAP users implementation"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"* Deprecating shadows users driver backend"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"bp shadow-users-newton"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7aa08908_7318cfd3","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":42},"in_reply_to":"7aa08908_dd6c340a","updated":"2016-06-08 14:02:15.000000000","message":"Initially when coding shadow users, I followed the pattern for how we implement backends. However, I never really intended for this to be a custom backend driver. And really, it shouldn\u0027t be. So I\u0027m trying to correct this now.","commit_id":"0e4fba871ac494a4d1b4ee4f77a15bd6e8d09ed1"}],"keystone/common/config.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"57785ea82f239100b0e4b17419fbf70ff62c409c","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                   default\u003d\u0027sql\u0027,"},{"line_number":252,"context_line":"                   deprecated_for_removal\u003dTrue,"},{"line_number":253,"context_line":"                   deprecated_reason\u003d\u0027Support for shadow_users driver \u0027"},{"line_number":254,"context_line":"                                     \u0027backends has been deprecated in the N \u0027"},{"line_number":255,"context_line":"                                     \u0027release and will be removed in the O \u0027"},{"line_number":256,"context_line":"                                     \u0027release.\u0027,"},{"line_number":257,"context_line":"                   help\u003d\u0027Entrypoint for the shadow users backend driver \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_63a38150","line":254,"updated":"2016-06-02 20:29:26.000000000","message":"We could use the release names here since we know what they are (Newton, Ocata).\n\nDo we want to include a statement about what to use instead of this?","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"25837d8ae32d2642702d48b039e339ab54f6dc65","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                   default\u003d\u0027sql\u0027,"},{"line_number":252,"context_line":"                   deprecated_for_removal\u003dTrue,"},{"line_number":253,"context_line":"                   deprecated_reason\u003d\u0027Support for shadow_users driver \u0027"},{"line_number":254,"context_line":"                                     \u0027backends has been deprecated in the N \u0027"},{"line_number":255,"context_line":"                                     \u0027release and will be removed in the O \u0027"},{"line_number":256,"context_line":"                                     \u0027release.\u0027,"},{"line_number":257,"context_line":"                   help\u003d\u0027Entrypoint for the shadow users backend driver \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_bdaf4193","line":254,"in_reply_to":"9abb7d3a_63a38150","updated":"2016-06-02 21:10:53.000000000","message":"Done","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"df319257e94942a4bdc6c6a01971d2add9a3d0d0","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                   default\u003d\u0027sql\u0027,"},{"line_number":252,"context_line":"                   deprecated_for_removal\u003dTrue,"},{"line_number":253,"context_line":"                   deprecated_reason\u003d\u0027Support for shadow_users driver \u0027"},{"line_number":254,"context_line":"                                     \u0027backends has been deprecated in the N \u0027"},{"line_number":255,"context_line":"                                     \u0027release and will be removed in the O \u0027"},{"line_number":256,"context_line":"                                     \u0027release.\u0027,"},{"line_number":257,"context_line":"                   help\u003d\u0027Entrypoint for the shadow users backend driver \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_39cfe6b4","line":254,"in_reply_to":"9abb7d3a_63a38150","updated":"2016-06-02 21:08:03.000000000","message":"I\u0027ll add Ocata.  I don\u0027t think we need to include a statement about what to use instead, as I don\u0027t really expect operators to have a custom implementation for this.","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2d08cdaeea603ad8efcc2ecafd495e7836486faa","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                                     \u0027shadow_users driver backend has \u0027"},{"line_number":273,"context_line":"                                     \u0027been deprecated in the Newton \u0027"},{"line_number":274,"context_line":"                                     \u0027release and will be removed \u0027"},{"line_number":275,"context_line":"                                     \u0027in the Ocata release.\u0027,"},{"line_number":276,"context_line":"                   help\u003d\u0027Entrypoint for the shadow users backend driver \u0027"},{"line_number":277,"context_line":"                        \u0027in the keystone.identity.shadow_users namespace.\u0027),"},{"line_number":278,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_6412835a","line":275,"updated":"2016-06-09 13:43:43.000000000","message":"-1: I assume you\u0027re making this change because you\u0027re assuming that no one will ever run anything besides SQL, which *may* be true (although, historically it is not). However, even if we can assume that everyone will run SQL, that doesn\u0027t mean that deployers won\u0027t want to wrap or extend the upstream drivers -- which is exactly where this config will come in handy.","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b40cc2c6652ed0ede6c9ca9967a4c9f1eff0d9af","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                                     \u0027shadow_users driver backend has \u0027"},{"line_number":273,"context_line":"                                     \u0027been deprecated in the Newton \u0027"},{"line_number":274,"context_line":"                                     \u0027release and will be removed \u0027"},{"line_number":275,"context_line":"                                     \u0027in the Ocata release.\u0027,"},{"line_number":276,"context_line":"                   help\u003d\u0027Entrypoint for the shadow users backend driver \u0027"},{"line_number":277,"context_line":"                        \u0027in the keystone.identity.shadow_users namespace.\u0027),"},{"line_number":278,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_9fc37c38","line":275,"in_reply_to":"7aa08908_6412835a","updated":"2016-06-09 13:52:58.000000000","message":"I agree. This is the seam that allows deployers to use their own implementation.","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"af1e31da12aef1865d24d2c3bb0723732a95df5f","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                                     \u0027shadow_users driver backend has \u0027"},{"line_number":273,"context_line":"                                     \u0027been deprecated in the Newton \u0027"},{"line_number":274,"context_line":"                                     \u0027release and will be removed \u0027"},{"line_number":275,"context_line":"                                     \u0027in the Ocata release.\u0027,"},{"line_number":276,"context_line":"                   help\u003d\u0027Entrypoint for the shadow users backend driver \u0027"},{"line_number":277,"context_line":"                        \u0027in the keystone.identity.shadow_users namespace.\u0027),"},{"line_number":278,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_fa70cede","line":275,"in_reply_to":"7aa08908_6412835a","updated":"2016-06-09 14:07:59.000000000","message":"I just think we ought to be able to say that some features will always exist in the database and we will not allow custom implementations. When we allow custom implementation for everything, we limit our ability to make changes and lose out on things such as referential integrity.  And if no one ever creates a custom implementation for shadow users, then why are we doing it?","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"d3987a46aabd1fc07e6a4ef67d5ad24bfbede29e","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                                     \u0027shadow_users driver backend has \u0027"},{"line_number":273,"context_line":"                                     \u0027been deprecated in the Newton \u0027"},{"line_number":274,"context_line":"                                     \u0027release and will be removed \u0027"},{"line_number":275,"context_line":"                                     \u0027in the Ocata release.\u0027,"},{"line_number":276,"context_line":"                   help\u003d\u0027Entrypoint for the shadow users backend driver \u0027"},{"line_number":277,"context_line":"                        \u0027in the keystone.identity.shadow_users namespace.\u0027),"},{"line_number":278,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_fa3e0ed9","line":275,"in_reply_to":"7aa08908_fa70cede","updated":"2016-06-09 14:08:36.000000000","message":"That being said, I\u0027ll save this fight for another day :)","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"}],"keystone/identity/backends/shadow.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"57785ea82f239100b0e4b17419fbf70ff62c409c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.identity.backends import sql_model as model"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShadowUsers(object):"},{"line_number":22,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027federated_user\u0027)"},{"line_number":23,"context_line":"    def create_federated_user(self, federated_dict):"},{"line_number":24,"context_line":"        user \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_be39fcda","line":21,"updated":"2016-06-02 20:29:26.000000000","message":"Before this module was keystone/identity/shadow_backends/sql.py which meant that shadow users were specific to sql (right?). This just refactors shadow users to be more explicit about being a sql-based implementation?","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"df319257e94942a4bdc6c6a01971d2add9a3d0d0","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystone.identity.backends import sql_model as model"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ShadowUsers(object):"},{"line_number":22,"context_line":"    @sql.handle_conflicts(conflict_type\u003d\u0027federated_user\u0027)"},{"line_number":23,"context_line":"    def create_federated_user(self, federated_dict):"},{"line_number":24,"context_line":"        user \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_19082291","line":21,"in_reply_to":"9abb7d3a_be39fcda","updated":"2016-06-02 21:08:03.000000000","message":"Right (kind of). When I implemented shadow users, I followed the backend driver pattern without thinking about custom drivers. However, I never intended to support custom implementations. Quite the opposite actually, as I was hoping to take advantage of referential integrity by only having this in sql.","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fd244d380ae0610e8526daed228f4b22b869ee8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7aa08908_802cff99","updated":"2016-06-08 13:41:15.000000000","message":"this still is sql specific code, why did you move it from keystone/identity/shadow_backends/sql.py ?","commit_id":"0e4fba871ac494a4d1b4ee4f77a15bd6e8d09ed1"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"6d528c6fb5dd3789148816b25a62f28967155208","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7aa08908_739baf18","in_reply_to":"7aa08908_802cff99","updated":"2016-06-08 14:02:15.000000000","message":"Yeah, I still need the sql code, but want to implement it in a way that doesn\u0027t allow for a custom backend driver. See my comment in the commit message as to why.","commit_id":"0e4fba871ac494a4d1b4ee4f77a15bd6e8d09ed1"}],"keystone/identity/backends/sql_model.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"57785ea82f239100b0e4b17419fbf70ff62c409c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    passwords \u003d orm.relationship(\u0027Password\u0027,"},{"line_number":117,"context_line":"                                 single_parent\u003dTrue,"},{"line_number":118,"context_line":"                                 cascade\u003d\u0027all,delete-orphan\u0027,"},{"line_number":119,"context_line":"                                 lazy\u003d\u0027subquery\u0027,"},{"line_number":120,"context_line":"                                 backref\u003d\u0027local_user\u0027)"},{"line_number":121,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_fe61c4d4","line":119,"updated":"2016-06-02 20:29:26.000000000","message":"Why was this added after the fact?","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"df319257e94942a4bdc6c6a01971d2add9a3d0d0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    passwords \u003d orm.relationship(\u0027Password\u0027,"},{"line_number":117,"context_line":"                                 single_parent\u003dTrue,"},{"line_number":118,"context_line":"                                 cascade\u003d\u0027all,delete-orphan\u0027,"},{"line_number":119,"context_line":"                                 lazy\u003d\u0027subquery\u0027,"},{"line_number":120,"context_line":"                                 backref\u003d\u0027local_user\u0027)"},{"line_number":121,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_9908922f","line":119,"in_reply_to":"9abb7d3a_fe61c4d4","updated":"2016-06-02 21:08:03.000000000","message":"This was missed in the original implementation, so I\u0027m fixing it now.","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b40cc2c6652ed0ede6c9ca9967a4c9f1eff0d9af","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    passwords \u003d orm.relationship(\u0027Password\u0027,"},{"line_number":117,"context_line":"                                 single_parent\u003dTrue,"},{"line_number":118,"context_line":"                                 cascade\u003d\u0027all,delete-orphan\u0027,"},{"line_number":119,"context_line":"                                 lazy\u003d\u0027subquery\u0027,"},{"line_number":120,"context_line":"                                 backref\u003d\u0027local_user\u0027)"},{"line_number":121,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_5f3e342a","line":119,"updated":"2016-06-09 13:52:58.000000000","message":"How is this part of the refactor? I think it may deserve it\u0027s own commit so that you can document why this is necessary.","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b6b61bedf188afd36f2405f4d2a7d17b9e554920","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    passwords \u003d orm.relationship(\u0027Password\u0027,"},{"line_number":117,"context_line":"                                 single_parent\u003dTrue,"},{"line_number":118,"context_line":"                                 cascade\u003d\u0027all,delete-orphan\u0027,"},{"line_number":119,"context_line":"                                 lazy\u003d\u0027subquery\u0027,"},{"line_number":120,"context_line":"                                 backref\u003d\u0027local_user\u0027)"},{"line_number":121,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_dcbd0fd9","line":119,"in_reply_to":"7aa08908_5c647fe4","updated":"2016-06-09 14:15:47.000000000","message":"Is this changing behavior of the queries?","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"032af8044a904c5b78a94ae7bca512958c06bac3","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    passwords \u003d orm.relationship(\u0027Password\u0027,"},{"line_number":117,"context_line":"                                 single_parent\u003dTrue,"},{"line_number":118,"context_line":"                                 cascade\u003d\u0027all,delete-orphan\u0027,"},{"line_number":119,"context_line":"                                 lazy\u003d\u0027subquery\u0027,"},{"line_number":120,"context_line":"                                 backref\u003d\u0027local_user\u0027)"},{"line_number":121,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_5c647fe4","line":119,"in_reply_to":"7aa08908_5f3e342a","updated":"2016-06-09 14:10:52.000000000","message":"I missed this setting during the initial implementation; fixing it now. It\u0027s part of this refactor, as it\u0027s related to shadow users.","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"e0098361db1a6c66811137e69f0dfa7348b51d67","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    passwords \u003d orm.relationship(\u0027Password\u0027,"},{"line_number":117,"context_line":"                                 single_parent\u003dTrue,"},{"line_number":118,"context_line":"                                 cascade\u003d\u0027all,delete-orphan\u0027,"},{"line_number":119,"context_line":"                                 lazy\u003d\u0027subquery\u0027,"},{"line_number":120,"context_line":"                                 backref\u003d\u0027local_user\u0027)"},{"line_number":121,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_42aad486","line":119,"in_reply_to":"7aa08908_dcbd0fd9","updated":"2016-06-09 14:42:12.000000000","message":"subquery loading is eager loading that creates separate SQL statements when the object is loading, as opposed to a single SQL statement.  It\u0027s what I intended and consistent with the other relationships within the User class. By default, objects are lazy loading.","commit_id":"409f5597a9d8d4bc1256ec2ba49cc3081ba14186"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1ca31fe58937817a754d6ca26d7fecc9b054a3d7","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    passwords \u003d orm.relationship(\u0027Password\u0027,"},{"line_number":117,"context_line":"                                 single_parent\u003dTrue,"},{"line_number":118,"context_line":"                                 cascade\u003d\u0027all,delete-orphan\u0027,"},{"line_number":119,"context_line":"                                 lazy\u003d\u0027subquery\u0027,"},{"line_number":120,"context_line":"                                 backref\u003d\u0027local_user\u0027)"},{"line_number":121,"context_line":"    __table_args__ \u003d (sql.UniqueConstraint(\u0027domain_id\u0027, \u0027name\u0027), {})"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_1602ce6f","line":119,"updated":"2016-06-09 15:44:15.000000000","message":"This is going to broken out into it\u0027s own change right? Separate from the rest of the refactor provided in this patch.","commit_id":"172f3429ef7ba342b76fcf84cd207aaaea863a6b"}],"keystone/identity/shadow_backends/sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"57785ea82f239100b0e4b17419fbf70ff62c409c","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ShadowUsers(base.ShadowUsersDriverV9):"},{"line_number":18,"context_line":"    def create_federated_user(self, federated_dict):"},{"line_number":19,"context_line":"        return shadow.ShadowUsers().create_federated_user(federated_dict)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def get_federated_user(self, idp_id, protocol_id, unique_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_a321e9b6","line":18,"updated":"2016-06-02 20:29:26.000000000","message":"If we wanted to be real verbose - we could include deprecation warnings in these methods telling people to use the new `shadow` module directly.","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"df319257e94942a4bdc6c6a01971d2add9a3d0d0","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ShadowUsers(base.ShadowUsersDriverV9):"},{"line_number":18,"context_line":"    def create_federated_user(self, federated_dict):"},{"line_number":19,"context_line":"        return shadow.ShadowUsers().create_federated_user(federated_dict)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def get_federated_user(self, idp_id, protocol_id, unique_id):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_dd40450a","line":18,"in_reply_to":"9abb7d3a_a321e9b6","updated":"2016-06-02 21:08:03.000000000","message":"So I intend, nor expect folks to use these methods directly. I think having the deprecation warning on the base class is good enough. However, let me know if you feel strongly otherwise.","commit_id":"0347d31169f9d139aff54ef5369e9899df798300"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"0fd244d380ae0610e8526daed228f4b22b869ee8","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ShadowUsers(base.ShadowUsersDriverV9):"},{"line_number":18,"context_line":"    def create_federated_user(self, federated_dict):"},{"line_number":19,"context_line":"        return shadow.ShadowUsers().create_federated_user(federated_dict)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def get_federated_user(self, idp_id, protocol_id, unique_id):"},{"line_number":22,"context_line":"        return shadow.ShadowUsers().get_federated_user(idp_id, protocol_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_00ae4fe5","line":19,"range":{"start_line":19,"start_character":9,"end_line":19,"end_character":73},"updated":"2016-06-08 13:41:15.000000000","message":"why create a new ShadowUsers() instance everytime you call one of these functions ? couldn\u0027t you just make this class inherit from ShadowUsers ?","commit_id":"0e4fba871ac494a4d1b4ee4f77a15bd6e8d09ed1"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"6d528c6fb5dd3789148816b25a62f28967155208","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ShadowUsers(base.ShadowUsersDriverV9):"},{"line_number":18,"context_line":"    def create_federated_user(self, federated_dict):"},{"line_number":19,"context_line":"        return shadow.ShadowUsers().create_federated_user(federated_dict)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def get_federated_user(self, idp_id, protocol_id, unique_id):"},{"line_number":22,"context_line":"        return shadow.ShadowUsers().get_federated_user(idp_id, protocol_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_d343836a","line":19,"range":{"start_line":19,"start_character":9,"end_line":19,"end_character":73},"in_reply_to":"7aa08908_00ae4fe5","updated":"2016-06-08 14:02:15.000000000","message":"Good suggestion, I\u0027ll make this change.","commit_id":"0e4fba871ac494a4d1b4ee4f77a15bd6e8d09ed1"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"ff71c3acb902fe770222a1a1fd28d13398bf5b10","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ShadowUsers(base.ShadowUsersDriverV9):"},{"line_number":18,"context_line":"    def create_federated_user(self, federated_dict):"},{"line_number":19,"context_line":"        return shadow.ShadowUsers().create_federated_user(federated_dict)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def get_federated_user(self, idp_id, protocol_id, unique_id):"},{"line_number":22,"context_line":"        return shadow.ShadowUsers().get_federated_user(idp_id, protocol_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_31b3df51","line":19,"range":{"start_line":19,"start_character":9,"end_line":19,"end_character":73},"in_reply_to":"7aa08908_d343836a","updated":"2016-06-08 14:13:34.000000000","message":"Actually, I don\u0027t want to do too many changes here to make inheritance work. This class will be removed with the shadows backend.","commit_id":"0e4fba871ac494a4d1b4ee4f77a15bd6e8d09ed1"}]}
