Parcourir la source

Rework how services are created.

master
Chris Smith il y a 6 ans
Parent
révision
19768371b9

+ 19
- 0
lineandsinker/services/__init__.py Voir le fichier

1
+import os
2
+
3
+from .jenkins import Jenkins
4
+from .gitea import Gitea
5
+
6
+
7
+def gitea_factory():
8
+    return Gitea(os.environ["LAS_GITEA_URL"], os.environ["LAS_GITEA_TOKEN"])
9
+
10
+
11
+def jenkins_factory():
12
+    return Jenkins(
13
+        os.environ["LAS_JENKINS_URL"],
14
+        os.environ["LAS_JENKINS_USER"],
15
+        os.environ["LAS_JENKINS_PASSWORD"],
16
+    )
17
+
18
+
19
+factories = {"gitea": gitea_factory, "jenkins": jenkins_factory}

+ 2
- 10
lineandsinker/services/gitea.py Voir le fichier

1
-import os
2
-
3
 from jsonref import requests
1
 from jsonref import requests
4
 
2
 
5
 from ..common import get_hook_url
3
 from ..common import get_hook_url
8
 
6
 
9
 class Gitea(Service):
7
 class Gitea(Service):
10
     def __init__(self, url, token, install_hooks=False):
8
     def __init__(self, url, token, install_hooks=False):
9
+        super().__init__("gitea")
11
         self._url = url
10
         self._url = url
12
         self._token = token
11
         self._token = token
13
         self._install_hooks = install_hooks
12
         self._install_hooks = install_hooks
20
             yield repo["full_name"], repo["ssh_url"], repo["clone_url"]
19
             yield repo["full_name"], repo["ssh_url"], repo["clone_url"]
21
 
20
 
22
     def _maybe_install_gitea_hook(self, project):
21
     def _maybe_install_gitea_hook(self, project):
23
-        hook_url = get_hook_url("gitea", project)
22
+        hook_url = get_hook_url(self.type, project)
24
         path = f"repos/{project}/hooks"
23
         path = f"repos/{project}/hooks"
25
         hooks = self._request("get", path).json()
24
         hooks = self._request("get", path).json()
26
 
25
 
48
             kwargs["params"] = {}
47
             kwargs["params"] = {}
49
         kwargs["params"]["access_token"] = self._token
48
         kwargs["params"]["access_token"] = self._token
50
         return requests.request(method, f"{self._url}api/v1/{api_path}", **kwargs)
49
         return requests.request(method, f"{self._url}api/v1/{api_path}", **kwargs)
51
-
52
-
53
-def gitea_factory():
54
-    return Gitea(os.environ["LAS_GITEA_URL"], os.environ["LAS_GITEA_TOKEN"])
55
-
56
-
57
-Service.add_factory(gitea_factory)

+ 1
- 12
lineandsinker/services/jenkins.py Voir le fichier

1
-import os
2
 import jenkins
1
 import jenkins
3
 from bs4 import BeautifulSoup
2
 from bs4 import BeautifulSoup
4
 
3
 
10
     SCM_CLASS = "hudson.plugins.git.GitSCM"
9
     SCM_CLASS = "hudson.plugins.git.GitSCM"
11
 
10
 
12
     def __init__(self, url, username, password):
11
     def __init__(self, url, username, password):
12
+        super().__init__("jenkins")
13
         self._server = jenkins.Jenkins(url, username=username, password=password)
13
         self._server = jenkins.Jenkins(url, username=username, password=password)
14
 
14
 
15
     def get_jobs(self):
15
     def get_jobs(self):
22
 
22
 
23
     def build_job(self, name):
23
     def build_job(self, name):
24
         self._server.build_job(name)
24
         self._server.build_job(name)
25
-
26
-
27
-def jenkins_factory():
28
-    return Jenkins(
29
-        os.environ["LAS_JENKINS_URL"],
30
-        os.environ["LAS_JENKINS_USER"],
31
-        os.environ["LAS_JENKINS_PASSWORD"],
32
-    )
33
-
34
-
35
-Service.add_factory(jenkins_factory)

+ 2
- 6
lineandsinker/services/service.py Voir le fichier

1
 class Service:
1
 class Service:
2
-
3
-    factories = []
2
+    def __init__(self, type):
3
+        self.type = type
4
 
4
 
5
     def accept_hook(self, identifier, request):
5
     def accept_hook(self, identifier, request):
6
         pass
6
         pass
7
-
8
-    @classmethod
9
-    def add_factory(cls, factory):
10
-        cls.factories.append(factory)

+ 3
- 3
main.py Voir le fichier

6
 from flask import Flask, abort, request, Response
6
 from flask import Flask, abort, request, Response
7
 
7
 
8
 from lineandsinker.common import get_hook_key
8
 from lineandsinker.common import get_hook_key
9
-from lineandsinker.services import gitea, jenkins
9
+from lineandsinker.services import gitea_factory, jenkins_factory
10
 
10
 
11
 
11
 
12
 url_pattern = re.compile(
12
 url_pattern = re.compile(
46
         app.logger.exception("Unable to send report bot message")
46
         app.logger.exception("Unable to send report bot message")
47
 
47
 
48
 
48
 
49
-jenkins_service = jenkins.jenkins_factory()
50
-gitea_service = gitea.gitea_factory()
49
+jenkins_service = jenkins_factory()
50
+gitea_service = gitea_factory()
51
 repos = dict((name, [ssh, clone]) for name, ssh, clone in gitea_service.get_repos())
51
 repos = dict((name, [ssh, clone]) for name, ssh, clone in gitea_service.get_repos())
52
 jobs = list(jenkins_service.get_jobs())
52
 jobs = list(jenkins_service.get_jobs())
53
 app = Flask(__name__)
53
 app = Flask(__name__)

Chargement…
Annuler
Enregistrer