From 56b5d6da08f2936ef6cd4233f4d2f2d40d95f7fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= <sybren@stuvel.eu>
Date: Thu, 16 Mar 2017 10:20:59 +0100
Subject: [PATCH] Pass software name + version in a User-Agent HTTP header

This header is included with each request, so that the Manager can handle
software version bookkeeping however it sees fit.
---
 flamenco_worker/__init__.py |  1 +
 flamenco_worker/cli.py      |  3 ++-
 flamenco_worker/upstream.py | 10 ++++++++++
 setup.py                    |  2 +-
 update_version.sh           |  1 +
 5 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/flamenco_worker/__init__.py b/flamenco_worker/__init__.py
index e69de29b..57d34b89 100644
--- a/flamenco_worker/__init__.py
+++ b/flamenco_worker/__init__.py
@@ -0,0 +1 @@
+__version__ = '2.0-beta10-worker3'
diff --git a/flamenco_worker/cli.py b/flamenco_worker/cli.py
index 465b98e1..731a8458 100644
--- a/flamenco_worker/cli.py
+++ b/flamenco_worker/cli.py
@@ -37,10 +37,11 @@ def main():
     shutdown_future = loop.create_future()
 
     # Piece all the components together.
-    from . import runner, worker, upstream, upstream_update_queue, may_i_run
+    from . import runner, worker, upstream, upstream_update_queue, may_i_run, __version__
 
     fmanager = upstream.FlamencoManager(
         manager_url=confparser.value('manager_url'),
+        flamenco_worker_version=__version__,
     )
 
     tuqueue = upstream_update_queue.TaskUpdateQueue(
diff --git a/flamenco_worker/upstream.py b/flamenco_worker/upstream.py
index 4c19b4c5..97592573 100644
--- a/flamenco_worker/upstream.py
+++ b/flamenco_worker/upstream.py
@@ -1,5 +1,6 @@
 import attr
 import concurrent.futures
+import functools
 import requests
 
 from . import attrs_extra
@@ -11,6 +12,7 @@ HTTP_TIMEOUT = 3  # in seconds
 @attr.s
 class FlamencoManager:
     manager_url = attr.ib(validator=attr.validators.instance_of(str))
+    flamenco_worker_version = attr.ib(validator=attr.validators.instance_of(str))
     session = attr.ib(default=None, init=False)
     auth = attr.ib(default=None, init=False)  # tuple (worker_id, worker_secret)
 
@@ -34,6 +36,10 @@ class FlamencoManager:
     async def patch(self, *args, loop, **kwargs) -> requests.Response:
         return await self.client_request('PATCH', *args, loop=loop, **kwargs)
 
+    @functools.lru_cache(1)
+    def user_agent(self):
+        return 'Flamenco-Worker %s' % self.flamenco_worker_version
+
     async def client_request(self, method, url, *,
                              params=None,
                              data=None,
@@ -75,6 +81,10 @@ class FlamencoManager:
             else:
                 self._log.debug('%s %s with JSON: %s', method, abs_url, json)
 
+        if headers is None:
+            headers = {}
+        headers['User-Agent'] = self.user_agent()
+
         http_req = partial(self.session.request,
                            method, abs_url,
                            params=params,
diff --git a/setup.py b/setup.py
index 9f253f9a..dfffd3d9 100755
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ import setuptools
 if __name__ == '__main__':
     setuptools.setup(
         name='flamenco-worker',
-        version='2.0.0-beta10-worker3',
+        version='2.0-beta10-worker3',
         description='Flamenco Worker implementation',
         author='Sybren A. Stüvel',
         author_email='sybren@blender.studio',
diff --git a/update_version.sh b/update_version.sh
index 9c4b2b53..21180780 100755
--- a/update_version.sh
+++ b/update_version.sh
@@ -6,6 +6,7 @@ if [ -z "$1" ]; then
 fi
 
 sed "s/version='[^']*'/version='$1'/" -i setup.py
+sed "s/__version__\s*=\s*'[^']*'/__version__ = '$1'/" -i flamenco_worker/__init__.py
 
 git diff
 echo
-- 
GitLab