Skip to content
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

Conversation

NoahCardoza
Copy link
Contributor

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.

@@ -207,6 +212,20 @@ def __init__(

self.api_usage = {}

def _generate_headers(self):
Copy link
Contributor Author

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):
Copy link
Contributor Author

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(
Copy link
Contributor Author

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()
Copy link
Contributor Author

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):
Copy link
Contributor Author

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.

jon-wobken and others added 6 commits January 5, 2022 09:25
* 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>
@jon-wobken jon-wobken changed the base branch from master to release/v1.11.5 January 5, 2022 15:45
timotk and others added 9 commits January 5, 2022 09:59
…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
@jon-wobken jon-wobken added the Backlog Issue will be looked at sometime in the future label Feb 1, 2022
@shanehh
Copy link

shanehh commented Apr 26, 2022

Hi simple-salesforce team.. please merge this PR?

@dansmachina
Copy link

Hi! Following up on this feature, it would be really nice to have it 🥇

@jon-wobken jon-wobken changed the base branch from release/v1.11.5 to release/v1.12.0 May 23, 2022 17:55
@jon-wobken jon-wobken self-assigned this May 23, 2022
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(
Copy link
Collaborator

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

Copy link
Contributor Author

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
@jon-wobken jon-wobken changed the base branch from release/v1.12.0 to feature/release/v1.12.0/refresh_session July 13, 2022 14:49
@jon-wobken jon-wobken merged commit bd39ec4 into simple-salesforce:feature/release/v1.12.0/refresh_session Jul 13, 2022
jon-wobken added a commit that referenced this pull request Jul 13, 2022
* 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>
jon-wobken added a commit that referenced this pull request Jul 13, 2022
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Backlog Issue will be looked at sometime in the future In Review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

10 participants