Skip to content

Commit 0cd35bc

Browse files
committed
Updated Export Server request method to include Referer and User-Agent.
1 parent c6c07cd commit 0cd35bc

File tree

1 file changed

+51
-1
lines changed

1 file changed

+51
-1
lines changed

highcharts_core/headless_export.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import requests
1212
from validator_collection import validators, checkers
1313

14+
from highcharts_core import __version__ as highcharts_version
1415
from highcharts_core import errors, constants
1516
from highcharts_core.decorators import class_sensitive
1617
from highcharts_core.metaclasses import HighchartsMeta
@@ -57,6 +58,9 @@ def __init__(self, **kwargs):
5758
self._files = None
5859
self._css = None
5960
self._js = None
61+
62+
self._referer = None
63+
self._user_agent = None
6064

6165
self.protocol = kwargs.get('protocol',
6266
os.getenv('HIGHCHARTS_EXPORT_SERVER_PROTOCOL',
@@ -87,6 +91,11 @@ def __init__(self, **kwargs):
8791
js = kwargs.get('js', None)
8892
resources = kwargs.get('resources', None)
8993

94+
self.referer = kwargs.get('referer',
95+
os.getenv('HIGHCHARTS_EXPORT_SERVER_REFERER', 'https://www.highcharts.com'))
96+
self.user_agent = kwargs.get('user_agent',
97+
os.getenv('HIGHCHARTS_EXPORT_SERVER_USER_AGENT', None))
98+
9099
if resources:
91100
self.resources = kwargs.get('resources', None)
92101
else:
@@ -96,6 +105,43 @@ def __init__(self, **kwargs):
96105

97106
super().__init__(**kwargs)
98107

108+
@property
109+
def referer(self) -> Optional[str]:
110+
"""The referer to use when making requests to the export server. Defaults to
111+
``'https://www.highcharts.com'``.
112+
113+
:rtype: :class:`str <python:str>` or :obj:`None <python:None>`
114+
"""
115+
return self._referer
116+
117+
@referer.setter
118+
def referer(self, value):
119+
value = validators.url(value, allow_empty = True)
120+
if not value:
121+
value = 'https://www.highcharts.com'
122+
123+
self._referer = value
124+
125+
@property
126+
def user_agent(self) -> Optional[str]:
127+
"""The user agent to use when making requests to the export server. Defaults to
128+
``Highcharts for Python / v.<VERSION NUMBER>.
129+
130+
:rtype: :class:`str <python:str>` or :obj:`None <python:None>`
131+
"""
132+
if self._user_agent:
133+
return self._user_agent
134+
135+
return f'Highcharts for Python / v.{highcharts_version.__version__}'
136+
137+
@user_agent.setter
138+
def user_agent(self, value):
139+
value = validators.string(value, allow_empty = True)
140+
if not value:
141+
value = None
142+
143+
self._user_agent = value
144+
99145
@property
100146
def protocol(self) -> Optional[str]:
101147
"""The protocol over which the Highcharts for Python library should communicate
@@ -926,7 +972,11 @@ def request_chart(self,
926972

927973
result = requests.post(self.url,
928974
data = as_json.encode('utf-8'),
929-
headers = { 'Content-Type': 'application/json' },
975+
headers = {
976+
'Content-Type': 'application/json',
977+
'Referer': self.referer,
978+
'User-Agent': self.user_agent,
979+
},
930980
auth = basic_auth,
931981
timeout = timeout)
932982

0 commit comments

Comments
 (0)