Browse Source

Rework how services are created.

master
Chris Smith 5 years ago
parent
commit
19768371b9

+ 19
- 0
lineandsinker/services/__init__.py View File

@@ -0,0 +1,19 @@
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 View File

@@ -1,5 +1,3 @@
1
-import os
2
-
3 1
 from jsonref import requests
4 2
 
5 3
 from ..common import get_hook_url
@@ -8,6 +6,7 @@ from .service import Service
8 6
 
9 7
 class Gitea(Service):
10 8
     def __init__(self, url, token, install_hooks=False):
9
+        super().__init__("gitea")
11 10
         self._url = url
12 11
         self._token = token
13 12
         self._install_hooks = install_hooks
@@ -20,7 +19,7 @@ class Gitea(Service):
20 19
             yield repo["full_name"], repo["ssh_url"], repo["clone_url"]
21 20
 
22 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 23
         path = f"repos/{project}/hooks"
25 24
         hooks = self._request("get", path).json()
26 25
 
@@ -48,10 +47,3 @@ class Gitea(Service):
48 47
             kwargs["params"] = {}
49 48
         kwargs["params"]["access_token"] = self._token
50 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 View File

@@ -1,4 +1,3 @@
1
-import os
2 1
 import jenkins
3 2
 from bs4 import BeautifulSoup
4 3
 
@@ -10,6 +9,7 @@ class Jenkins(Service):
10 9
     SCM_CLASS = "hudson.plugins.git.GitSCM"
11 10
 
12 11
     def __init__(self, url, username, password):
12
+        super().__init__("jenkins")
13 13
         self._server = jenkins.Jenkins(url, username=username, password=password)
14 14
 
15 15
     def get_jobs(self):
@@ -22,14 +22,3 @@ class Jenkins(Service):
22 22
 
23 23
     def build_job(self, name):
24 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 View File

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

+ 3
- 3
main.py View File

@@ -6,7 +6,7 @@ from functools import wraps
6 6
 from flask import Flask, abort, request, Response
7 7
 
8 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 12
 url_pattern = re.compile(
@@ -46,8 +46,8 @@ def reportbot_announce(message):
46 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 51
 repos = dict((name, [ssh, clone]) for name, ssh, clone in gitea_service.get_repos())
52 52
 jobs = list(jenkins_service.get_jobs())
53 53
 app = Flask(__name__)

Loading…
Cancel
Save