annotate libervia/backend/plugins/plugin_misc_merge_requests.py @ 4161:2074b2bbe616

core (memory/sqla_mapping): `delete-orphan` in History: add `cascade=delete-orphan` to History's `messages`, `subjects` and `thread`, to make modification of those attributes easier.
author Goffi <goffi@goffi.org>
date Tue, 28 Nov 2023 17:35:20 +0100
parents 4b842c1fb686
children 0d7bb4df2343
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # SAT plugin for Pubsub Schemas
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3459
diff changeset
5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
6
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
11
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
20 from collections import namedtuple
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
21 from twisted.internet import defer
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
22 from twisted.words.protocols.jabber import jid
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
23 from libervia.backend.core.i18n import _
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
24 from libervia.backend.core.constants import Const as C
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
25 from libervia.backend.core import exceptions
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
26 from libervia.backend.tools.common import data_format
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
27 from libervia.backend.core.log import getLogger
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
28
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
29
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
30 log = getLogger(__name__)
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
31
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
32 APP_NS_MERGE_REQUESTS = 'org.salut-a-toi.merge_requests:0'
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
33
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
34 PLUGIN_INFO = {
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 C.PI_NAME: _("Merge requests management"),
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 C.PI_IMPORT_NAME: "MERGE_REQUESTS",
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 C.PI_TYPE: "EXP",
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 C.PI_PROTOCOLS: [],
3459
8dc26e5edcd3 plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents: 3458
diff changeset
39 C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0346", "LISTS", "TEXT_SYNTAXES"],
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 C.PI_MAIN: "MergeRequests",
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 C.PI_HANDLER: "no",
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 C.PI_DESCRIPTION: _("""Merge requests management plugin""")
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 }
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
44
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
45 FIELD_DATA_TYPE = 'type'
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
46 FIELD_DATA = 'request_data'
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
47
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
48
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 MergeRequestHandler = namedtuple("MergeRequestHandler", ['name',
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 'handler',
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 'data_types',
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 'short_desc',
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 'priority'])
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
54
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
55
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 class MergeRequests(object):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
57 META_AUTHOR = 'author'
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
58 META_EMAIL = 'email'
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
59 META_TIMESTAMP = 'timestamp'
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
60 META_HASH = 'hash'
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
61 META_PARENT_HASH = 'parent_hash'
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
62 META_COMMIT_MSG = 'commit_msg'
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
63 META_DIFF = 'diff'
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 # index of the diff in the whole data
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 # needed to retrieve comments location
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
66 META_DIFF_IDX = 'diff_idx'
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
67
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 def __init__(self, host):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
69 log.info(_("Merge requests plugin initialization"))
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 self.host = host
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
71 self._s = self.host.plugins["XEP-0346"]
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
72 self.namespace = self._s.get_submitted_ns(APP_NS_MERGE_REQUESTS)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
73 host.register_namespace('merge_requests', self.namespace)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
74 self._p = self.host.plugins["XEP-0060"]
3459
8dc26e5edcd3 plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents: 3458
diff changeset
75 self._t = self.host.plugins["LISTS"]
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 self._handlers = {}
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 self._handlers_list = [] # handlers sorted by priority
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 self._type_handlers = {} # data type => handler map
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
79 host.bridge.add_method("merge_requests_get", ".plugin",
3586
5f65f4e9f8cb plugin XEP-0060: getItems extra is now serialised dict
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
80 in_sign='ssiassss', out_sign='s',
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
81 method=self._get,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
82 async_=True
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
84 host.bridge.add_method("merge_request_set", ".plugin",
2959
989b622faff6 plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents: 2910
diff changeset
85 in_sign='ssssa{sas}ssss', out_sign='s',
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 method=self._set,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
87 async_=True)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
88 host.bridge.add_method("merge_requests_schema_get", ".plugin",
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 in_sign='sss', out_sign='s',
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
90 method=lambda service, nodeIdentifier, profile_key:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
91 self._s._get_ui_schema(service,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
92 nodeIdentifier,
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
93 default_node=self.namespace,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
94 profile_key=profile_key),
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
95 async_=True)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
96 host.bridge.add_method("merge_request_parse_data", ".plugin",
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 in_sign='ss', out_sign='aa{ss}',
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
98 method=self._parse_data,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
99 async_=True)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
100 host.bridge.add_method("merge_requests_import", ".plugin",
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
101 in_sign='ssssa{ss}s', out_sign='',
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
102 method=self._import,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
103 async_=True
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
104 )
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
105
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 def register(self, name, handler, data_types, short_desc, priority=0):
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
107 """register an merge request handler
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
108
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
109 @param name(unicode): name of the handler
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 @param handler(object): instance of the handler.
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
111 It must have the following methods, which may all return a Deferred:
3040
fee60f17ebac jp: jp asyncio port:
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
112 - check(repository)->bool: True if repository can be handled
fee60f17ebac jp: jp asyncio port:
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
113 - export(repository)->str: return export data, i.e. the patches
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
114 - parse(export_data): parse report data and return a list of dict
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
115 (1 per patch) with:
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
116 - title: title of the commit message (first line)
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
117 - body: body of the commit message
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
118 @aram data_types(list[unicode]): data types that his handler can generate or parse
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
119 """
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
120 if name in self._handlers:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
121 raise exceptions.ConflictError(_("a handler with name {name} already "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
122 "exists!").format(name = name))
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
123 self._handlers[name] = MergeRequestHandler(name,
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
124 handler,
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
125 data_types,
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 short_desc,
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 priority)
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 self._handlers_list.append(name)
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
129 self._handlers_list.sort(key=lambda name: self._handlers[name].priority)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
130 if isinstance(data_types, str):
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
131 data_types = [data_types]
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
132 for data_type in data_types:
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
133 if data_type in self._type_handlers:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
134 log.warning(_('merge requests of type {type} are already handled by '
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
135 '{old_handler}, ignoring {new_handler}').format(
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
136 type = data_type,
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 old_handler = self._type_handlers[data_type].name,
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
138 new_handler = name))
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
139 continue
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
140 self._type_handlers[data_type] = self._handlers[name]
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
141
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
142 def serialise(self, get_data):
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
143 tickets_xmlui, metadata, items_patches = get_data
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
144 tickets_xmlui_s, metadata = self._p.trans_items_data((tickets_xmlui, metadata))
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
145 return data_format.serialise({
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
146 "items": tickets_xmlui_s,
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
147 "metadata": metadata,
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
148 "items_patches": items_patches,
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
149 })
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
150
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
151 def _get(self, service='', node='', max_items=10, item_ids=None, sub_id=None,
3586
5f65f4e9f8cb plugin XEP-0060: getItems extra is now serialised dict
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
152 extra="", profile_key=C.PROF_KEY_NONE):
5f65f4e9f8cb plugin XEP-0060: getItems extra is now serialised dict
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
153 extra = data_format.deserialise(extra)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
154 client, service, node, max_items, extra, sub_id = self._s.prepare_bridge_get(
3586
5f65f4e9f8cb plugin XEP-0060: getItems extra is now serialised dict
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
155 service, node, max_items, sub_id, extra, profile_key)
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
156 d = self.get(client, service, node or None, max_items, item_ids, sub_id or None,
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
157 extra.rsm_request, extra.extra)
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
158 d.addCallback(self.serialise)
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 return d
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
160
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
161 @defer.inlineCallbacks
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
162 def get(self, client, service=None, node=None, max_items=None, item_ids=None,
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
163 sub_id=None, rsm_request=None, extra=None):
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 """Retrieve merge requests and convert them to XMLUI
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
165
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
166 @param extra(XEP-0060.parse, None): can have following keys:
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
167 - update(bool): if True, will return list of parsed request data
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
168 other params are the same as for [TICKETS._get]
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
169 @return (tuple[list[unicode], list[dict[unicode, unicode]])): tuple with
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
170 - XMLUI of the tickets, like [TICKETS._get]
2541
65695b9343d3 jp (xmlui): added whitelist, read_only and values_only options:
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
171 - node metadata
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 - list of parsed request data (if extra['parse'] is set, else empty list)
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
173 """
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
174 if not node:
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
175 node = self.namespace
2603
5d4ac5415b40 plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
176 if extra is None:
5d4ac5415b40 plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
177 extra = {}
5d4ac5415b40 plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
178 # XXX: Q&D way to get list for labels when displaying them, but text when we
5d4ac5415b40 plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
179 # have to modify them
5d4ac5415b40 plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
180 if C.bool(extra.get('labels_as_list', C.BOOL_FALSE)):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
181 filters = {'labels': self._s.textbox_2_list_filter}
2603
5d4ac5415b40 plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
182 else:
5d4ac5415b40 plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
183 filters = {}
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
184 tickets_xmlui, metadata = yield defer.ensureDeferred(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
185 self._s.get_data_form_items(
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
186 client,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
187 service,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
188 node,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
189 max_items=max_items,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
190 item_ids=item_ids,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
191 sub_id=sub_id,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
192 rsm_request=rsm_request,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
193 extra=extra,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
194 form_ns=APP_NS_MERGE_REQUESTS,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
195 filters = filters)
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
196 )
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
197 parsed_patches = []
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
198 if extra.get('parse', False):
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
199 for ticket in tickets_xmlui:
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
200 request_type = ticket.named_widgets[FIELD_DATA_TYPE].value
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
201 request_data = ticket.named_widgets[FIELD_DATA].value
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
202 parsed_data = yield self.parse_data(request_type, request_data)
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
203 parsed_patches.append(parsed_data)
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
204 defer.returnValue((tickets_xmlui, metadata, parsed_patches))
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
205
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
206 def _set(self, service, node, repository, method, values, schema=None, item_id=None,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
207 extra="", profile_key=C.PROF_KEY_NONE):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
208 client, service, node, schema, item_id, extra = self._s.prepare_bridge_set(
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
209 service, node, schema, item_id, extra, profile_key)
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
210 d = defer.ensureDeferred(
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
211 self.set(
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
212 client, service, node, repository, method, values, schema,
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
213 item_id or None, extra, deserialise=True
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
214 )
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
215 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
216 d.addCallback(lambda ret: ret or '')
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
217 return d
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
218
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
219 async def set(self, client, service, node, repository, method='auto', values=None,
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
220 schema=None, item_id=None, extra=None, deserialise=False):
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
221 """Publish a tickets
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
222
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
223 @param service(None, jid.JID): Pubsub service to use
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
224 @param node(unicode, None): Pubsub node to use
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
225 None to use default tickets node
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
226 @param repository(unicode): path to the repository where the code stands
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
227 @param method(unicode): name of one of the registered handler,
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
228 or "auto" to try autodetection.
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
229 other arguments are same as for [TICKETS.set]
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
230 @return (unicode): id of the created item
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
231 """
2473
447c3de6b9e5 plugin merge-requests: fixed "set" method
Goffi <goffi@goffi.org>
parents: 2472
diff changeset
232 if not node:
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
233 node = self.namespace
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
234 if values is None:
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
235 values = {}
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
236 update = extra.get('update', False)
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
237 if not repository and not update:
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
238 # in case of update, we may re-user former patches data
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
239 # so repository is not mandatory
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
240 raise exceptions.DataError(_("repository must be specified"))
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
241
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 if FIELD_DATA in values:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
243 raise exceptions.DataError(_("{field} is set by backend, you must not set "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
244 "it in frontend").format(field = FIELD_DATA))
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
245
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
246 if repository:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
247 if method == 'auto':
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
248 for name in self._handlers_list:
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
249 handler = self._handlers[name].handler
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
250 can_handle = await handler.check(repository)
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
251 if can_handle:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
252 log.info(_("{name} handler will be used").format(name=name))
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
253 break
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
254 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
255 log.warning(_("repository {path} can't be handled by any installed "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
256 "handler").format(
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
257 path = repository))
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
258 raise exceptions.NotFound(_("no handler for this repository has "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
259 "been found"))
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
260 else:
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
261 try:
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
262 handler = self._handlers[name].handler
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
263 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
264 raise exceptions.NotFound(_("No handler of this name found"))
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
265
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
266 data = await handler.export(repository)
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
267 if not data.strip():
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
268 raise exceptions.DataError(_('export data is empty, do you have any '
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
269 'change to send?'))
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
270
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
271 if not values.get('title') or not values.get('body'):
3875
a0666f17f300 plugin merge-requests: fix `await` use on blocking method
Goffi <goffi@goffi.org>
parents: 3586
diff changeset
272 patches = handler.parse(data, values.get(FIELD_DATA_TYPE))
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
273 commits_msg = patches[-1][self.META_COMMIT_MSG]
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
274 msg_lines = commits_msg.splitlines()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
275 if not values.get('title'):
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
276 values['title'] = msg_lines[0]
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
277 if not values.get('body'):
2785
f18d8315929e merge_requests: use XHTML for body
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
278 ts = self.host.plugins['TEXT_SYNTAXES']
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
279 xhtml = await ts.convert(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
280 '\n'.join(msg_lines[1:]),
2785
f18d8315929e merge_requests: use XHTML for body
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
281 syntax_from = ts.SYNTAX_TEXT,
f18d8315929e merge_requests: use XHTML for body
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
282 syntax_to = ts.SYNTAX_XHTML,
f18d8315929e merge_requests: use XHTML for body
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
283 profile = client.profile)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
284 values['body'] = '<div xmlns="{ns}">{xhtml}</div>'.format(
2785
f18d8315929e merge_requests: use XHTML for body
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
285 ns=C.NS_XHTML, xhtml=xhtml)
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
286
2604
700327fa9281 plugin merge-requests: allow to set empty repository when "update" is set in extra parameters:
Goffi <goffi@goffi.org>
parents: 2603
diff changeset
287 values[FIELD_DATA] = data
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
288
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
289 item_id = await self._t.set(client, service, node, values, schema, item_id, extra,
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
290 deserialise, form_ns=APP_NS_MERGE_REQUESTS)
3309
71761e9fb984 plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
291 return item_id
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
292
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
293 def _parse_data(self, data_type, data):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
294 d = self.parse_data(data_type, data)
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
295 d.addCallback(lambda parsed_patches:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
296 {key: str(value) for key, value in parsed_patches.items()})
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
297 return d
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
298
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
299 def parse_data(self, data_type, data):
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
300 """Parse a merge request data according to type
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
301
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
302 @param data_type(unicode): type of the data to parse
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
303 @param data(unicode): data to parse
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
304 @return(list[dict[unicode, unicode]]): parsed data
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
305 key of dictionary are self.META_* or keys specifics to handler
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
306 @raise NotFound: no handler can parse this data_type
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
307 """
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
308 try:
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
309 handler = self._type_handlers[data_type]
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
310 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
311 raise exceptions.NotFound(_('No handler can handle data type "{type}"')
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
312 .format(type=data_type))
2448
637ac234424f plugin merge requests: first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
313 return defer.maybeDeferred(handler.handler.parse, data, data_type)
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
314
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
315 def _import(self, repository, item_id, service=None, node=None, extra=None,
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
316 profile_key=C.PROF_KEY_NONE):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
317 client = self.host.get_client(profile_key)
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
318 service = jid.JID(service) if service else None
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
319 d = self.import_request(client, repository, item_id, service, node or None,
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
320 extra=extra or None)
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
321 return d
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
322
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
323 @defer.inlineCallbacks
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
324 def import_request(self, client, repository, item, service=None, node=None,
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
325 extra=None):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
326 """import a merge request in specified directory
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
327
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
328 @param repository(unicode): path to the repository where the code stands
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
329 """
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
330 if not node:
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
331 node = self.namespace
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
332 tickets_xmlui, metadata = yield defer.ensureDeferred(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3875
diff changeset
333 self._s.get_data_form_items(
3452
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
334 client,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
335 service,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
336 node,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
337 max_items=1,
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
338 item_ids=[item],
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
339 form_ns=APP_NS_MERGE_REQUESTS)
bb0225aaf4e6 plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents: 3309
diff changeset
340 )
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
341 ticket_xmlui = tickets_xmlui[0]
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
342 data = ticket_xmlui.named_widgets[FIELD_DATA].value
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
343 data_type = ticket_xmlui.named_widgets[FIELD_DATA_TYPE].value
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
344 try:
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
345 handler = self._type_handlers[data_type]
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
346 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
347 raise exceptions.NotFound(_('No handler found to import {data_type}')
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
348 .format(data_type=data_type))
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2959
diff changeset
349 log.info(_("Importing patch [{item_id}] using {name} handler").format(
2544
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
350 item_id = item,
a64887289931 plugin merge-requests, mercurial merge-requests: merge request import implementation
Goffi <goffi@goffi.org>
parents: 2541
diff changeset
351 name = handler.name))
2622
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
352 yield handler.handler.import_(repository, data, data_type, item, service, node,
8fb99ed47db4 core: lines limit
Goffi <goffi@goffi.org>
parents: 2604
diff changeset
353 extra)