Skip to content

Commit f58c991

Browse files
authored
Merge pull request #757 from tylerj117/main
[Bug] Fixes `session.create_permission_url()` to omit `scope` param if not required
2 parents 92aa042 + 2f998c6 commit f58c991

File tree

5 files changed

+42
-17
lines changed

5 files changed

+42
-17
lines changed

CHANGELOG

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
== Unreleased
22

3+
- Remove requirement to provide scopes to Permission URL, as it should be omitted if defined with the TOML file.
4+
35
== Version 12.7.0
46

57
- Remove requirement to use a predefined API version. Now you can use any valid API version string. ([#737](https://github.com/Shopify/shopify_python_api/pull/737))

README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,12 @@ pip install --upgrade ShopifyAPI
6666
api_version = '2024-07'
6767
state = binascii.b2a_hex(os.urandom(15)).decode("utf-8")
6868
redirect_uri = "http://myapp.com/auth/shopify/callback"
69+
# `scope` should be omitted if provided by app's TOML
6970
scopes = ['read_products', 'read_orders']
7071

7172
newSession = shopify.Session(shop_url, api_version)
72-
auth_url = newSession.create_permission_url(scopes, redirect_uri, state)
73+
# `scope` should be omitted if provided by app's TOML
74+
auth_url = newSession.create_permission_url(redirect_uri, scopes, state)
7375
# redirect to auth_url
7476
```
7577

@@ -155,7 +157,7 @@ _Note: Your application must be public to test the billing process. To test on a
155157
> **⚠️ Note**: As of October 1, 2024, the REST Admin API is legacy:
156158
> - Public apps must migrate to GraphQL by February 2025
157159
> - Custom apps must migrate to GraphQL by April 2025
158-
>
160+
>
159161
> For migration guidance, see [Shopify's migration guide](https://shopify.dev/docs/apps/build/graphql/migrate/new-product-model)
160162

161163
It is recommended to have at least a basic grasp on the principles of the [pyactiveresource](https://github.com/Shopify/pyactiveresource) library, which is a port of rails/ActiveResource to Python and upon which this package relies heavily.

shopify/session.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,11 @@ def __init__(self, shop_url, version=None, token=None, access_scopes=None):
5353
self.access_scopes = access_scopes
5454
return
5555

56-
def create_permission_url(self, scope, redirect_uri, state=None):
57-
query_params = {"client_id": self.api_key, "scope": ",".join(scope), "redirect_uri": redirect_uri}
56+
def create_permission_url(self, redirect_uri, scope=None, state=None):
57+
query_params = {"client_id": self.api_key, "redirect_uri": redirect_uri}
58+
# `scope` should be omitted if provided by app's TOML
59+
if scope:
60+
query_params["scope"] = ",".join(scope)
5861
if state:
5962
query_params["state"] = state
6063
return "https://%s/admin/oauth/authorize?%s" % (self.url, urllib.parse.urlencode(query_params))

shopify/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION = "12.7.0"
1+
VERSION = "12.7.1"

test/session_test.py

+30-12
Original file line numberDiff line numberDiff line change
@@ -86,51 +86,69 @@ def test_temp_works_without_currently_active_session(self):
8686
self.assertEqual("https://testshop.myshopify.com/admin/api/unstable", assigned_site)
8787
self.assertEqual("https://none/admin/api/unstable", shopify.ShopifyResource.site)
8888

89-
def test_create_permission_url_returns_correct_url_with_single_scope_and_redirect_uri(self):
89+
def test_create_permission_url_returns_correct_url_with_redirect_uri(self):
90+
shopify.Session.setup(api_key="My_test_key", secret="My test secret")
91+
session = shopify.Session("http://localhost.myshopify.com", "unstable")
92+
permission_url = session.create_permission_url("my_redirect_uri.com")
93+
self.assertEqual(
94+
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com",
95+
self.normalize_url(permission_url),
96+
)
97+
98+
def test_create_permission_url_returns_correct_url_with_redirect_uri_and_single_scope(self):
9099
shopify.Session.setup(api_key="My_test_key", secret="My test secret")
91100
session = shopify.Session("http://localhost.myshopify.com", "unstable")
92101
scope = ["write_products"]
93-
permission_url = session.create_permission_url(scope, "my_redirect_uri.com")
102+
permission_url = session.create_permission_url("my_redirect_uri.com", scope=scope)
94103
self.assertEqual(
95104
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com&scope=write_products",
96105
self.normalize_url(permission_url),
97106
)
98107

99-
def test_create_permission_url_returns_correct_url_with_dual_scope_and_redirect_uri(self):
108+
def test_create_permission_url_returns_correct_url_with_redirect_uri_and_dual_scope(self):
100109
shopify.Session.setup(api_key="My_test_key", secret="My test secret")
101110
session = shopify.Session("http://localhost.myshopify.com", "unstable")
102111
scope = ["write_products", "write_customers"]
103-
permission_url = session.create_permission_url(scope, "my_redirect_uri.com")
112+
permission_url = session.create_permission_url("my_redirect_uri.com", scope=scope)
104113
self.assertEqual(
105114
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com&scope=write_products%2Cwrite_customers",
106115
self.normalize_url(permission_url),
107116
)
108117

109-
def test_create_permission_url_returns_correct_url_with_no_scope_and_redirect_uri(self):
118+
def test_create_permission_url_returns_correct_url_with_redirect_uri_and_empty_scope(self):
110119
shopify.Session.setup(api_key="My_test_key", secret="My test secret")
111120
session = shopify.Session("http://localhost.myshopify.com", "unstable")
112121
scope = []
113-
permission_url = session.create_permission_url(scope, "my_redirect_uri.com")
122+
permission_url = session.create_permission_url("my_redirect_uri.com", scope=scope)
123+
self.assertEqual(
124+
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com",
125+
self.normalize_url(permission_url),
126+
)
127+
128+
def test_create_permission_url_returns_correct_url_with_redirect_uri_and_state(self):
129+
shopify.Session.setup(api_key="My_test_key", secret="My test secret")
130+
session = shopify.Session("http://localhost.myshopify.com", "unstable")
131+
permission_url = session.create_permission_url("my_redirect_uri.com", state="mystate")
114132
self.assertEqual(
115-
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com&scope=",
133+
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com&state=mystate",
116134
self.normalize_url(permission_url),
117135
)
118136

119-
def test_create_permission_url_returns_correct_url_with_no_scope_and_redirect_uri_and_state(self):
137+
def test_create_permission_url_returns_correct_url_with_redirect_uri_empty_scope_and_state(self):
120138
shopify.Session.setup(api_key="My_test_key", secret="My test secret")
121139
session = shopify.Session("http://localhost.myshopify.com", "unstable")
122140
scope = []
123-
permission_url = session.create_permission_url(scope, "my_redirect_uri.com", state="mystate")
141+
permission_url = session.create_permission_url("my_redirect_uri.com", scope=scope, state="mystate")
124142
self.assertEqual(
125-
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com&scope=&state=mystate",
143+
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com&state=mystate",
126144
self.normalize_url(permission_url),
127145
)
128146

129-
def test_create_permission_url_returns_correct_url_with_single_scope_and_redirect_uri_and_state(self):
147+
def test_create_permission_url_returns_correct_url_with_redirect_uri_and_single_scope_and_state(self):
130148
shopify.Session.setup(api_key="My_test_key", secret="My test secret")
131149
session = shopify.Session("http://localhost.myshopify.com", "unstable")
132150
scope = ["write_customers"]
133-
permission_url = session.create_permission_url(scope, "my_redirect_uri.com", state="mystate")
151+
permission_url = session.create_permission_url("my_redirect_uri.com", scope=scope, state="mystate")
134152
self.assertEqual(
135153
"https://localhost.myshopify.com/admin/oauth/authorize?client_id=My_test_key&redirect_uri=my_redirect_uri.com&scope=write_customers&state=mystate",
136154
self.normalize_url(permission_url),

0 commit comments

Comments
 (0)