Taiga module

master
root 1 year ago
parent 8c43246100
commit 9452e3d622

@ -0,0 +1,19 @@
__app__ = 'calculate-taiga'
__version__ = '3.4.1'
import sys
from calculate.lib.datavars import DataVars
from calculate.lib.cl_lang import setLocalTranslate
setLocalTranslate('cl_update3', sys.modules[__name__])
class DataVarsTaiga(DataVars):
"""Variable class for installation"""
def importInstall(self, **args):
"""Import install variables"""
self.importVariables()
self.importVariables('calculate.taiga.variables')
self.defaultModule = "taiga"

@ -0,0 +1,76 @@
import requests
import json
from calculate.core.server.func import MethodsInterface
from .datavars import DataVarsTaiga
class TaigaConnectionError(Exception):
"Failed to connect to taiga"
class Taiga(MethodsInterface):
def test(self):
return True
def check_connection(self, server_url):
#try:
resp = requests.get(server_url)
if resp.status_code in range(200, 300):
self.printSUCCESS("Connected to taiga")
return True
#except:
#raise TaigaConnectionError('Connection failed')
def create_user(self, server_url):
var = self.clVars.Get
resp = requests.post(f"{server_url}/service_taiga/create_user", json={"login": var('cl_taiga_user_login'),
"template": var('cl_taiga_user_template'),
"add_roles": var('cl_taiga_add_roles')})
if resp.status_code in range(200, 300):
self.printSUCCESS("Connected to taiga")
return True
raise TaigaConnectionError(json.loads(resp.text)['status'])
def delete_user(self, server_url):
users = self.clVars.Get('cl_taiga_all_users')
resp = requests.post(f"{server_url}/service_taiga/delete_user", json={'users': users})
return True
def create_template(self, server_url):
var = self.clVars.Get
name = var('cl_taiga_template_name')
roles = var('cl_taiga_role_list')
resp = requests.post(f"{server_url}/service_taiga/create_template", json={'name': name,
"roles": roles})
return True
def show_template_table(self, server_url):
var = self.clVars.Get
templates = var('cl_taiga_all_templates')
templates = [(x, ', '.join(y)) for x, y in templates]
#a = var('cl_taiga_templates_roles')
self.printTable('test', ['template name', 'template roles'], templates,
fields=['cl_taiga_templates_names', ''],
onClick="detailed_role_table",
addAction='create_template')
return True
def delete_template(self, server_url):
var = self.clVars.Get
template_name = var('cl_taiga_templates_names')
resp = requests.post(f"{server_url}/service_taiga/delete_template", json={"template": template_name})
return True
def update_data(self, server_url):
upd_projects = requests.get(f"{server_url}/service_taiga/update_projects")
upd_roles = requests.get(f"{server_url}/service_taiga/update_roles")
upd_users = requests.get(f"{server_url}/service_taiga/update_users")
return True
def change_template(self, server_url):
var = self.clVars.Get
template_name = var('cl_taiga_templates_names')
template_roles = var('cl_taiga_templates_roles')
resp = requests.post(f"{server_url}/service_taiga/change_template",
json={"template": template_name, "roles": template_roles})
return True

@ -0,0 +1,149 @@
import sys
from calculate.core.server.func import Action, Tasks, AllTasks
from calculate.lib.cl_lang import setLocalTranslate, getLazyLocalTranslate
from ..taiga import TaigaConnectionError
_ = lambda x: x
setLocalTranslate('cl_update3', sys.modules[__name__])
__ = getLazyLocalTranslate(_)
class ClTaigaCreateUser(Action):
"""
Действие обновление конфигурационных файлов
"""
# ошибки, которые отображаются без подробностей
native_error = (TaigaConnectionError)
successMessage = "Created"
failedMessage = "Not created"
interruptMessage = __("Update manually interrupted")
tasks = [
# {'name': 'connection',
# 'method': 'Taiga.check_connection(cl_taiga_server_url)',
# 'message': 'Checking connection'},
{'name': 'sending_request',
'method': 'Taiga.create_user(cl_taiga_server_url)',
'message': 'Creating user-add task'}
]
class ClTaigaDeleteUser(Action):
"""
Действие обновление конфигурационных файлов
"""
# ошибки, которые отображаются без подробностей
native_error = (TaigaConnectionError)
successMessage = None
failedMessage = None
interruptMessage = __("Update manually interrupted")
tasks = [
{'name': 'connection',
'method': 'Taiga.check_connection(cl_taiga_server_url)',
'message': 'Checking connection'},
{'name': 'sending_request',
'method': 'Taiga.delete_user(cl_taiga_server_url)',
'message': 'Creating user-del task'}
]
class ClTaigaUpdateData(Action):
"""
Действие обновление конфигурационных файлов
"""
# ошибки, которые отображаются без подробностей
native_error = (TaigaConnectionError)
successMessage = None
failedMessage = None
interruptMessage = __("Update manually interrupted")
tasks = [
{'name': 'connection',
'method': 'Taiga.check_connection(cl_taiga_server_url)',
'message': 'Checking connection'},
{'name': 'sending_request',
'method': 'Taiga.update_data(cl_taiga_server_url)',
'message': 'Creating update task'}
]
class ClTaigaCreateTemplate(Action):
"""
Действие обновление конфигурационных файлов
"""
# ошибки, которые отображаются без подробностей
native_error = (TaigaConnectionError)
successMessage = None
failedMessage = None
interruptMessage = __("Update manually interrupted")
tasks = [
{'name': 'connection',
'method': 'Taiga.check_connection(cl_taiga_server_url)',
'message': 'Checking connection'},
{'name': 'sending_request',
'method': 'Taiga.create_template(cl_taiga_server_url)',
'message': 'Creating update task'}
]
class ClTaigaTestTable(Action):
"""
Действие обновление конфигурационных файлов
"""
# ошибки, которые отображаются без подробностей
native_error = (TaigaConnectionError)
successMessage = "Created"
failedMessage = "Not created"
interruptMessage = __("Update manually interrupted")
tasks = [
{'name': 'view_table',
'method': 'Taiga.show_template_table(cl_taiga_server_url)'}
]
class ClTaigaDeleteFromTable(Action):
"""
Действие обновление конфигурационных файлов
"""
# ошибки, которые отображаются без подробностей
native_error = (TaigaConnectionError)
successMessage = "Created"
failedMessage = "Not created"
interruptMessage = __("Update manually interrupted")
tasks = [
{'name': 'connection',
'method': 'Taiga.check_connection(cl_taiga_server_url)',
'message': 'Checking connection'},
{'name': 'sending_request',
'method': 'Taiga.delete_template(cl_taiga_server_url)',
'message': 'Creating delete task'}
]
class ClTaigaChangeTable(Action):
"""
Действие обновление конфигурационных файлов
"""
# ошибки, которые отображаются без подробностей
native_error = (TaigaConnectionError)
successMessage = "Created"
failedMessage = "Not created"
interruptMessage = __("Update manually interrupted")
tasks = [
{'name': 'connection',
'method': 'Taiga.check_connection(cl_taiga_server_url)',
'message': 'Checking connection'},
{'name': 'sending_request',
'method': 'Taiga.change_template(cl_taiga_server_url)',
'message': 'Creating delete task'}
]

@ -0,0 +1,2 @@
from . import taiga
section = "taiga"

@ -0,0 +1,187 @@
from calculate.lib.datavars import Variable, VariableError
import requests
import json
class VariableClTaigaServerUrl(Variable):
type = 'choiceedit'
metavalue = 'URL'
value = 'http://0.0.0.0:41324'
def init(self):
self.label = 'Server url'
self.help = 'which url connect to'
def get(self):
return self.value
class VariableClTaigaUserLogin(Variable):
type = 'choiceedit'
metavalue = 'LOGIN'
opt = ['-l']
untrusted = True
def init(self):
self.label = "User login"
self.help = "user login"
class VariableClTaigaAllUsers(Variable):
type = 'choiceedit-list'
metavalue = 'ROLE'
opt = ['-q']
untrusted = True
def init(self):
self.label = "Userqwe role"
self.help = "userqwe role on project"
def check(self, value):
if not value:
raise ValueError('Can not be empty')
def choice(self):
resp = requests.get(f"{self.Get('cl_taiga_server_url')}/service_taiga/users")
return [str(x['login']) for x in resp.json()['data']]
class VariableClTaigaProjectName(Variable):
type = 'string'
metavalue = 'NAME'
opt = ['-n']
def init(self):
self.label = 'Project name'
self.help = 'Name for a new project'
def check(self, value):
resp = requests.get(f"{self.Get('cl_taiga_server_url')}/service_taiga/projects")
if value in [str(x['name']) for x in resp.json()['data']]:
raise VariableError("Проект с таким именем уже существует")
class VariableClTaigaRoleRel(Variable):
type = 'choiceedit-list'
metavalue = 'ROLE'
def init(self):
self.label = "User role"
self.help = "Roles user should be added to"
def choice(self):
resp = requests.get(f"{self.Get('cl_taiga_server_url')}/service_taiga/roles")
result = []
a = resp.json()['data']
for key, value in resp.json()['data'].items():
for role in value:
if role['name'] != "AUTO":
result.append(f"{key} - {role['name']}")
return result
class VariableClTaigaRoleList(Variable):
type = 'choiceedit-list'
metavalue = 'ROLE'
roles = 'cl_taiga_role_rel'
def init(self):
self.label = "User roles"
self.help = "Roles user should be added to"
def choice(self):
return self.Choice(self.roles)
class VariableClTaigaTemplateName(Variable):
type = 'string'
metavalue = 'NAME'
untrusted = True
def init(self):
self.label = "Template name"
self.help = "Template name"
def check(self, value):
if not value:
raise VariableError("Can not be empty")
class VariableClTaigaAllTemplates(Variable):
type = 'list'
def get(self):
resp = requests.get(f"{self.Get('cl_taiga_server_url')}/service_taiga/templates")
return resp.json()["data"]
class VariableClTaigaTemplatesNames(Variable):
type = 'string'
def init(self):
self.label = "Template name"
self.help = "Template name"
def get(self):
res = self.Get('cl_taiga_all_templates')
return [x for x in res]
class VariableClTaigaTemplatesRoles(Variable):
type = 'choice-list'
def init(self):
self.label = "Template role"
self.help = "Template role"
def get(self):
name = self.Get('cl_taiga_templates_names')
res = self.Get('cl_taiga_all_templates')
return [x[1] for x in res if x[0] == name][0]
def choice(self):
return self.Choice('cl_taiga_role_rel')
def check(self, value):
if not value:
raise VariableError("Can not be empty")
class VariableClTaigaUserTemplate(Variable):
type = 'choice'
metavalue = 'TEMPLATE'
opt = ['-t']
template = 'cl_taiga_all_templates'
def init(self):
self.label = "User template"
self.help = "template to apply on user"
def choice(self):
return [x[0] for x in self.Get(self.template)]
class VariableClTaigaAddRoles(Variable):
type = 'choice-list'
metavalue = 'ROLE'
untrusted = True
opt = ['-r']
def init(self):
self.label = "User role"
self.help = "Roles user should be added to"
def get(self):
return [self.value]
def check(self, value):
return True
def choice(self):
resp = requests.get(f"{self.Get('cl_taiga_server_url')}/service_taiga/roles")
result = []
a = resp.json()['data']
for key, value in resp.json()['data'].items():
for role in value:
if role['name'] != "AUTO":
result.append(f"{key} - {role['name']}")
return result

@ -0,0 +1 @@
['1', '2', '3', '21', '32', '34', '35', '37', '38', '39', '40', '167', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '168', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100', '101', '102', '109', '110', '111', '112', '113', '114', '115', '116', '117', '118', '119', '120', '121', '122', '123', '124', '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '140', '142', '143', '144', '145', '146', '169', '148', '149', '150', '151', '152', '153', '154', '155', '156', '157', '158', '159', '160', '161', '162', '4', '5', '6', '7', '8', '9', '10', '163', '12', '13', '14', '141', '15', '16', '17', '18', '19', '20', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '33', '36', '103', '104', '105', '106', '107', '108']

@ -0,0 +1,285 @@
# -*- coding: utf-8 -*-
# Copyright 2010-2016 Mir Calculate. http://www.calculate-linux.org
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
from calculate.lib.cl_lang import setLocalTranslate, getLazyLocalTranslate
from calculate.core.server.func import WsdlBase
from .taiga import Taiga
from .utils.cl_taiga import ClTaigaCreateUser, ClTaigaDeleteUser, ClTaigaUpdateData, ClTaigaCreateTemplate, ClTaigaTestTable, ClTaigaDeleteFromTable, ClTaigaChangeTable
_ = lambda x: x
setLocalTranslate('cl_update3', sys.modules[__name__])
__ = getLazyLocalTranslate(_)
class Wsdl(WsdlBase):
methods = [
{
# идентификатор метода
'method_name': "create_user",
# категория метода
'category': __('Taiga'),
# заголовок метода
'title': __("Create taiga user"),
# иконка для графической консоли
'image': 'calculate-update',
# метод присутствует в графической консоли
'gui': True,
# консольная команда
'command': 'cl-taiga-create-user',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {'Taiga': Taiga},
# описание действия
'action': ClTaigaCreateUser,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': [
lambda group: group(_("Create user"),
normal=('cl_taiga_user_login',
'cl_taiga_user_template',
'cl_taiga_add_roles'),
next_label=_("Save"))]
},
{
# идентификатор метода
'method_name': "delete_users",
# категория метода
'category': __('Taiga'),
# заголовок метода
'title': __("Delete taiga user"),
# иконка для графической консоли
'image': 'calculate-update',
# метод присутствует в графической консоли
'gui': True,
# консольная команда
'command': 'cl-taiga-delete-user',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {'Taiga': Taiga},
# описание действия
'action': ClTaigaDeleteUser,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': [
lambda group: group(_("Show user"),
normal=('cl_taiga_all_users',),
next_label=_("Save"))]
},
{
# идентификатор метода
'method_name': "update_data",
# категория метода
'category': __('Taiga'),
# заголовок метода
'title': __("Update taiga data"),
# иконка для графической консоли
'image': 'calculate-update',
# метод присутствует в графической консоли
'gui': True,
# консольная команда
'command': 'cl-taiga-update',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {'Taiga': Taiga},
# описание действия
'action': ClTaigaUpdateData,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': []
},
{
# идентификатор метода
'method_name': "create_template",
# категория метода
#'category': __('Taiga'),
# заголовок метода
'title': __("Create taiga template"),
# иконка для графической консоли
'image': 'calculate-update',
# метод присутствует в графической консоли
'gui': True,
# консольная команда
'command': 'cl-taiga-create-template',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {'Taiga': Taiga},
# описание действия
'action': ClTaigaCreateTemplate,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': [
lambda group: group(_("Show user"),
normal=('cl_taiga_template_name',
'cl_taiga_role_list',),
next_label=_("Save"))]
},
{
# идентификатор метода
'method_name': "role_table",
# категория метода
'category': __('Taiga'),
# заголовок метода
'title': __("show taiga table"),
# иконка для графической консоли
'image': 'calculate-update',
# метод присутствует в графической консоли
'gui': True,
# консольная команда
'command': 'cl-taiga-test-table',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {'Taiga': Taiga},
# описание действия
'action': ClTaigaTestTable,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': []
},
{
# идентификатор метода
'method_name': "detailed_role_table",
# категория метода
#'category': __('Taiga'),
# заголовок метода
'title': __("detailed taiga table"),
# иконка для графической консоли
'image': None,
# метод присутствует в графической консоли
'gui': True,
# консольная команда
#'command': 'cl-taiga-test-table',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {},
# описание действия
'action': None,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': [
lambda group: group(_("Table details"),
normal=(
'cl_taiga_templates_names',
'cl_taiga_templates_roles'),
custom_buttons=[('but0', _("Back"),
"role_table",
"button"),
('but1', _("Delete"),
"delete_template_table",
"button"),
('but2', _("Change"),
"change_template_table",
"button")
])
]
},
{
# идентификатор метода
'method_name': "delete_template_table",
# категория метода
#'category': __('Taiga'),
# заголовок метода
'title': __("delete taiga table"),
# иконка для графической консоли
'image': None,
# метод присутствует в графической консоли
'gui': True,
# консольная команда
# 'command': 'cl-taiga-test-table',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {'Taiga': Taiga},
# описание действия
'action': ClTaigaDeleteFromTable,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': [
lambda group: group(_("Table details"),
normal=(
'cl_taiga_templates_names',
'cl_taiga_templates_roles'))
]
},
{
# идентификатор метода
'method_name': "change_template_table",
# категория метода
# 'category': __('Taiga'),
# заголовок метода
'title': __("change taiga table"),
# иконка для графической консоли
'image': None,
# метод присутствует в графической консоли
'gui': True,
# консольная команда
# 'command': 'cl-taiga-test-table',
# права для запуска метода
'rights': ['taiga'],
# объект содержащий модули для действия
'logic': {'Taiga': Taiga},
# описание действия
'action': ClTaigaChangeTable,
# объект переменных
'datavars': "taiga",
'native_error': (),
# значения по умолчанию для переменных этого метода
'setvars': {},
# описание груп (список лямбда функций)
'groups': [
lambda group: group(_("Table details"),
normal=(
'cl_taiga_templates_names',
'cl_taiga_templates_roles'))
]
},
]
Loading…
Cancel
Save