-
Notifications
You must be signed in to change notification settings - Fork 663
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FEAT: refresh sessions automatically #507
FEAT: refresh sessions automatically #507
Conversation
3644693
to
8e04268
Compare
@@ -207,6 +212,20 @@ def __init__( | |||
|
|||
self.api_usage = {} | |||
|
|||
def _generate_headers(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Extract this to a new method since it will be used in two places.
'X-PrettyPrint': '1' | ||
} | ||
|
||
def _refresh_session(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Run the login logic cached in __init__
and recalculate the headers with the new session_id
.
@@ -124,7 +126,8 @@ def __init__( | |||
self.auth_type = "password" | |||
|
|||
# Pass along the username/password to our login helper | |||
self.session_id, self.sf_instance = SalesforceLogin( | |||
self._salesforce_login_partial = partial( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm basically using partial
to cache the values passed to SalesforceLogin
in _salesforce_login_partial
so later when our session expires, we can just call SalesforceLogin
again and get a new token.
@@ -148,13 +152,17 @@ def __init__( | |||
self.sf_instance += ':' + str(port) | |||
else: | |||
self.sf_instance = instance | |||
|
|||
# Only generate the headers wihtout logging in first | |||
self._generate_headers() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since we don't actually perform a login here, we have to remember to generate the headers (usually done in the _refresh_session
method).
@@ -679,6 +713,12 @@ def __init__( | |||
object_name=object_name, | |||
sf_version=sf_version)) | |||
|
|||
@property | |||
def session_id(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I use a property here to make it backward compatible with the tests already in place. However, if this officially gets merged in we'd probably want to just pass most everything through the salesforce
parameter.
…salesforce#485) Co-authored-by: Adam <adamm@ownbackup.com>
* Added support for all metadata api operations * Update metadata.py to support bulk api like syntax * Update metadata.py * Update metadata.py * Fixed docstrings * Update metadata.py Changed new() method to __call__ for easier syntax when creating new objects. Added flag to zeep settings so that out of order complex types are parsed successfully in read response * Update metadata.py * Added documentation for metadata API operations * Update MANIFEST.in * Update metadata.py * Update api.py * Update metadata.py * Update metadata.py * Update metadata.py * Update metadata.py * Moved sandbox from class variable to method parameter * Update api.py Co-authored-by: pdahiya <pdahiya@commvault.com>
…imple-salesforce#518) * Issue simple-salesforce#517 Fixing hanging batch results in worker. * Issue simple-salesforce#517 Found another use of Not Processed and changed to NotProcessed. Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com>
Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com>
…imple-salesforce#495) * Add parse_float function to allow parsing floats to decimal.Decimal * Refactor json parsing into separate functions * Fix linting * Add parse_float test to SFType tests * Fix linting in test * Check types in test for SFType Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com>
fix pylint line too long
fix pylint line too long
fix travis-ci cryptography build error
fix formatting error in update_base64
fix travis-ci pyp3 build error with crytography
remove pypy3 failing due to cartography build
Hi simple-salesforce team.. please merge this PR? |
Hi! Following up on this feature, it would be really nice to have it 🥇 |
fix pylint trailing whitespaces/line too long
fix pylint errors (white space, line too long, too many lines)
@@ -129,7 +126,8 @@ def __init__( | |||
self.auth_type = "password" | |||
|
|||
# Pass along the username/password to our login helper | |||
self.session_id, self.sf_instance = SalesforceLogin( | |||
self._salesforce_login_partial = partial( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be a quick addition but should ensure that it supports the OAuth and Security token login options
- Pass through OAuth arguments
- Pass through security token arguments
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just saw this! Summer is coming up soon and I'll likely resume the project I was using this for and thus have time to take a look at this. I'll look into it and come back if I have any questions.
Thanks for taking a look!
fix pylint errors
Ignore protected class
pylint disable W0212
bd39ec4
into
simple-salesforce:feature/release/v1.12.0/refresh_session
* FEAT: refresh sessions automatically (#507) * add support for refreshing sessions automatically * recalculate headers with new session_id * fix tests * extend support to SFType objects as well * reach into Salesforce from SFType to refresh session * fix session_id getter * rearrange arguments when creating SFType * Update CHANGES * Added upload_base64, update_base64, get_base64 functionality (#485) Co-authored-by: Adam <adamm@ownbackup.com> * Added support for all metadata api operations (#475) * Added support for all metadata api operations * Update metadata.py to support bulk api like syntax * Update metadata.py * Update metadata.py * Fixed docstrings * Update metadata.py Changed new() method to __call__ for easier syntax when creating new objects. Added flag to zeep settings so that out of order complex types are parsed successfully in read response * Update metadata.py * Added documentation for metadata API operations * Update MANIFEST.in * Update metadata.py * Update api.py * Update metadata.py * Update metadata.py * Update metadata.py * Update metadata.py * Moved sandbox from class variable to method parameter * Update api.py Co-authored-by: pdahiya <pdahiya@commvault.com> * Issue #517 Fixing hanging batch results in worker. (#518) * Issue #517 Fixing hanging batch results in worker. * Issue #517 Found another use of Not Processed and changed to NotProcessed. Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com> * Update default api version to Winter 22 (#515) Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> * update link for sfdc jwt (#512) * Add parse_float function to allow parsing floats to decimal.Decimal (#495) * Add parse_float function to allow parsing floats to decimal.Decimal * Refactor json parsing into separate functions * Fix linting * Add parse_float test to SFType tests * Fix linting in test * Check types in test for SFType Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> * Update __version__.py * Update CHANGES * Update .pylintrc * Update metadata.py fix pylint line too long * Update api.py fix pylint line too long * Update .travis.yml fix travis-ci cryptography build error * Update api.py fix formatting error in update_base64 * Update metadata.py * Update api.py * Update .travis.yml fix travis-ci cryptography build * Add kwargs to query_more call in query_all_iter (#524) * Update .travis.yml fix travis-ci cryography compile * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update setup.py fix travis-ci pyp3 build error with crytography * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml remove pypy3 failing due to cartography build * Update api.py fix pylint trailing whitespaces/line too long * Update api.py fix pylint errors (white space, line too long, too many lines) * Update api.py * Update api.py fix pylint errors * Update api.py Ignore protected class * Update test_api.py pylint disable W0212 Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> Co-authored-by: Adam Mahameed <23741427+adam-mah@users.noreply.github.com> Co-authored-by: Adam <adamm@ownbackup.com> Co-authored-by: Pranav Dahiya <31065394+pranav-dahiya@users.noreply.github.com> Co-authored-by: pdahiya <pdahiya@commvault.com> Co-authored-by: magardner <magardner@users.noreply.github.com> Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com> Co-authored-by: Uli Stärk <github@uli-staerk.de> Co-authored-by: Matthew Nataloni <27374786+men6288@users.noreply.github.com> Co-authored-by: Timo <6358247+timotk@users.noreply.github.com> Co-authored-by: will-hall <77327489+will-hall@users.noreply.github.com> * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update api.py * Update .pylintrc Co-authored-by: Noah Cardoza <noahcardoza@gmail.com> Co-authored-by: Adam Mahameed <23741427+adam-mah@users.noreply.github.com> Co-authored-by: Adam <adamm@ownbackup.com> Co-authored-by: Pranav Dahiya <31065394+pranav-dahiya@users.noreply.github.com> Co-authored-by: pdahiya <pdahiya@commvault.com> Co-authored-by: magardner <magardner@users.noreply.github.com> Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com> Co-authored-by: Uli Stärk <github@uli-staerk.de> Co-authored-by: Matthew Nataloni <27374786+men6288@users.noreply.github.com> Co-authored-by: Timo <6358247+timotk@users.noreply.github.com> Co-authored-by: will-hall <77327489+will-hall@users.noreply.github.com>
* Remove support for python 3.5 Remove support for python 3.5 * Remove support for python 3.5 Remove support for python 3.5 * Update __version__.py update version to v1.12.0 * Implement wait param in non-query bulk operations (#545) * Implement wait param in non-query bulk operations Add the wait parameter to workers spawned from _bulk_operation for non-query calls (it already exists for query calls). * Mimic formatting Co-authored-by: David Arcuri <david.arcuri@consultch.com> * Add optional flag use ordinary dict (#548) * add object_pairs_hook option * add object_pairs_hook to SFType * set attribute _object_pairs_hook * modify param desc to pass line limit pylint * added tests * updated corrected tests * Update test_api.py fix result = client.query to match response mock in test_query_parse_to_json_to_Dict and test_query_parse_to_json_to_OrderedDict * Update test_api.py update test names to fix pylint invalid-name * fix trailing whitespace fix trailing whitespace Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> * create dynamic sized batches to respect bulk api limits (#546) * add autosize feature * add docstring * add support for char_limit Co-authored-by: Hal Ali <hal.ali@agilebits.com> * Feature/release/v1.12.0/refresh session (#555) * FEAT: refresh sessions automatically (#507) * add support for refreshing sessions automatically * recalculate headers with new session_id * fix tests * extend support to SFType objects as well * reach into Salesforce from SFType to refresh session * fix session_id getter * rearrange arguments when creating SFType * Update CHANGES * Added upload_base64, update_base64, get_base64 functionality (#485) Co-authored-by: Adam <adamm@ownbackup.com> * Added support for all metadata api operations (#475) * Added support for all metadata api operations * Update metadata.py to support bulk api like syntax * Update metadata.py * Update metadata.py * Fixed docstrings * Update metadata.py Changed new() method to __call__ for easier syntax when creating new objects. Added flag to zeep settings so that out of order complex types are parsed successfully in read response * Update metadata.py * Added documentation for metadata API operations * Update MANIFEST.in * Update metadata.py * Update api.py * Update metadata.py * Update metadata.py * Update metadata.py * Update metadata.py * Moved sandbox from class variable to method parameter * Update api.py Co-authored-by: pdahiya <pdahiya@commvault.com> * Issue #517 Fixing hanging batch results in worker. (#518) * Issue #517 Fixing hanging batch results in worker. * Issue #517 Found another use of Not Processed and changed to NotProcessed. Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com> * Update default api version to Winter 22 (#515) Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> * update link for sfdc jwt (#512) * Add parse_float function to allow parsing floats to decimal.Decimal (#495) * Add parse_float function to allow parsing floats to decimal.Decimal * Refactor json parsing into separate functions * Fix linting * Add parse_float test to SFType tests * Fix linting in test * Check types in test for SFType Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> * Update __version__.py * Update CHANGES * Update .pylintrc * Update metadata.py fix pylint line too long * Update api.py fix pylint line too long * Update .travis.yml fix travis-ci cryptography build error * Update api.py fix formatting error in update_base64 * Update metadata.py * Update api.py * Update .travis.yml fix travis-ci cryptography build * Add kwargs to query_more call in query_all_iter (#524) * Update .travis.yml fix travis-ci cryography compile * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update setup.py fix travis-ci pyp3 build error with crytography * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml remove pypy3 failing due to cartography build * Update api.py fix pylint trailing whitespaces/line too long * Update api.py fix pylint errors (white space, line too long, too many lines) * Update api.py * Update api.py fix pylint errors * Update api.py Ignore protected class * Update test_api.py pylint disable W0212 Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> Co-authored-by: Adam Mahameed <23741427+adam-mah@users.noreply.github.com> Co-authored-by: Adam <adamm@ownbackup.com> Co-authored-by: Pranav Dahiya <31065394+pranav-dahiya@users.noreply.github.com> Co-authored-by: pdahiya <pdahiya@commvault.com> Co-authored-by: magardner <magardner@users.noreply.github.com> Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com> Co-authored-by: Uli Stärk <github@uli-staerk.de> Co-authored-by: Matthew Nataloni <27374786+men6288@users.noreply.github.com> Co-authored-by: Timo <6358247+timotk@users.noreply.github.com> Co-authored-by: will-hall <77327489+will-hall@users.noreply.github.com> * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update .travis.yml * Update api.py * Update .pylintrc Co-authored-by: Noah Cardoza <noahcardoza@gmail.com> Co-authored-by: Adam Mahameed <23741427+adam-mah@users.noreply.github.com> Co-authored-by: Adam <adamm@ownbackup.com> Co-authored-by: Pranav Dahiya <31065394+pranav-dahiya@users.noreply.github.com> Co-authored-by: pdahiya <pdahiya@commvault.com> Co-authored-by: magardner <magardner@users.noreply.github.com> Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com> Co-authored-by: Uli Stärk <github@uli-staerk.de> Co-authored-by: Matthew Nataloni <27374786+men6288@users.noreply.github.com> Co-authored-by: Timo <6358247+timotk@users.noreply.github.com> Co-authored-by: will-hall <77327489+will-hall@users.noreply.github.com> * Support OAuth2 endpoint APIs (#550) OAuth Endpoints (https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_endpoints.htm&type=5) Co-authored-by: JonWobken <49450080+jon-wobken@users.noreply.github.com> * Update CHANGES Co-authored-by: David A <45184827+Haeilifax@users.noreply.github.com> Co-authored-by: David Arcuri <david.arcuri@consultch.com> Co-authored-by: sohith <77746813+sohithkumar@users.noreply.github.com> Co-authored-by: Hal Ali <haleemur@users.noreply.github.com> Co-authored-by: Hal Ali <hal.ali@agilebits.com> Co-authored-by: Noah Cardoza <noahcardoza@gmail.com> Co-authored-by: Adam Mahameed <23741427+adam-mah@users.noreply.github.com> Co-authored-by: Adam <adamm@ownbackup.com> Co-authored-by: Pranav Dahiya <31065394+pranav-dahiya@users.noreply.github.com> Co-authored-by: pdahiya <pdahiya@commvault.com> Co-authored-by: magardner <magardner@users.noreply.github.com> Co-authored-by: Martin Gardner (Slalom) <martin.gardner@slalom.com> Co-authored-by: Uli Stärk <github@uli-staerk.de> Co-authored-by: Matthew Nataloni <27374786+men6288@users.noreply.github.com> Co-authored-by: Timo <6358247+timotk@users.noreply.github.com> Co-authored-by: will-hall <77327489+will-hall@users.noreply.github.com> Co-authored-by: Hiroki Kajiwara <hkajiwara@gmail.com>
This is a start to addressing the issue outlined in #292.
While I think it should work for every type of login, I'm not sure it's the best way. I'm pretty new to Salesforce and I'm pretty sure I've seen some documentation about actual refresh tokens which I have not incorporated.
This PR also needs tests set up. While I started, I don't have too much experience writing good tests and don't have much time at the moment. However, I can get to that later. I figure it would be more helpful to get this out and figure out testing in the future.