1616from .client_pull import pull_project_async , pull_project_wait , pull_project_finalize
1717from .client_push import push_project_async , push_project_wait , push_project_finalize
1818from .utils import DateTimeEncoder
19+ from .version import __version__
1920
2021
2122this_dir = os .path .dirname (os .path .realpath (__file__ ))
@@ -43,7 +44,9 @@ def __init__(self, url=None, auth_token=None, login=None, password=None, plugin_
4344 self ._auth_params = None
4445 self ._auth_session = None
4546 self ._user_info = None
46- self .client_version = plugin_version if plugin_version is not None else "Python-client/--"
47+ self .client_version = "Python-client/" + __version__
48+ if plugin_version is not None : # this could be e.g. "Plugin/2020.1 QGIS/3.14"
49+ self .client_version += " " + plugin_version
4750 if auth_token :
4851 token_data = decode_token_data (auth_token )
4952 self ._auth_session = {
@@ -89,6 +92,21 @@ def default_url():
8992 """ Returns URL of the public instance of Mergin """
9093 return 'https://public.cloudmergin.com'
9194
95+ def user_agent_info (self ):
96+ """ Returns string as it is sent as User-Agent http header to the server """
97+ system_version = "Unknown"
98+ if platform .system () == "Linux" :
99+ try :
100+ from pip ._vendor import distro
101+ system_version = distro .linux_distribution ()[0 ]
102+ except ModuleNotFoundError : # pip may not be installed...
103+ system_version = "Linux"
104+ elif platform .system () == "Windows" :
105+ system_version = platform .win32_ver ()[0 ]
106+ elif platform .system () == "Mac" :
107+ system_version = platform .mac_ver ()[0 ]
108+ return f"{ self .client_version } ({ platform .system ()} /{ system_version } )"
109+
92110 def _check_token (f ):
93111 def wrapper (self , * args ):
94112 if (not self ._auth_session or self ._auth_session ['expire' ] < datetime .now (timezone .utc )) and self ._auth_params :
@@ -108,18 +126,7 @@ def _do_request(self, request):
108126
109127 if self ._auth_session :
110128 request .add_header ("Authorization" , self ._auth_session ["token" ])
111- system_version = "Unknown"
112- if platform .system () == "Linux" :
113- try :
114- from pip ._vendor import distro
115- system_version = distro .linux_distribution ()[0 ]
116- except ModuleNotFoundError : # pip may not be installed...
117- system_version = "Linux"
118- elif platform .system () == "Windows" :
119- system_version = platform .win32_ver ()[0 ]
120- elif platform .system () == "Mac" :
121- system_version = platform .mac_ver ()[0 ]
122- request .add_header ("User-Agent" , f"{ self .client_version } ({ platform .system ()} /{ system_version } )" )
129+ request .add_header ("User-Agent" , self .user_agent_info ())
123130 try :
124131 return self .opener .open (request )
125132 except urllib .error .HTTPError as e :
@@ -212,6 +219,7 @@ def login(self, login, password):
212219 url = urllib .parse .urljoin (self .url , urllib .parse .quote ("/v1/auth/login" ))
213220 data = json .dumps (self ._auth_params , cls = DateTimeEncoder ).encode ("utf-8" )
214221 request = urllib .request .Request (url , data , {"Content-Type" : "application/json" }, method = "POST" )
222+ request .add_header ("User-Agent" , self .user_agent_info ())
215223 resp = self .opener .open (request )
216224 data = json .load (resp )
217225 session = data ["session" ]
0 commit comments