Add the copyright header to decorators.py
[functest.git] / functest / utils / decorators.py
index 99bcef3..230a99e 100644 (file)
@@ -1,34 +1,55 @@
 #!/usr/bin/env python
 
+# Copyright (c) 2017 Orange and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# pylint: disable=missing-docstring
+
+import errno
+import functools
+import os
+
 import mock
 import requests.sessions
-import urlparse
+from six.moves import urllib
 
 
 def can_dump_request_to_file(method):
 
     def dump_preparedrequest(request, **kwargs):
-        parseresult = urlparse.urlparse(request.url)
+        # pylint: disable=unused-argument
+        parseresult = urllib.parse.urlparse(request.url)
         if parseresult.scheme == "file":
-            with open(parseresult.path.replace('/results', ''), 'a') as f:
+            try:
+                dirname = os.path.dirname(parseresult.path)
+                os.makedirs(dirname)
+            except OSError as ex:
+                if ex.errno != errno.EEXIST:
+                    raise
+            with open(parseresult.path, 'a') as dumpfile:
                 headers = ""
                 for key in request.headers:
                     headers += key + " " + request.headers[key] + "\n"
                 message = "{} {}\n{}\n{}\n\n\n".format(
                     request.method, request.url, headers, request.body)
-                f.write(message)
+                dumpfile.write(message)
         return mock.Mock()
 
     def patch_request(method, url, **kwargs):
         with requests.sessions.Session() as session:
-            parseresult = urlparse.urlparse(url)
+            parseresult = urllib.parse.urlparse(url)
             if parseresult.scheme == "file":
-                with mock.patch.object(
-                        session, 'send', side_effect=dump_preparedrequest):
+                with mock.patch.object(session, 'send',
+                                       side_effect=dump_preparedrequest):
                     return session.request(method=method, url=url, **kwargs)
             else:
                 return session.request(method=method, url=url, **kwargs)
 
+    @functools.wraps(method)
     def hook(*args, **kwargs):
         with mock.patch('requests.api.request', side_effect=patch_request):
             return method(*args, **kwargs)