CHANGELOG

See Versioning Policy for our versioning policy.

The upgrading doc is a good reference if you are upgrading to a major new version of the SDK.

v3.10.0 (2022-06-27)

  • Add User Credential methods to GCSClient (#582)

    • get_user_credential_list

    • get_user_credential

    • create_user_credential

    • update_user_credential

    • delete_user_credential

  • Add connector_id_to_name helper to GCSClient to resolve GCS Connector UUIDs to human readable Connector display names (#582)

  • Remove nonexistent monitor_ongoing scope from TransferScopes (#583)

v3.9.0 (2022-06-02)

  • Add helper objects and methods for interacting with Globus Connect Server Storage Gateways (#554)

    • New methods on GCSClient: create_storage_gateway, get_storage_gateway, get_storage_gateway_list, update_storage_gateway, delete_storage_gateway

    • New helper classes for constructing storage gateway documents. StorageGatewayDocument is the main one, but also POSIXStoragePolicies and POSIXStagingStoragePolicies are added for declaring the storage gateway policies field. More policy helpers will be added in future versions.

  • Add support for more StorageGatewayPolicies documents. (#562) The following types are now available:

    • BlackPearlStoragePolicies

    • BoxStoragePolicies

    • CephStoragePolicies

    • GoogleDriveStoragePolicies

    • GoogleCloudStoragePolicies

    • OneDriveStoragePolicies

    • AzureBlobStoragePolicies

    • S3StoragePolicies

    • ActiveScaleStoragePolicies

    • IrodsStoragePolicies

    • HPSSStoragePolicies

  • Add https scope to GCSCollectionScopeBuilder (#563)

  • Update the fields used to extract AuthAPIError messages (#566)

  • ScopeBuilder objects now implement __str__ for easy viewing. For example, print(globus_sdk.TransferClient.scopes) (#568)

  • Imports from globus_sdk are now evaluated lazily via module-level __getattr__ on python 3.7+ (#571)

    • This improves the performance of imports for almost all use-cases, in some cases by over 80%

    • The method globus_sdk._force_eager_imports() can be used to force non-lazy imports, for latency sensitive applications which wish to control when the time cost of import evaluation is paid. This method is private and is therefore is not covered under the globus-sdk’s SemVer guarantees, but it is expected to remain stable for the foreseeable future.

  • Several improvements to Transfer helper objects (#573)

    • Add TransferData.add_filter_rule for adding filter rules (exclude rules) to transfers

    • Add skip_activation_check as an argument to DeleteData and TransferData

    • The sync_level argument to TransferData is now annotated more accurately to reject bad strings

  • Improve handling of array-style API responses (#575)

    • Response objects now define __bool__ as bool(data). This means that bool(response) could be False if the data is {}, [], 0, or other falsey-types. Previously, __bool__ was not defined, meaning it was always True

    • globus_sdk.response.ArrayResponse is a new class which describes responses which are expected to hold a top-level array. It satisfies the sequence protocol, allowing indexing with integers and slices, iteration over the array data, and length checking with len(response)

    • globus_sdk.GroupsClient.get_my_groups returns an ArrayResponse, meaning the response data can now be iterated and otherwise used

v3.8.0 (2022-05-04)

  • Several changes expose more details of HTTP requests (#551)

    • GlobusAPIError has a new property headers which provides the case-insensitive mapping of header values from the response

    • GlobusAPIError and GlobusHTTPResponse now include http_reason, a string property containing the “reason” from the response

    • BaseClient.request and RequestsTransport.request now have options for setting boolean options allow_redirects and stream, controlling how requests are processed

  • New tools for working with optional and dependent scope strings (#553)

    • A new class is provided for constructing optional and dependent scope strings, MutableScope. Import as in from globus_sdk.scopes import MutableScope

    • ScopeBuilder objects provide a method, make_mutable, which converts from a scope name to a MutableScope object. See documentation on scopes for usage details

v3.7.0 (2022-04-08)

  • Add a client for the Timer service (#548)

    • Add TimerClient class, along with TimerJob for constructing data to pass to the Timer service for job creation, and TimerAPIError

    • Modify globus_sdk.config utilities to provide URLs for Actions and Timer services

  • Fix annotations to allow request data to be a string. This is supported at runtime but was missing from annotations. (#549)

v3.6.0 (2022-03-18)

  • ScopeBuilder objects now support known_url_scopes, and known scope arguments to a ScopeBuilder may now be of type str in addition to list[str] (#536)

  • Add the RequestsTransport.tune contextmanager to the transport layer, allowing the settings on the transport to be set temporarily (#540)

v3.5.0 (2022-03-02)

  • globus_sdk.IdentityMap can now take a cache as an input. This allows multiple IdentityMap instances to share the same storage cache. Any mutable mapping type is valid, so the cache can be backed by a database or other storage (#500)

  • Add TransferRequestsTransport class that does not retry ExternalErrors. This fixes cases in which the TransferClient incorrectly retried requests (#522)

  • Use the “reason phrase” as a failover for stringified API errors with no body (#524)

  • Add support for include as a parameter to GroupsClient.get_group. include can be a string or iterable of strings (#528)

  • Enhance documentation for all of the parameters on methods of GroupsClient

  • Add a new method to tokenstorage, SQLiteAdapter.iter_namespaces, which iterates over all namespaces visible in the token database (#529)

v3.4.2 (2022-02-18)

  • Fix the pagination behavior for TransferClient on task_skipped_errors and task_successful_transfers, and apply the same fix to the endpoint manager variants of these methods. Prior to the fix, paginated calls would return a single page of results and then stop (#520)

v3.4.1 (2022-02-11)

  • The typing_extensions requirement in package metadata now sets a lower bound of 4.0, to force upgrades of installations to get a new enough version (#518)

v3.4.0 (2022-02-11)

  • Support pagination on SearchClient.post_search (#507)

  • Add support for scroll queries to SearchClient. SearchClient.scroll and SearchClient.paginated.scroll are now available as methods, and a new helper class, SearchScrollQuery, can be used to easily construct scrolling queries. (#507)

  • Add methods to SearchClient for managing index roles. create_role, delete_role, and get_role_list (#507)

  • Add mapped_collection and filter query arguments to GCSClient.get_collection_list (#510)

  • Add role methods to GCSClient (#513)

    • GCSClient.get_role_list lists endpoint or collection roles

    • GCSClient.create_role creates a role

    • GCSClient.get_role gets a single role

    • GCSClient.delete_role deletes a role

  • The response from AuthClient.get_identities now supports iteration, returning results from the "identities" array (#514)

v3.3.1 (2022-01-25)

  • Packaging bugfix. globus-sdk is now built with pypa’s build tool, to resolve issues with wheel builds.

v3.3.0 (2022-01-25)

  • Add update_group method to GroupsClient (#506)

  • The TransferData and DeleteData helper objects now accept the following parameters: notify_on_succeeded, notify_on_failed, and notify_on_inactive. All three are boolean parameters with a default of True. (#502)

  • Several minor bugs have been found and fixed (#504)

    • Exceptions raised in the SDK always use raise ... from syntax where appropriate. This corrects exception chaining in the local endpoint and several response objects.

    • The encoding of files opened by the SDK is now always UTF-8

    • TransferData will now reject unsupported sync_level values with a ValueError on initialization, rather than erroring at submission time. The sync_level has also had its type annotation fixed to allow for int values.

    • Several instances of undocumented parameters have been discovered, and these are now rectified.

  • Add Paginator.wrap as a method for getting a paginated methods. This interface is more verbose than the existing paginated methods, but correctly preserves type annotations. It is therefore preferable for users who are using mypy to do type checking. (#494)

  • Paginator objects are now generics over a type var for their page type. The page type is bounded by GlobusHTTPResponse, and most type-checker behaviors will remain unchanged (#495)

  • Document globus_sdk.config.get_service_url and globus_sdk.config.get_webapp_url (#496)

    • Internally, these are updated to be able to default to the GLOBUS_SDK_ENVIRONMENT setting, so specifying an environment is no longer required

v3.2.1 (2021-12-13)

  • Update to avoid deprecation warnings on python 3.10 (#499)

v3.2.0 (2021-12-02)

  • Add iter_items as a method on TransferData and DeleteData (#488)

  • Add the resource_server property to client classes and objects. For example, TransferClient.resource_server and GroupsClient().resource_server are now usable to get the resource server string for the relevant services. resource_server is documented as part of globus_sdk.BaseClient and may be None. (#489)

  • Fix type annotations on client methods with paginated variants (#491)

  • ClientCredentialsAuthorizer now accepts Union[str, Iterable[str]] as the type for scopes (#498)

  • The implementation of several properties of GlobusHTTPResponse has changed (#497)

    • Responses have a new property, headers, a case-insensitive dict of headers from the response

    • Responses now implement http_status and content_type as properties without setters

v3.1.0 (2021-10-13)

  • Add filter as a supported parameter to TransferClient.task_list (#484)

  • The filter parameter to TransferClient.task_list and TransferClient.operation_ls can now be passed as a Dict[str, str | List[str]]. Documentation on the TransferClient explains how this will be formatted, and is linked from the param docs for filter on each method (#484)

  • Adjust package metadata for cryptography dependency, specifying cryptography>=3.3.1 and no upper bound. This is meant to help mitigate issues in which an older cryptography version is installed gets used in spite of it being incompatible with pyjwt[crypto]>=2.0 (#486)

v3.0.3 (2021-10-11)

  • Fix several internal decorators which were destroying type information about decorated functions. Type signatures of many methods are therefore corrected (#485)

v3.0.2 (2021-09-29)

  • Update the minimum dependency versions to lower bounds which are verified to work with the testsuite (#482)

  • Produce more debug logging when SDK logs are enabled (#480)

v3.0.1 (2021-09-15)

  • ScopeBuilder objects now define the type of __getattr__ for mypy to know that dynamic attributes are strings (#472)

  • Fix remaining type: ignore usages in globus-sdk (#473)

  • Fix malformed PEP508 python_version bound in dev dependencies (#474)

v3.0.0 (2021-09-14)

  • Add filter_is_error parameter to advanced task list (#467)

  • Add a LocalGlobusConnectPersonal.get_owner_info() for looking up local user information from gridmap (#466)

  • Add support for GCS collection create and update. This includes new data helpers, MappedCollectionDcoument and GuestCollectionDocument (#468)

  • Remove support for bytes values for fields consuming UUIDs (#471)

  • Add support for specifying config_dir to LocalGlobusConnectPersonal (#470)

v3.0.0b4 (2021-09-01)

  • Minor fix to wheel builds: do not declare wheels as universal (#444)

  • Add a new GCSClient class for interacting with GCS Manager APIs (#447)

  • Rename GCSScopeBuilder to GCSCollectionScopeBuilder and add GCSEndpointScopeBuilder. The GCSClient includes helpers for instantiating these scope builders (#448)

  • GCSClient supports get_collection and delete_collection. get_collection uses a new UnpackingGCSResponse response type (#451, #464)

  • Remove BaseClient.qjoin_path (#452)

  • The additional_params parameter to AuthClient.oauth2_get_authorize_url has been renamed to query_params for consistency with other methods (#453)

  • Enforce keyword-only arguments for most SDK-provied APIs (#453)

  • Fix annotations for server_id on TransferClient methods (#455)

  • Add delete_destination_extra param to TransferData (#456)

  • Ensure all TransferClient method parameters are documented (#449, #454, #457, #458, #459, #461, #462)

  • TransferClient.endpoint_manager_task_list now takes filters as named keyword arguments, not only in query_params (#460)

  • Fix visibility typo in GroupsClient (#463)

  • All type annotations for Sequence which could be relaxed to Iterable have been updated (#465)

v3.0.0b3 (2021-08-13)

  • Flesh out the GroupsClient and add helpers for interacting with the Globus Groups service, including enumerated constants, payload builders, and a high-level client for doing non-batch operations called the GroupsManager (#435, #443)

  • globus-sdk now provides much more complete type annotations coverage, allowing type checkers like mypy to catch a much wider range of usage errors (#442)

v3.0.0b2 (2021-07-16)

  • Add scope constants and scope construction helpers. See new documentation on scopes and ScopeBuilders for details (#437, #440)

  • Improve the rendering of API exceptions in stack traces to include the method, URI, and authorization scheme (if recognized) (#439)

  • Payload helper objects (TransferData, DeleteData, and SearchQuery) now inherit from a custom object, not dict, but they are still dict-like in behavior (#438)

  • API Errors now have an attached info object with parsed error data where applicable. See the ErrorInfo documentation for details (#441)

v3.0.0b1 (2021-07-02)

  • Add support for TransferClient.get_shared_endpoint_list (#434)

  • Passthrough parameters to SDK methods for query params and body params are no longer accepted as extra keyword arguments. Instead, they must be passed explicitly in a query_params, body_params, or additional_fields dictionary, depending on the context (#433)

  • The interface for retry parameters has been simplified. RetryPolicy objects have been merged into the transport object, and retry parameters like max_retries may now be supplied directly as transport_params (#430)

v3.0.0a4 (2021-06-28)

  • Fix several paginators which were broken in 3.0.0a3 (#431)

  • Add BaseClient to the top-level exports of globus_sdk, so it can now be accessed under the name globus_sdk.BaseClient

  • Autodocumentation of paginated methods (#432)

v3.0.0a3 (2021-06-25)

  • Pagination has changed significantly. (#418)

** Methods which support pagination like TransferClient.endpoint_search no

longer return an iterable PaginatedResource type. Instead, these client methods return GlobusHTTPResponse objects with a single page of results.

** Paginated variants of these methods are available by renaming a call from

client.<method> to client.paginated.<method>. So, for example, a TransferClient now supports client.paginated.endpoint_search(). The arguments to this function are the same as the original method.

** client.paginated.<method> calls return Paginator objects, which

support two types of iteration: by pages() and by items(). To replicate the same behavior as SDK v1.x and v2.x PaginatedResource types, use items(), as in client.paginated.endpoint_search("query").items()

v3.0.0a2 (2021-06-10)

  • Refactor response classes (#425)

  • A new subpackage is available for public use, globus_sdk.tokenstorage (#405)

  • Add client for Globus Groups API, globus_sdk.GroupsClient. Includes a dedicated error class, globus_sdk.GroupsAPIError

v3.0.0a1 (2021-06-04)

  • Update documentation site style and layout (#423)

  • The interface for GlobusAuthorizer now defines get_authorization_header instead of set_authorization_header, and additional keyword arguments are not allowed (#422)

  • New Transport layer handles HTTP details, variable payload encodings, and automatic request retries (#417)

  • Instead of json_body=... and text_body=..., use data=... combined with encoding="json", encoding="form", or encoding="text" to format payload data. encoding="json" is the default when data is a dict.

  • By default, requests are retried automatically on potentially transient error codes (e.g. http_status=500) and network errors with exponential backoff

  • globus_sdk.BaseClient and its subclasses define retry_policy and transport_class class attributes which can be used to customize the retry behavior used

  • globus-sdk now provides PEP561 typing data (#420)

  • The JWT dependency has been updated to pyjwt>=2,<3 (#416)

  • The config files in ~/.globus.cfg and /etc/globus.cfg are no longer used. Configuration can now be done via environment variables (#409)

  • BaseClient.app_name is a property with a custom setter, replacing set_app_name (#415)

  • OAuthTokenResponse.decode_id_token can now be provided a JWK and openid configuration as parameters. AuthClient implements methods for fetching these data, so that they can be fetched and stored outside of this call. There is no automatic caching of these data. (#403)

  • Remove allowed_authorizer_types restriction from BaseClient (#407)

  • Remove auth_client=... parameter to OAuthTokenResponse.decode_id_token (#400)

v2.0.1 (2021-02-02)

Note

globus-sdk version 2.0.0 was yanked due to a release issue. Version 2.0.1 is the first 2.x version.

v1.11.0 (2021-01-29)

  • Add support for task skipped errors via TransferClient.task_skipped_errors and TransferClient.endpoint_manager_task_skipped_errors (#393)

  • Internal maintenance (#389, #390, #391, #392)

v1.10.0 (2020-12-18)

  • Add support for pyinstaller installation of globus-sdk (#387)

v1.9.1 (2020-08-27)

  • Fix GlobusHTTPResponse to handle responses with no Content-Type header (#375)

v1.9.0 (2020-03-05)

  • Add globus_sdk.IdentityMap, a mapping-like object for Auth ID lookups (#367)

  • Minor documentation and build improvements (#369, #362)

  • Don’t append trailing slashes when no path is given to a low-level client method like get() (#364)

  • Add external_checksum and checksum_algorithm to TransferData.add_item() named arguments (#365)

v1.8.0 (2019-07-11)

  • Add a property to paginated results which shows if more results are available (#346)

  • Update docs to state that Globus SDK uses semver (#357)

  • Fix RefreshTokenAuthorizer to handle a new refresh_token being sent back by Auth (#359)

  • Fix typo in endpoint_search log message (#355)

  • Fix Globus Web App activation links in docs (#356)

v1.7.1 (2019-02-21)

  • Allow arbitrary keyword args to TransferData.add_item() and DeleteData.add_item(), which passthrough to the item bodies (#339)

  • Minor internal improvements (#342, #343)

v1.7.0 (2018-12-18)

  • Add get_task and get_task_list to SearchClient (#335, #336)

  • Internal maintenance and testing improvements (#331, #334, #333)

v1.6.1 (2018-10-30)

  • Replace egg distribution format with wheels (#314)

  • Internal maintenance

v1.6.0 (2018-08-29)

  • Correct handling of environment=”production” as an argument to client construction (#307)

  • RenewingAuthorizer and its subclasses now expose the check_expiration_time method (#309)

  • Allow parameters to be passed to customize the request body of ConfidentialAppAuthClient.oauth2_get_dependent_tokens (#308)

  • Use sha256 hashes of tokens (instead of last 5 chars) in debug logging (#305)

  • Add the patch() method to BaseClient and its subclasses, sending an HTTP PATCH request (#302)

  • Officially add support for python 3.7 (#300)

  • Make pickling SDK objects safer (but still not officially supported!) (#284)

  • Malformed SDK usage may now raise GlobusSDKUsageError instead of ValueError. GlobusSDKUsageError inherits from ValueError (#281)

  • Numerous documentation improvements (#279, #294, #296, #297)

v1.5.0 (2018-02-09)

  • Add support for retrieving a local Globus Connect Personal endpoint’s UUID (#276)

  • Fix bug in search client parameter handling (#274)

v1.4.1 (2017-12-20)

  • Send Content-Type: application/json on requests with JSON request bodies (#266)

  • Support connection timeouts. Default timeout of 60 seconds (#264)

v1.4.0 (2017-12-13)

  • Access token response data by way of scope name (#261)

  • Make cryptography a strict requirement, globus-sdk[jwt] is no longer necessary (#257, #260)

  • Simplify OAuthTokenResponse.decode_id_token to not require the client as an argument (#255)

  • Add (beta) SearchClient class (#259)

v1.3.0 (2017-11-20)

  • Improve error message when installation onto python2.6 is attempted (#245)

  • Raise errors on client instantiation when GLOBUS_SDK_ENVIRONMENT appears to be invalid, support GLOBUS_SDK_ENVIRONMENT=preview (#247)

v1.2.2 (2017-11-01)

  • Allow client classes to accept base_url as an argument to _init__() (#241)

  • Fix packaging to not include testsuite (#232)

  • Improve docs on TransferClient helper classes (#231, #233)

v1.2.1 (2017-09-29)

  • Use PyJWT instead of python-jose for JWT support (#227)

v1.2.0 (2017-08-18)

  • Add Transfer symlink support (#218)

  • Better handle UTF-8 inputs (#208)

  • Fix endpoint manager resume (#224)

  • Doc Updates & Minor Improvements

v1.1.1 (2017-05-19)

  • Use correct paging style when making endpoint_manager_task_list calls (#210)

v1.1.0 (2017-05-01)

  • Add endpoint_manager methods to TransferClient (#191, #199, #200, #201, #203)

  • Change “identities_set” to “identity_set” for token introspection (#163)

  • Fix docs references to oauth2_start_flow_* (#190)

  • Support iterable requested_scopes everywhere (#185)

  • Add python 3.6 to supported platforms (#180)

  • Remove “Beta” from docs (#179)

  • Update dev status classifier to 5, prod (#178)

  • Numerous improvements to testsuite

v1.0.0 (2017-04-10)

  • Adds AuthAPIError with more flexible error payload handling (#175)

v0.7.2 (2017-04-05)

  • Add AuthClient.validate_token (#172)

  • Bugfix for on_refresh users of RefreshTokenAuthorizer and ClientCredentialsAuthorizer (#173)

v0.7.1 (2017-04-03)

  • Remove deprecated oauth2_start_flow_* methods (#170)

  • Add the ClientCredentialsAuthorizer (#164)

  • Add jwt extra install target. pip install "globus_sdk[jwt]" installs python-jose (#169)

v0.7.0 (2017-03-30)

  • Make OAuthTokenResponse.decode_id_token() respect ssl_verify=no configuration (#161)

  • Remove all properties of OAuthTokenResponse other than by_resource_server (#162)

v0.6.0 (2017-03-21)

  • Opt out of the Globus Auth behavior where a GET of an identity username will provision that identity (#145)

  • Fixup OAuth2 PKCE to be spec-compliant (#154)

  • Wrap some requests network-related errors in custom exceptions (#155)

  • Add deadline support to TransferData and DeleteData (#159)

v0.5.1 (2017-02-25)

  • Add support for the prefill_named_grant option to the Native App authorization flow (#143)

  • Unicode string improvements (#129)

  • Better handle unexpected error payloads (#135)