Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5ad5138

Browse filesBrowse files
committed
fix conflicts
2 parents 73114ff + a526642 commit 5ad5138
Copy full SHA for 5ad5138

File tree

4 files changed

+64
-21
lines changed
Filter options

4 files changed

+64
-21
lines changed

‎plotly/plotly/plotly.py

Copy file name to clipboardExpand all lines: plotly/plotly/plotly.py
+20-14Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import six
2424
import base64
2525
import requests
26-
from requests.auth import HTTPBasicAuth
2726

2827
if sys.version[:1] == '2':
2928
from urlparse import urlparse
@@ -584,12 +583,9 @@ def get(figure_or_data, format='png', width=None, height=None):
584583
"https://plot.ly/python/static-image-export/"
585584
)
586585

587-
credentials = get_credentials()
588-
validate_credentials(credentials)
589-
username, api_key = credentials['username'], credentials['api_key']
590-
headers = {'Plotly-Version': version.__version__,
591-
'Content-Type': 'application/json',
592-
'Plotly-Client-Platform': 'python'}
586+
headers = _api_v2.headers()
587+
headers['plotly_version'] = version.__version__
588+
headers['content-type'] = 'application/json'
593589

594590
payload = {'figure': figure, 'format': format}
595591
if width is not None:
@@ -602,7 +598,6 @@ def get(figure_or_data, format='png', width=None, height=None):
602598
res = requests.post(
603599
url, data=json.dumps(payload, cls=utils.PlotlyJSONEncoder),
604600
headers=headers, verify=get_config()['plotly_ssl_verification'],
605-
auth=HTTPBasicAuth(username, api_key)
606601
)
607602

608603
headers = res.headers
@@ -1199,17 +1194,28 @@ def api_url(cls, resource):
11991194
@classmethod
12001195
def headers(cls):
12011196
credentials = get_credentials()
1197+
12021198
# todo, validate here?
1203-
un, api_key = credentials['username'], credentials['api_key']
1204-
encoded_un_key_pair = base64.b64encode(
1205-
six.b('{0}:{1}'.format(un, api_key))
1206-
).decode('utf8')
1199+
username, api_key = credentials['username'], credentials['api_key']
1200+
encoded_api_auth = base64.b64encode(six.b('{0}:{1}'.format(
1201+
username, api_key))).decode('utf8')
12071202

1208-
return {
1209-
'authorization': 'Basic ' + encoded_un_key_pair,
1203+
headers = {
12101204
'plotly-client-platform': 'python {0}'.format(version.__version__)
12111205
}
12121206

1207+
if get_config()['plotly_proxy_authorization']:
1208+
proxy_username = credentials['proxy_username']
1209+
proxy_password = credentials['proxy_password']
1210+
encoded_proxy_auth = base64.b64encode(six.b('{0}:{1}'.format(
1211+
proxy_username, proxy_password))).decode('utf8')
1212+
headers['authorization'] = 'Basic ' + encoded_proxy_auth
1213+
headers['plotly-authorization'] = 'Basic ' + encoded_api_auth
1214+
else:
1215+
headers['authorization'] = 'Basic ' + encoded_api_auth
1216+
1217+
return headers
1218+
12131219

12141220
def validate_credentials(credentials):
12151221
"""

‎plotly/session.py

Copy file name to clipboardExpand all lines: plotly/session.py
+5-2Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,17 @@ def sign_in(username, api_key, **kwargs):
4444
4545
If unspecified, credentials and config are searched for in `.plotly` dir.
4646
47-
:param (str) username: The username you'd use to sign into Plotly
47+
:param (str) username: The username you'd use to sign in to Plotly
4848
:param (str) api_key: The api key associated with above username
4949
:param (list|optional) stream_ids: Stream tokens for above credentials
50+
:param (str|optional) proxy_username: The un associated with with your Proxy
51+
:param (str|optional) proxy_password: The pw associated with your Proxy un
5052
5153
:param (str|optional) plotly_domain:
5254
:param (str|optional) plotly_streaming_domain:
5355
:param (str|optional) plotly_api_domain:
54-
:param (str|optional) plotly_ssl_verification:
56+
:param (bool|optional) plotly_ssl_verification:
57+
:param (bool|optional) plotly_proxy_authorization:
5558
5659
"""
5760
# TODO: verify these _credentials with plotly

‎plotly/tests/test_core/test_tools/test_file_tools.py

Copy file name to clipboardExpand all lines: plotly/tests/test_core/test_tools/test_file_tools.py
+9-2Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,24 @@ def test_reset_config_file():
1010

1111
def test_set_config_file():
1212
pd, ps = 'this', 'thing'
13-
tls.set_config_file(plotly_domain=pd, plotly_streaming_domain=ps)
13+
ssl_verify, proxy_auth = True, True
14+
tls.set_config_file(plotly_domain=pd, plotly_streaming_domain=ps,
15+
plotly_ssl_verification=ssl_verify,
16+
plotly_proxy_authorization=proxy_auth)
1417
config = tls.get_config_file()
1518
assert config['plotly_domain'] == pd
1619
assert config['plotly_streaming_domain'] == ps
20+
assert config['plotly_ssl_verification'] == ssl_verify
21+
assert config['plotly_proxy_authorization'] == proxy_auth
1722
tls.reset_config_file() # else every would hate me :)
1823

1924

2025
def test_credentials_tools():
2126
original_creds = tls.get_credentials_file()
22-
expected = ['username', 'stream_ids', 'api_key']
27+
expected = ['username', 'stream_ids', 'api_key', 'proxy_username',
28+
'proxy_password']
2329
assert all(x in original_creds for x in expected)
30+
2431
# now, if that worked, we can try this!
2532
tls.reset_credentials_file()
2633
reset_creds = tls.get_credentials_file()

‎plotly/tools.py

Copy file name to clipboardExpand all lines: plotly/tools.py
+30-3Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,16 @@ def warning_on_one_line(message, category, filename, lineno, file=None, line=Non
4747

4848
# this sets both the DEFAULTS and the TYPES for these items
4949
_FILE_CONTENT = {CREDENTIALS_FILE: {'username': '',
50+
'api_key': '',
51+
'proxy_username': '',
52+
'proxy_password': '',
5053
'api_key': '',
5154
'stream_ids': []},
5255
CONFIG_FILE: {'plotly_domain': 'https://plot.ly',
5356
'plotly_streaming_domain': 'stream.plot.ly',
5457
'plotly_api_domain': 'https://api.plot.ly',
55-
'plotly_ssl_verification': True}}
58+
'plotly_ssl_verification': True,
59+
'plotly_proxy_authorization': False}}
5660

5761
try:
5862
os.mkdir(TEST_DIR)
@@ -99,9 +103,19 @@ def ensure_local_plotly_files():
99103

100104
### credentials tools ###
101105

102-
def set_credentials_file(username=None, api_key=None, stream_ids=None):
106+
def set_credentials_file(username=None,
107+
api_key=None,
108+
stream_ids=None,
109+
proxy_username=None,
110+
proxy_password=None):
103111
"""Set the keyword-value pairs in `~/.plotly_credentials`.
104112
113+
:param (str) username: The username you'd use to sign in to Plotly
114+
:param (str) api_key: The api key associated with above username
115+
:param (list) stream_ids: Stream tokens for above credentials
116+
:param (str) proxy_username: The un associated with with your Proxy
117+
:param (str) proxy_password: The pw associated with your Proxy un
118+
105119
"""
106120
if not _file_permissions:
107121
raise exceptions.PlotlyError("You don't have proper file permissions "
@@ -112,6 +126,10 @@ def set_credentials_file(username=None, api_key=None, stream_ids=None):
112126
credentials['username'] = username
113127
if isinstance(api_key, six.string_types):
114128
credentials['api_key'] = api_key
129+
if isinstance(proxy_username, six.string_types):
130+
credentials['proxy_username'] = proxy_username
131+
if isinstance(proxy_password, six.string_types):
132+
credentials['proxy_password'] = proxy_password
115133
if isinstance(stream_ids, (list, tuple)):
116134
credentials['stream_ids'] = stream_ids
117135
utils.save_json_dict(CREDENTIALS_FILE, credentials)
@@ -145,9 +163,16 @@ def reset_credentials_file():
145163
def set_config_file(plotly_domain=None,
146164
plotly_streaming_domain=None,
147165
plotly_api_domain=None,
148-
plotly_ssl_verification=None):
166+
plotly_ssl_verification=None,
167+
plotly_proxy_authorization=None):
149168
"""Set the keyword-value pairs in `~/.plotly/.config`.
150169
170+
:param (str) plotly_domain: ex - https://plot.ly
171+
:param (str) plotly_streaming_domain: ex - stream.plot.ly
172+
:param (str) plotly_api_domain: ex - https://api.plot.ly
173+
:param (bool) plotly_ssl_verification: True = verify, False = don't verify
174+
:param (bool) plotly_proxy_authorization: True = use plotly proxy auth creds
175+
151176
"""
152177
if not _file_permissions:
153178
raise exceptions.PlotlyError("You don't have proper file permissions "
@@ -162,6 +187,8 @@ def set_config_file(plotly_domain=None,
162187
settings['plotly_api_domain'] = plotly_api_domain
163188
if isinstance(plotly_ssl_verification, (six.string_types, bool)):
164189
settings['plotly_ssl_verification'] = plotly_ssl_verification
190+
if isinstance(plotly_proxy_authorization, (six.string_types, bool)):
191+
settings['plotly_proxy_authorization'] = plotly_proxy_authorization
165192
utils.save_json_dict(CONFIG_FILE, settings)
166193
ensure_local_plotly_files() # make sure what we just put there is OK
167194

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.