We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Enable python 3.7 in CI 
At least for Linux



--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `conans/pylint_plugin.py`
Content:
```
1 """Pylint plugin for ConanFile"""
2 
3 import astroid
4 from astroid import MANAGER, scoped_nodes
5 
6 
7 def register(linter):
8     """Declare package as plugin
9     
10     This function needs to be declared so astroid treats
11     current file as a plugin.
12     """
13     pass
14 
15 
16 def transform_conanfile(node):
17     """Transform definition of ConanFile class so dynamic fields are visible to pylint"""
18 
19     str_class = scoped_nodes.builtin_lookup("str")
20     info_class = MANAGER.ast_from_module_name("conans.model.info").lookup(
21         "ConanInfo")
22     build_requires_class = MANAGER.ast_from_module_name(
23         "conans.client.graph.graph_manager").lookup("_RecipeBuildRequires")
24     file_copier_class = MANAGER.ast_from_module_name(
25         "conans.client.file_copier").lookup("FileCopier")
26     file_importer_class = MANAGER.ast_from_module_name(
27         "conans.client.importer").lookup("_FileImporter")
28 
29     dynamic_fields = {
30         "source_folder": str_class,
31         "build_folder": str_class,
32         "package_folder": str_class,
33         "build_requires": build_requires_class,
34         "info_build": info_class,
35         "info": info_class,
36         "copy": file_copier_class,
37         "copy_deps": file_importer_class,
38     }
39 
40     for f, t in dynamic_fields.items():
41         node.locals[f] = [t]
42 
43 
44 MANAGER.register_transform(
45     scoped_nodes.Class, transform_conanfile,
46     lambda node: node.qname() == "conans.model.conan_file.ConanFile")
47
```

Path: `.ci/jenkins/conf.py`
Content:
```
1 import argparse
2 import os
3 import platform
4 from contextlib import contextmanager
5 
6 winpylocation = {"py27": "C:\\Python27\\python.exe",
7                  "py34": "C:\\Python34\\python.exe",
8                  "py36": "C:\\Python36\\python.exe"}
9 
10 macpylocation = {"py27": "/usr/bin/python",  # /Users/jenkins_ci/.pyenv/versions/2.7.11/bin/python",
11                  "py34": "/Users/jenkins_ci/.pyenv/versions/3.4.7/bin/python",
12                  "py36": "/Users/jenkins_ci/.pyenv/versions/3.6.5/bin/python"}
13 
14 linuxpylocation = {"py27": "/usr/bin/python2.7",
15                    "py34": "/usr/bin/python3.4",
16                    "py36": "/usr/bin/python3.6"}
17 
18 
19 def get_environ(tmp_path):
20     if platform.system() == "Windows":
21         return {"CONAN_BASH_PATH": "c:/tools/msys64/usr/bin/bash",
22                 "CONAN_USER_HOME_SHORT": os.path.join(tmp_path, ".conan")}
23     return {}
24 
25 
26 class Extender(argparse.Action):
27     """Allows to use the same flag several times in a command and creates a list with the values.
28        For example:
29            conan install MyPackage/1.2@user/channel -o qt:value -o mode:2 -s cucumber:true
30            It creates:
31            options = ['qt:value', 'mode:2']
32            settings = ['cucumber:true']
33     """
34     def __call__(self, parser, namespace, values, option_strings=None):  # @UnusedVariable
35         # Need None here incase `argparse.SUPPRESS` was supplied for `dest`
36         dest = getattr(namespace, self.dest, None)
37         if not hasattr(dest, 'extend') or dest == self.default:
38             dest = []
39             setattr(namespace, self.dest, dest)
40             # if default isn't set to None, this method might be called
41             # with the default as `values` for other arguments which
42             # share this destination.
43             parser.set_defaults(**{self.dest: None})
44 
45         try:
46             dest.extend(values)
47         except ValueError:
48             dest.append(values)
49 
50 
51 @contextmanager
52 def environment_append(env_vars):
53     old_env = dict(os.environ)
54     for name, value in env_vars.items():
55         if isinstance(value, list):
56             env_vars[name] = os.pathsep.join(value)
57             if name in old_env:
58                 env_vars[name] += os.pathsep + old_env[name]
59     os.environ.update(env_vars)
60     try:
61         yield
62     finally:
63         os.environ.clear()
64         os.environ.update(old_env)
65 
66 
67 @contextmanager
68 def chdir(newdir):
69     old_path = os.getcwd()
70     os.chdir(newdir)
71     try:
72         yield
73     finally:
74         os.chdir(old_path)
75
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/.ci/jenkins/conf.py b/.ci/jenkins/conf.py
--- a/.ci/jenkins/conf.py
+++ b/.ci/jenkins/conf.py
@@ -13,7 +13,8 @@
 
 linuxpylocation = {"py27": "/usr/bin/python2.7",
                    "py34": "/usr/bin/python3.4",
-                   "py36": "/usr/bin/python3.6"}
+                   "py36": "/usr/bin/python3.6",
+                   "py37": "/usr/bin/python3.7"}
 
 
 def get_environ(tmp_path):
diff --git a/conans/pylint_plugin.py b/conans/pylint_plugin.py
--- a/conans/pylint_plugin.py
+++ b/conans/pylint_plugin.py
@@ -1,7 +1,6 @@
 """Pylint plugin for ConanFile"""
-
 import astroid
-from astroid import MANAGER, scoped_nodes
+from astroid import MANAGER
 
 
 def register(linter):
@@ -16,7 +15,7 @@
 def transform_conanfile(node):
     """Transform definition of ConanFile class so dynamic fields are visible to pylint"""
 
-    str_class = scoped_nodes.builtin_lookup("str")
+    str_class = astroid.builtin_lookup("str")
     info_class = MANAGER.ast_from_module_name("conans.model.info").lookup(
         "ConanInfo")
     build_requires_class = MANAGER.ast_from_module_name(
@@ -42,5 +41,5 @@
 
 
 MANAGER.register_transform(
-    scoped_nodes.Class, transform_conanfile,
+    astroid.ClassDef, transform_conanfile,
     lambda node: node.qname() == "conans.model.conan_file.ConanFile")

{"golden_diff": "diff --git a/.ci/jenkins/conf.py b/.ci/jenkins/conf.py\n--- a/.ci/jenkins/conf.py\n+++ b/.ci/jenkins/conf.py\n@@ -13,7 +13,8 @@\n \n linuxpylocation = {\"py27\": \"/usr/bin/python2.7\",\n                    \"py34\": \"/usr/bin/python3.4\",\n-                   \"py36\": \"/usr/bin/python3.6\"}\n+                   \"py36\": \"/usr/bin/python3.6\",\n+                   \"py37\": \"/usr/bin/python3.7\"}\n \n \n def get_environ(tmp_path):\ndiff --git a/conans/pylint_plugin.py b/conans/pylint_plugin.py\n--- a/conans/pylint_plugin.py\n+++ b/conans/pylint_plugin.py\n@@ -1,7 +1,6 @@\n \"\"\"Pylint plugin for ConanFile\"\"\"\n-\n import astroid\n-from astroid import MANAGER, scoped_nodes\n+from astroid import MANAGER\n \n \n def register(linter):\n@@ -16,7 +15,7 @@\n def transform_conanfile(node):\n     \"\"\"Transform definition of ConanFile class so dynamic fields are visible to pylint\"\"\"\n \n-    str_class = scoped_nodes.builtin_lookup(\"str\")\n+    str_class = astroid.builtin_lookup(\"str\")\n     info_class = MANAGER.ast_from_module_name(\"conans.model.info\").lookup(\n         \"ConanInfo\")\n     build_requires_class = MANAGER.ast_from_module_name(\n@@ -42,5 +41,5 @@\n \n \n MANAGER.register_transform(\n-    scoped_nodes.Class, transform_conanfile,\n+    astroid.ClassDef, transform_conanfile,\n     lambda node: node.qname() == \"conans.model.conan_file.ConanFile\")\n", "issue": "Enable python 3.7 in CI \nAt least for Linux\r\n\r\n\n", "before_files": [{"content": "\"\"\"Pylint plugin for ConanFile\"\"\"\n\nimport astroid\nfrom astroid import MANAGER, scoped_nodes\n\n\ndef register(linter):\n    \"\"\"Declare package as plugin\n    \n    This function needs to be declared so astroid treats\n    current file as a plugin.\n    \"\"\"\n    pass\n\n\ndef transform_conanfile(node):\n    \"\"\"Transform definition of ConanFile class so dynamic fields are visible to pylint\"\"\"\n\n    str_class = scoped_nodes.builtin_lookup(\"str\")\n    info_class = MANAGER.ast_from_module_name(\"conans.model.info\").lookup(\n        \"ConanInfo\")\n    build_requires_class = MANAGER.ast_from_module_name(\n        \"conans.client.graph.graph_manager\").lookup(\"_RecipeBuildRequires\")\n    file_copier_class = MANAGER.ast_from_module_name(\n        \"conans.client.file_copier\").lookup(\"FileCopier\")\n    file_importer_class = MANAGER.ast_from_module_name(\n        \"conans.client.importer\").lookup(\"_FileImporter\")\n\n    dynamic_fields = {\n        \"source_folder\": str_class,\n        \"build_folder\": str_class,\n        \"package_folder\": str_class,\n        \"build_requires\": build_requires_class,\n        \"info_build\": info_class,\n        \"info\": info_class,\n        \"copy\": file_copier_class,\n        \"copy_deps\": file_importer_class,\n    }\n\n    for f, t in dynamic_fields.items():\n        node.locals[f] = [t]\n\n\nMANAGER.register_transform(\n    scoped_nodes.Class, transform_conanfile,\n    lambda node: node.qname() == \"conans.model.conan_file.ConanFile\")\n", "path": "conans/pylint_plugin.py"}, {"content": "import argparse\nimport os\nimport platform\nfrom contextlib import contextmanager\n\nwinpylocation = {\"py27\": \"C:\\\\Python27\\\\python.exe\",\n                 \"py34\": \"C:\\\\Python34\\\\python.exe\",\n                 \"py36\": \"C:\\\\Python36\\\\python.exe\"}\n\nmacpylocation = {\"py27\": \"/usr/bin/python\",  # /Users/jenkins_ci/.pyenv/versions/2.7.11/bin/python\",\n                 \"py34\": \"/Users/jenkins_ci/.pyenv/versions/3.4.7/bin/python\",\n                 \"py36\": \"/Users/jenkins_ci/.pyenv/versions/3.6.5/bin/python\"}\n\nlinuxpylocation = {\"py27\": \"/usr/bin/python2.7\",\n                   \"py34\": \"/usr/bin/python3.4\",\n                   \"py36\": \"/usr/bin/python3.6\"}\n\n\ndef get_environ(tmp_path):\n    if platform.system() == \"Windows\":\n        return {\"CONAN_BASH_PATH\": \"c:/tools/msys64/usr/bin/bash\",\n                \"CONAN_USER_HOME_SHORT\": os.path.join(tmp_path, \".conan\")}\n    return {}\n\n\nclass Extender(argparse.Action):\n    \"\"\"Allows to use the same flag several times in a command and creates a list with the values.\n       For example:\n           conan install MyPackage/1.2@user/channel -o qt:value -o mode:2 -s cucumber:true\n           It creates:\n           options = ['qt:value', 'mode:2']\n           settings = ['cucumber:true']\n    \"\"\"\n    def __call__(self, parser, namespace, values, option_strings=None):  # @UnusedVariable\n        # Need None here incase `argparse.SUPPRESS` was supplied for `dest`\n        dest = getattr(namespace, self.dest, None)\n        if not hasattr(dest, 'extend') or dest == self.default:\n            dest = []\n            setattr(namespace, self.dest, dest)\n            # if default isn't set to None, this method might be called\n            # with the default as `values` for other arguments which\n            # share this destination.\n            parser.set_defaults(**{self.dest: None})\n\n        try:\n            dest.extend(values)\n        except ValueError:\n            dest.append(values)\n\n\n@contextmanager\ndef environment_append(env_vars):\n    old_env = dict(os.environ)\n    for name, value in env_vars.items():\n        if isinstance(value, list):\n            env_vars[name] = os.pathsep.join(value)\n            if name in old_env:\n                env_vars[name] += os.pathsep + old_env[name]\n    os.environ.update(env_vars)\n    try:\n        yield\n    finally:\n        os.environ.clear()\n        os.environ.update(old_env)\n\n\n@contextmanager\ndef chdir(newdir):\n    old_path = os.getcwd()\n    os.chdir(newdir)\n    try:\n        yield\n    finally:\n        os.chdir(old_path)\n", "path": ".ci/jenkins/conf.py"}], "after_files": [{"content": "\"\"\"Pylint plugin for ConanFile\"\"\"\nimport astroid\nfrom astroid import MANAGER\n\n\ndef register(linter):\n    \"\"\"Declare package as plugin\n    \n    This function needs to be declared so astroid treats\n    current file as a plugin.\n    \"\"\"\n    pass\n\n\ndef transform_conanfile(node):\n    \"\"\"Transform definition of ConanFile class so dynamic fields are visible to pylint\"\"\"\n\n    str_class = astroid.builtin_lookup(\"str\")\n    info_class = MANAGER.ast_from_module_name(\"conans.model.info\").lookup(\n        \"ConanInfo\")\n    build_requires_class = MANAGER.ast_from_module_name(\n        \"conans.client.graph.graph_manager\").lookup(\"_RecipeBuildRequires\")\n    file_copier_class = MANAGER.ast_from_module_name(\n        \"conans.client.file_copier\").lookup(\"FileCopier\")\n    file_importer_class = MANAGER.ast_from_module_name(\n        \"conans.client.importer\").lookup(\"_FileImporter\")\n\n    dynamic_fields = {\n        \"source_folder\": str_class,\n        \"build_folder\": str_class,\n        \"package_folder\": str_class,\n        \"build_requires\": build_requires_class,\n        \"info_build\": info_class,\n        \"info\": info_class,\n        \"copy\": file_copier_class,\n        \"copy_deps\": file_importer_class,\n    }\n\n    for f, t in dynamic_fields.items():\n        node.locals[f] = [t]\n\n\nMANAGER.register_transform(\n    astroid.ClassDef, transform_conanfile,\n    lambda node: node.qname() == \"conans.model.conan_file.ConanFile\")\n", "path": "conans/pylint_plugin.py"}, {"content": "import argparse\nimport os\nimport platform\nfrom contextlib import contextmanager\n\nwinpylocation = {\"py27\": \"C:\\\\Python27\\\\python.exe\",\n                 \"py34\": \"C:\\\\Python34\\\\python.exe\",\n                 \"py36\": \"C:\\\\Python36\\\\python.exe\"}\n\nmacpylocation = {\"py27\": \"/usr/bin/python\",  # /Users/jenkins_ci/.pyenv/versions/2.7.11/bin/python\",\n                 \"py34\": \"/Users/jenkins_ci/.pyenv/versions/3.4.7/bin/python\",\n                 \"py36\": \"/Users/jenkins_ci/.pyenv/versions/3.6.5/bin/python\"}\n\nlinuxpylocation = {\"py27\": \"/usr/bin/python2.7\",\n                   \"py34\": \"/usr/bin/python3.4\",\n                   \"py36\": \"/usr/bin/python3.6\",\n                   \"py37\": \"/usr/bin/python3.7\"}\n\n\ndef get_environ(tmp_path):\n    if platform.system() == \"Windows\":\n        return {\"CONAN_BASH_PATH\": \"c:/tools/msys64/usr/bin/bash\",\n                \"CONAN_USER_HOME_SHORT\": os.path.join(tmp_path, \".conan\")}\n    return {}\n\n\nclass Extender(argparse.Action):\n    \"\"\"Allows to use the same flag several times in a command and creates a list with the values.\n       For example:\n           conan install MyPackage/1.2@user/channel -o qt:value -o mode:2 -s cucumber:true\n           It creates:\n           options = ['qt:value', 'mode:2']\n           settings = ['cucumber:true']\n    \"\"\"\n    def __call__(self, parser, namespace, values, option_strings=None):  # @UnusedVariable\n        # Need None here incase `argparse.SUPPRESS` was supplied for `dest`\n        dest = getattr(namespace, self.dest, None)\n        if not hasattr(dest, 'extend') or dest == self.default:\n            dest = []\n            setattr(namespace, self.dest, dest)\n            # if default isn't set to None, this method might be called\n            # with the default as `values` for other arguments which\n            # share this destination.\n            parser.set_defaults(**{self.dest: None})\n\n        try:\n            dest.extend(values)\n        except ValueError:\n            dest.append(values)\n\n\n@contextmanager\ndef environment_append(env_vars):\n    old_env = dict(os.environ)\n    for name, value in env_vars.items():\n        if isinstance(value, list):\n            env_vars[name] = os.pathsep.join(value)\n            if name in old_env:\n                env_vars[name] += os.pathsep + old_env[name]\n    os.environ.update(env_vars)\n    try:\n        yield\n    finally:\n        os.environ.clear()\n        os.environ.update(old_env)\n\n\n@contextmanager\ndef chdir(newdir):\n    old_path = os.getcwd()\n    os.chdir(newdir)\n    try:\n        yield\n    finally:\n        os.chdir(old_path)\n", "path": ".ci/jenkins/conf.py"}]}