summaryrefslogtreecommitdiff
path: root/lorrycontroller/hosts.py
blob: 76eeadf90fa2a04345063bbfea98ffb3026aa82a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Copyright (C) 2020  Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

import abc


class DownstreamHost(abc.ABC):
    @staticmethod
    def add_app_settings(app_settings):
        '''Add any application settings that are specific to this Downstream
        Host type.
        '''
        pass

    @staticmethod
    def check_app_settings(app_settings):
        '''Validate any fields in the application settings that are specific
        to this Downstream Host type.
        '''
        pass

    @abc.abstractmethod
    def __init__(self, app_settings):
        '''Construct a Downstream Host connector from the application
        settings.
        '''
        pass

    @abc.abstractmethod
    def prepare_repo(self, repo_path, metadata):
        '''Prepare a repository on the Host.  If the repository does not exist
        and Lorry won't automatically create it, this method must create the
        repository.  It should also set any given metadata on the repository,
        whether or not it already exists.

        repo_path is the path that the repository should appear at
        within the Host.

        metadata is a dictionary with the following (optional) keys
        defined:

        - head: Name of the default branch (a.k.a. HEAD)
        - description: Short string describing the repository
        '''
        pass