blob: 2458105f4c4e8dd8a42d206a3291f1cea9fa70c7 [file] [log] [blame]
Adrià Vilanova Martínezf19ea432024-01-23 20:20:52 +01001# Copyright 2016 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
Copybara854996b2021-09-07 19:36:02 +00004
5"""Service manager to initialize all services."""
6from __future__ import print_function
7from __future__ import division
8from __future__ import absolute_import
9
10from features import autolink
11from services import cachemanager_svc
12from services import chart_svc
13from services import config_svc
14from services import features_svc
15from services import issue_svc
16from services import project_svc
17from services import spam_svc
18from services import star_svc
19from services import template_svc
20from services import user_svc
21from services import usergroup_svc
22
23
24svcs = None
25
26
27class Services(object):
28 """A simple container for widely-used service objects."""
29
30 def __init__(
31 self, project=None, user=None, issue=None, config=None,
32 usergroup=None, cache_manager=None, autolink_obj=None,
33 user_star=None, project_star=None, issue_star=None, features=None,
34 spam=None, hotlist_star=None, chart=None, template=None):
35 # Persistence services
36 self.project = project
37 self.user = user
38 self.usergroup = usergroup
39 self.issue = issue
40 self.config = config
41 self.user_star = user_star
42 self.project_star = project_star
43 self.hotlist_star = hotlist_star
44 self.issue_star = issue_star
45 self.features = features
46 self.template = template
47
48 # Misc. services
49 self.cache_manager = cache_manager
50 self.autolink = autolink_obj
51 self.spam = spam
52 self.chart = chart
53
54
55def set_up_services():
56 """Set up all services."""
57
58 global svcs
59 if svcs is None:
60 # Sorted as: cache_manager first, everything which depends on it,
61 # issue (which depends on project and config), things with no deps.
62 cache_manager = cachemanager_svc.CacheManager()
63 config = config_svc.ConfigService(cache_manager)
64 features = features_svc.FeaturesService(cache_manager, config)
65 hotlist_star = star_svc.HotlistStarService(cache_manager)
66 issue_star = star_svc.IssueStarService(cache_manager)
67 project = project_svc.ProjectService(cache_manager)
68 project_star = star_svc.ProjectStarService(cache_manager)
69 user = user_svc.UserService(cache_manager)
70 user_star = star_svc.UserStarService(cache_manager)
71 usergroup = usergroup_svc.UserGroupService(cache_manager)
72 chart = chart_svc.ChartService(config)
73 issue = issue_svc.IssueService(project, config, cache_manager, chart)
74 autolink_obj = autolink.Autolink()
75 spam = spam_svc.SpamService()
76 template = template_svc.TemplateService(cache_manager)
77 svcs = Services(
78 cache_manager=cache_manager, config=config, features=features,
79 issue_star=issue_star, project=project, project_star=project_star,
80 user=user, user_star=user_star, usergroup=usergroup, issue=issue,
81 autolink_obj=autolink_obj, spam=spam, hotlist_star=hotlist_star,
82 chart=chart, template=template)
83 return svcs