Merge branch 'master' of git.calculate.ru:calculate-3/calculate-api

Conflicts:
	api/server/api_types.py
	ru/calculate_api.po
master3.3
commit 2b67efc114

@ -92,6 +92,7 @@ class Table(DataVarsSerializer):
body = Array(Array(String))
values = Array(ChoiceValue)
onClick = String
addAction = String
def __init__(self,dv=None,varObj=None,head=None,body=None,values=None):
super(Table,self).__init__()
@ -188,6 +189,7 @@ class Field(DataVarsSerializer):
class GroupField(DataVarsSerializer):
name = String
fields = Array(Field)
prevlabel = String
nextlabel = String
prevlabel = String
last = Boolean

@ -526,7 +526,7 @@ def view_cert_info(cert, cert_id, rights, group_rights):
t = fd.read()
fd.close()
for line in t.splitlines():
words = line.split()
words = line.split(' ',1)
# first word in line equal name input method
if words[0] in groups_list:
methods = words[1].split(',')

@ -117,7 +117,7 @@ class ApiWsdl:
with open(group_rights) as fd:
t = fd.read()
for line in t.splitlines():
words = line.split()
words = line.split(' ',1)
# first word in line equal name input method
if words[0] in groups_list:
methods = words[1].split(',')

@ -0,0 +1,606 @@
#-*- coding: utf-8 -*-
# Copyright 2010-2012 Calculate Ltd. 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, os
import subprocess
from soaplib.serializers.primitive import String, Integer, Boolean
from soaplib.serializers.clazz import Array, ClassSerializer
from soaplib.service import rpc
from calculate.api.server.api_types import ReturnedMessage, getViewForVariables
from calculate.api.server.api_types import Field, GroupField, ViewInfo
from calculate.lib.datavars import VariableError
from calculate.lib.utils.files import readLinesFile
from calculate.api import datavars
import traceback
class GroupInfo(ClassSerializer):
"""Parameters for method install"""
cl_page_count = String
cl_page_offset = String
class DetailGroupInfo(ClassSerializer):
"""Parameters for method install"""
cl_group_name = String
cl_group_rights = Array(String)
class AddGroupInfo(ClassSerializer):
"""Parameters for method install"""
cl_group_add = String
cl_group_rights = Array(String)
def catchExcept():
class wrapper:
def __init__(self,f):
self.f = f
self.func_name = f.func_name
self.func_code = f.func_code
self.__doc__ = f.__doc__
self.__name__ = f.__name__
def __call__(self,selfobj,*args,**kwargs):
try:
return self.f(selfobj,*args,**kwargs)
except BaseException as e:
view = ViewInfo(groups=[])
group = GroupField(name=_("Error"),last=True)
group.fields = []
group.fields.append(Field(
name = "error",
label = str(e),
default = 'color:red;',
element = "error"))
view.groups.append(group)
print "!!!!EXCEPTION!!!!"
for i in apply(traceback.format_exception, sys.exc_info()):
print i
return view
return wrapper
class ApiWsdl:
#def create_req_table(self, )
def show_groups_meth (self, dv) :
try:
page_count = int(dv.Get('cl_page_count'))
page_offset = int(dv.Get('cl_page_offset'))
#self.printSUCCESS('Current offset = %d' %page_offset)
if not page_offset:
page_offset = 0
list_group_name = dv.Choice('cl_group_name')
if not len(list_group_name):
self.printSUCCESS('No groups')
return True
dict_group_name = {}
list_group_name.sort()
for i in range(len(list_group_name)):
dict_group_name[i] = list_group_name[i]
max_id = len(list_group_name)
if not page_count:
page_count = len(list_group_name)
head = ['Group','Rights']
body = []
fields = ['cl_group_name','']
num_id = len(list_group_name)
if page_offset > num_id - 1:
i = num_id - 1
else:
i = page_offset
while True:
if len(body) == page_count or i >= max_id:
break
#if not i in list_req_id:
#i+=1
#continue
dv.Set('cl_group_name', dict_group_name[i])
group_rights = ', '.join(dv.Get('cl_group_rights'))
body.append([dict_group_name[i],group_rights])
i+=1
if body:
self.printTable("Groups Table", head, body, fields = fields, \
onClick = 'detail_group', addAction = 'add_group')
self.printSUCCESS('Current offset = %d' %page_offset)
except Exception,e:
for i in apply(traceback.format_exception, sys.exc_info()):
print i
print 'EXCEPT!!!!!!!!!!', e
return True
def check_req_params (self, dv, info,allvars=False,ordered=None):
errors = []
keys = sorted(filter(lambda x:x.lower() == x,
info._type_info.keys()))
if ordered:
keys = ordered + filter(lambda x:not x in ordered,
keys)
for var in keys:
# get value of variable from info
val = info.__getattribute__(var)
# check value if value send of check allvariables
if val != None or allvars:
try:
# if value not send, then get from datavars
if val == None:
val = dv.Get(var)
else:
uncomperr = dv.Uncompatible(var)
if uncomperr:
raise VariableError(uncomperr)
if not dv.Uncompatible(var):
dv.Set(var, val)
except VariableError, e:
mess = ''
messages = e.message if type(e.message) == list else [e.message]
for error in messages:
mess += str(error) + '\n'
errors.append(ReturnedMessage(type = 'error', field = var,
message = mess))
return errors
from calculate.api.server.baseClass import Basic
from calculate.api.server.decorators import Dec
def groupCommon(self,sid,info,methodname):
"""
Install common method
"""
try:
dv = self.get_cache(sid,methodname,"vars")
if not dv:
#reload(cl_install)
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
errors = self.check_req_params(dv, info,
ordered=['cl_page_count',
'cl_page_offset'],
allvars=True)
if errors:
return errors
request_meth = type("requestCommon",(self.Common,
ApiWsdl, object), {})
pid = self.startprocess(sid, target=request_meth,
method="show_groups_meth",
auto_delete = True,
args_proc = (dv,))
returnmess = ReturnedMessage(type = 'pid', message = pid, expert = True)
returnmess.type = "pid"
returnmess.message = pid
dv = self.clear_cache(sid,methodname)
return [returnmess]
finally:
if dv:
self.set_cache(sid,methodname,"vars",dv,smart=False)
return []
@rpc(Integer, GroupInfo, _returns = Array(ReturnedMessage))
@Dec.check_permissions(["edit-group"])
@Dec.console('cl-show-groups')
@Dec.gui('Api',_('View Groups'),'user-group-properties,' \
'view-certificate-import,application-certificate')
def show_groups ( self, sid, info):
if not info:
mess = 'Field must be int!'
errors = []
for field in ['cl_page_count', 'cl_page_offset']:
errors.append(ReturnedMessage(type = 'error', field = field,
message = mess, expert = True))
return errors
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Set('cl_page_count', info.cl_page_count)
dv.Set('cl_page_offset', info.cl_page_offset)
self.set_cache(sid, 'show_groups', "vars", dv, smart=False)
return self.groupCommon(sid,info,'show_groups')
@rpc(Integer, Integer, Boolean,_returns = ViewInfo)
@catchExcept()
def show_groups_view (self, sid, step,expert):
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.addGroup(_("Groups"),
normal=('cl_page_count','cl_page_offset'),
next_label=_("Next"))
view = getViewForVariables (dv,step,expert)
self.set_cache(sid, 'show_groups', "vars", dv, smart=False)
return view
##################### BEGIN DETAIL GROUP METHOD ##############################
@rpc(Integer, DetailGroupInfo, _returns = Array(ReturnedMessage))
@Dec.check_permissions(["edit-group"])
@Dec.console('cl-show-group')
#@Dec.gui(_('Api'),_('Detail Request'),'view-certificate-import')
def detail_group ( self, sid, info):
if not info:
mess = 'Field must be in list!'
errors = []
errors.append(ReturnedMessage(type = 'error', field = 'cl_group_name',
message = mess))
return errors
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Set('cl_group_name', info.cl_group_name)
self.set_cache(sid, 'detail_request', 'dv', dv, smart = False)
return []
@rpc(Integer, Integer, Boolean, _returns = ViewInfo)
@catchExcept()
def detail_group_view (self, sid, step, expert):
dv = self.get_cache(sid, 'detail_request', 'dv')
if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Get('cl_group_name')
dv.addGroup(_("Group detail"),
normal=('cl_group_name', 'cl_group_rights',
'cl_page_count','cl_page_offset'))
view = getViewForVariables (dv,step,expert)
group = GroupField(name='',last=True)
group.fields = []
group.fields.append(Field(
name = "but0",
label = _("Back"),
value = "show_groups",
element = "button"))
group.fields.append(Field(
name = "but1",
label = _("Change"),
value = "change_group",
element = "button"))
group.fields.append(Field(
name = "but2",
label = _("Delete"),
value = "delete_group",
element = "button"))
view.groups.append(group)
self.set_cache(sid, 'show_groups', "vars", dv, smart=False)
return view
############## END DETAIL GROUP METHOD #######################################
############### BEGIN CONFIRM GROUP METHODS ###################################
def changeGroupCommon(self,sid,info,methodname):
try:
dv = self.get_cache(sid,methodname,"vars")
errors = self.check_req_params(dv, info,
ordered=['cl_group_name','cl_group_rights'],
allvars=True)
if errors:
return errors
request_meth = type("delRequestCommon",(self.Common,
ApiWsdl, object), {})
pid = self.startprocess(sid, target=request_meth,
method="change_group_meth",\
args_proc = (dv,))
returnmess = ReturnedMessage(type = 'pid', message = pid)
returnmess.type = "pid"
returnmess.message = pid
dv = self.clear_cache(sid,methodname)
return [returnmess]
finally:
if dv:
self.set_cache(sid,methodname,"vars",dv,smart=False)
return []
def change_group_meth(self, dv):
try:
group_rights_file = dv.Get('cl_api_group_rights')
cl_group_name = str(dv.Get('cl_group_name'))
cl_group_rights = dv.Get('cl_group_rights')
#self.startTask('Confirm Request')
changed_flag = False
result = []
for line in readLinesFile(group_rights_file):
if line.startswith('#') or not line:
result.append(line)
continue
words = line.split(' ',1)
# first word in line equal name input method
if words[0] == cl_group_name:
line = cl_group_name + ' ' + ','.join(cl_group_rights)
changed_flag = True
result.append(line)
if cl_group_name == 'all' and not changed_flag:
result.append(cl_group_name + ' ' + ','.join(cl_group_rights))
changed_flag = True
fd = open (group_rights_file, 'w')
for lines in result:
fd.write(lines + '\n')
fd.close()
if changed_flag:
self.printSUCCESS ('<b>'+_('Group Changed')+'</b>')
else:
self.printSUCCESS ('<b>'+ _('Not Changed Group')+'</b>')
self.printSUCCESS ("cl_group_name = %s" %cl_group_name)
self.printSUCCESS ("cl_group_rights = %s" %','.join(cl_group_rights))
return True
except (KeyboardInterrupt,):
self.printERROR('Process is interrupted!')
return False
@rpc(Integer, DetailGroupInfo, _returns = Array(ReturnedMessage))
@Dec.check_permissions(["edit-group"])
#@Dec.console('cl-show-request')
#@Dec.gui(_('Api'),_('Confirm Request'),'view-certificate-import')
@catchExcept()
def change_group ( self, sid, info):
dv = self.get_cache(sid,'change_group',"vars")
if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Set('cl_group_name', info.cl_group_name)
dv.Set('cl_group_rights', info.cl_group_rights)
self.set_cache(sid, 'change_group', "vars", dv, smart=False)
return self.changeGroupCommon(sid,info,'change_group')
@rpc(Integer, Integer, Boolean, _returns = ViewInfo)
@catchExcept()
def change_group_view (self, sid, step, expert):
dv = self.get_cache(sid, 'change_group', 'dv')
if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Get('cl_group_name')
dv.addGroup(_("Change group"),
normal=('cl_group_name', 'cl_group_rights'),
next_label=_("Done"))
view = getViewForVariables (dv,step,expert)
group = GroupField(name=_("Change group"),nextlabel=_("Done"),last=True)
group.fields = []
group.fields.append(Field(
name = "but2",
label = "Confirm",
value = "change_group",
element = "button"))
view.groups.append(group)
self.set_cache(sid, 'change_group', "vars", dv, smart=False)
return view
############### END CONFIRM GROUP METHODS ###################################
############### BEGIN DELETE GROUP METHODS ##################################
def delGroupCommon(self,sid,info,methodname):
"""
Install common method
"""
try:
dv = self.get_cache(sid,methodname,"vars")
errors = self.check_req_params(dv, info,
ordered=['cl_group_name'],
allvars=True)
if errors:
return errors
request_meth = type("delGroupCommon",(self.Common,
ApiWsdl, object), {})
pid = self.startprocess(sid, target=request_meth,
method="del_group_meth",\
args_proc = (dv,))
returnmess = ReturnedMessage(type = 'pid', message = pid)
returnmess.type = "pid"
returnmess.message = pid
dv = self.clear_cache(sid,methodname)
return [returnmess]
finally:
if dv:
self.set_cache(sid,methodname,"vars",dv,smart=False)
return []
def del_group_meth(self, dv):
try:
group_rights_file = dv.Get('cl_api_group_rights')
cl_group_name = str(dv.Get('cl_group_name'))
result = []
deleted_flag = False
for line in readLinesFile(group_rights_file):
if line.startswith('#') or not line:
result.append(line)
continue
words = line.split(' ',1)
# first word in line equal name input method
if words[0] != cl_group_name:
result.append(line)
else:
deleted_flag = True
fd = open (group_rights_file, 'w')
for lines in result:
fd.write(lines + '\n')
fd.close()
if deleted_flag:
self.printSUCCESS ('<b>'+_('Group %s deleted') %cl_group_name \
+ '!</b>')
else:
self.printSUCCESS ('<b>'+_('Group %s is not deleted') \
%cl_group_name + '!</b>')
return True
except KeyboardInterrupt:
self.endTask()
return False
except Exception, e:
msg = e.message
if not msg:
msg = e.reason
self.printERROR (_("Exception!%s") %msg)
return False
@rpc(Integer, DetailGroupInfo, _returns = Array(ReturnedMessage))
@Dec.check_permissions(["edit-group"])
#@Dec.console('cl-show-request')
#@Dec.gui(_('Api'),_('Delete Request'),'view-certificate-import')
@catchExcept()
def delete_group ( self, sid, info):
#dv = self.get_cache(sid,'delete_request',"vars")
#if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Set('cl_group_name', info.cl_group_name)
self.set_cache(sid, 'delete_group', "vars", dv, smart=False)
return self.delGroupCommon(sid,info,'delete_group')
@rpc(Integer, Integer, Boolean, _returns = ViewInfo)
@catchExcept()
def delete_group_view (self, sid, step, expert):
dv = self.get_cache(sid, 'delete_group', 'dv')
if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Get('cl_group_name')
dv.addGroup(_("Group delete"),
normal=('cl_group_name', 'cl_group_rights'),
next_label=_("Delete"))
view = getViewForVariables (dv,step,expert)
self.set_cache(sid, 'delete_group', "vars", dv, smart=False)
return view
############### END DELETE GROUP METHODS ####################################
############### BEGIN ADD GROUP METHODS #####################################
def addGroupCommon(self,sid,info,methodname):
"""
Install common method
"""
try:
dv = self.get_cache(sid,methodname,"vars")
errors = self.check_req_params(dv, info,
ordered=['cl_group_add', cl_group_rights],
allvars=True)
if errors:
return errors
request_meth = type("delGroupCommon",(self.Common,
ApiWsdl, object), {})
pid = self.startprocess(sid, target=request_meth,
method="add_group_meth",\
args_proc = (dv,))
returnmess = ReturnedMessage(type = 'pid', message = pid)
returnmess.type = "pid"
returnmess.message = pid
dv = self.clear_cache(sid,methodname)
return [returnmess]
finally:
if dv:
self.set_cache(sid,methodname,"vars",dv,smart=False)
return []
def add_group_meth(self, dv):
try:
group_rights_file = dv.Get('cl_api_group_rights')
cl_group_add = str(dv.Get('cl_group_add'))
self.printSUCCESS ("cl_group_add = %s" %cl_group_add)
self.printSUCCESS ("cl_group_rights = %s" %','.join(cl_group_rights))
return True
#result = []
#deleted_flag = False
#for line in readLinesFile(group_rights_file):
#if line.startswith('#') or not line:
#result.append(line)
#continue
#words = line.split(' ',1)
## first word in line equal name input method
#if words[0] != cl_group_name:
#result.append(line)
#else:
#deleted_flag = True
#fd = open (group_rights_file, 'w')
#for lines in result:
#fd.write(lines + '\n')
#fd.close()
#if deleted_flag:
#self.printSUCCESS ('<b>'+_('Group %s deleted') %cl_group_name \
#+ '!</b>')
#else:
#self.printSUCCESS ('<b>'+_('Group %s is not deleted') \
#%cl_group_name + '!</b>')
#return True
except KeyboardInterrupt:
self.endTask()
return False
except Exception, e:
msg = e.message
if not msg:
msg = e.reason
self.printERROR (_("Exception!%s") %msg)
return False
@rpc(Integer, AddGroupInfo, _returns = Array(ReturnedMessage))
@Dec.check_permissions(["edit-group"])
#@Dec.console('cl-show-request')
#@Dec.gui(_('Api'),_('Delete Request'),'view-certificate-import')
@catchExcept()
def add_group ( self, sid, info):
#dv = self.get_cache(sid,'delete_request',"vars")
#if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Set('cl_group_add', info.cl_group_add)
dv.Set('cl_group_rights', info.cl_group_rights)
self.set_cache(sid, 'add_group', "vars", dv, smart=False)
return self.delGroupCommon(sid,info,'add_group')
@rpc(Integer, Integer, Boolean, _returns = ViewInfo)
@catchExcept()
def add_group_view (self, sid, step, expert):
dv = self.get_cache(sid, 'add_group', 'dv')
if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Get('cl_group_name')
dv.addGroup(_("Group add"),
normal=('cl_group_add', 'cl_group_rights'),
next_label=_("Add"))
view = getViewForVariables (dv,step,expert)
self.set_cache(sid, 'add_group', "vars", dv, smart=False)
return view

@ -211,15 +211,16 @@ class ApiWsdl () :
#values = Array(ChoiceValue)
#message = api_types.Message
def printTable (self, head, body, table_name, fields = None,\
onClick = None):
def printTable (self, table_name, head, body, fields = None,\
onClick = None, addAction = None):
id = random.randint(1, self.Num)
while id in self.table_dict:
id = random.randint(1, self.Num)
from api_types import Table
table = Table(head = head, body = body, fields = fields, \
onClick = onClick, values = None)
onClick = onClick, addAction = addAction, \
values = None)
self.table_dict[id] = table
self.addMessage(type = 'table', message = table_name, id = id)
@ -421,7 +422,7 @@ class ApiWsdl () :
if not line:
continue
try:
words = line.split()
words = line.split(' ',1)
if len(words) < 2:
continue
# first word in line equal name input method

@ -41,7 +41,7 @@ class Table (ClassSerializer):
list_module = ["clean", "gen_pid", "check_rights", "cl_template", \
"sid_pid_file", "gen_sid", "func", "api_types", 'test', 'test2', \
'system_update', 'request', 'certificate']
'system_update', 'request', 'certificate', 'edit_groups']
imported_modules = []
pack = "calculate.api.server"

@ -87,7 +87,6 @@ class ApiWsdl:
list_req_id.sort()
max_id = list_req_id[len(list_req_id)-1]
self.printSUCCESS('Current offset = %d' %page_offset)
if not page_count:
page_count = len(list_req_id)
@ -117,12 +116,15 @@ class ApiWsdl:
location = dv.Get('cl_req_location')
#self.printSUCCESS ('page number = %d' %i)
group = dv.Get('cl_req_group')
if not group:
group = 'Not signed'
body.append([str(i),username,ip,mac,date,location,group])
i+=1
if body:
self.printTable(head, body, "Request Table", fields = fields, \
self.printTable("Request Table", head, body, fields = fields, \
onClick = 'detail_request')
self.printSUCCESS('Current offset = %d' %page_offset)
except Exception,e:
for i in apply(traceback.format_exception, sys.exc_info()):
print i
@ -287,9 +289,6 @@ class ApiWsdl:
view.groups.append(group)
self.set_cache(sid, 'view_request', "vars", dv, smart=False)
return view
############## END DETAIL REQUEST METHOD #######################################
############## BEGIN CONFIRM REQUEST METHODS ###################################
def confirmRequestCommon(self,sid,info,methodname):
@ -524,7 +523,6 @@ class ApiWsdl:
if os.path.exists(cert):
os.unlink (cert)
self.printSUCCESS (_("certificate deleted"))
self.printSUCCESS (_("successfully removed"))
except:
self.printERROR (_("delete file error!"))
self.endTask()
@ -545,11 +543,11 @@ class ApiWsdl:
#@Dec.gui(_('Api'),_('Delete Request'),'view-certificate-import')
@catchExcept()
def delete_request ( self, sid, info):
dv = self.get_cache(sid,'delete_request',"vars")
if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
#dv = self.get_cache(sid,'delete_request',"vars")
#if not dv:
dv = datavars.DataVarsApi()
dv.importApi()
dv.flIniFile()
dv.Set('cl_req_id', info.cl_req_id)
self.set_cache(sid, 'delete_request', "vars", dv, smart=False)
return self.delRequestCommon(sid,info,'delete_request')

@ -196,7 +196,7 @@ class ClApplication(Application):
with open(group_rights) as fd:
t = fd.read()
for line in t.splitlines():
words = line.split()
words = line.split(' ',1)
# first word in line equal name input method
if words[0] in groups_list:
methods = words[1].split(',')

@ -47,9 +47,9 @@ class SH (ClassSerializer):
isopath_file = String
comboLang = String
# for check parameters without call method
CheckOnly = Boolean
Default = Array(String)
class ApiWsdl:
def say_hello_meth (self, name, times, town) :
@ -105,14 +105,14 @@ class ApiWsdl:
body = [['One','11','12','13','14']]#,['Two','21','22','23','24'],\
#['Three','31','32','33','34'], ['Four','41','42','43','44']]
#self.printTable(head, body, "Table 1!")
#self.printTable("Table 1!", head, body)
head = [town,'AAA','BBB','CCC','DDD']
body = [['One','11','12','13','14'],['Two','21','22','23','24'],\
['Three','31','32','33','34'], ['Four','41','42','43','44'],\
['Three','31','32','33','34'], ['Four','41','42','43','44']]
self.printTable(head, body, "Table 2!")
self.printTable("Table 2!", head, body)
self.startTask("Second task!", True, num = 2)
perc = 0
while self.getProgress() < 50:
@ -169,17 +169,20 @@ class ApiWsdl:
@rpc(Integer, SH, _returns = Array(ReturnedMessage))
@Dec.check_permissions(["test"])
@Dec.console('cl-test')
@Dec.gui('Api.Тестовые.Подгруппа', 'Первый тест', \
@Dec.gui('Api.Test', 'First Test', \
'/usr/share/wallpapers/Horos/contents/screenshot.png,system-log-out')
def test ( self, sid, rrr):
#print '>>>>>>>', sid, rrr
name_meth = 'test'
print "Default = ", rrr.Default
self.set_cache(sid, name_meth, 'object', rrr)
if rrr.name == 'qqq':
errors = []
errors.append(ReturnedMessage(type = 'error', field = 'name', \
message = 'Do not input "qqq"vvv ddddddd dddddd!' + \
'input not @@@@@# $$$$$$$$ ^^^^^^^^^'))
'input not @@@@@# $$$$$$$$ ^^^^^^^^^ ' + \
'input not @@@@@# $$$$$$$$ ^^^^^^^^^ ' + \
'input not @@@@@# $$$$$$$$ 44444444'))
errors.append(ReturnedMessage(type = 'error', field = 'boolvariable', \
message = 'Choose this!'))
return errors
@ -240,7 +243,7 @@ class ApiWsdl:
name = "name",
label = _("YOUR NAME: "),
type = "str",
default = '',
value = '',
opt = Option(shortopt="-n",
longopt="--name",
metavalue="NAME"),
@ -252,7 +255,7 @@ class ApiWsdl:
label = _("TIMES: "),
#type = "int",
type = "int",
default = '55',
value = '55',
opt = Option(longopt="--times",
metavalue="TIMES"),
help = \
@ -262,8 +265,7 @@ class ApiWsdl:
group.fields.append(Field(
name = "isopath",
label = _("select ISO"),
default = '/var/calculate',
value = 'Python files (*.py, *.pyc)',
value = '/var/calculate',
type = 'files',
opt = Option(longopt="--times",
metavalue="TIMES"),
@ -273,7 +275,6 @@ class ApiWsdl:
group.fields.append(Field(
name = "isopath_file",
label = _("select ISO"),
default = '/var/calculate',
choice = ['one', 'two'],
comments = ['first', 'second'],
value = '/home/guest/1',
@ -319,6 +320,7 @@ class ApiWsdl:
element = "table",
type = 'steps',
# Table
listvalue = ['go-previous',' ','system-log-out'],
tablevalue = Table(
head = ['Табличка','Второй шаг','Завершение'],
body = [['times','name','isopath','Partition_table','',\
@ -343,6 +345,7 @@ class ApiWsdl:
name = "boolvariable",
label = "you BOT?",
type = "bool",
default = True,
help = \
"you not human? This is a anti-bot test",
element = "check"))
@ -350,7 +353,8 @@ class ApiWsdl:
name = "boolvariable2",
label = "you BOT?",
type = "bool",
default = 'auto',
value = 'auto',
default = True,
help = \
"you not human? This is a anti-bot test",
element = "check_tristate"))
@ -360,7 +364,8 @@ class ApiWsdl:
choice = ['Moscow-1','Piter-2','---','New York-3','London-4'],
comments = ['Mos','Pit','---','New Yo','Lond'],
type = "str",
default = 'New York-3',
default = True,
value = 'New York-3',
help = \
"you not human? This is a anti-bot test",
element = "combo"))
@ -369,7 +374,8 @@ class ApiWsdl:
label = "check city number: ",
choice = ['Moscow','Piter','New York','---','London'],
type = "str",
default = 'London',
value = 'London',
default = True,
help = \
"you not human? This is a anti-bot test",
element = "comboEdit"))
@ -419,7 +425,6 @@ class ApiWsdl:
#name = "button_view1",
#label = _("Next Step"),
#value = 'test_view',
#default = '1',
#opt = Option(longopt="--bot",
#metavalue="BOT"),
#element = "button"))
@ -430,36 +435,36 @@ class ApiWsdl:
group = GroupField(name=_("TEST_METHOD"),nextlabel=_("Next"))
group.fields = []
group.fields.append(Field(
name = "radiovariable",
label = "check city: ",
choice = ['Moscow','Piter','New York','London'],
type = "str",
#default = 'London',
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
"you not human? This is a anti-bot test",
element = "radio"))
group.fields.append(Field(
name = "radiovariable2",
label = "check village: ",
choice = ['aaaaaa','bbbb','ccccc','dddddd'],
comments = ['a','b','c','d'],
type = "str",
default = 'bbbb',
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
"you not human? This is a anti-bot test",
element = "radio"))
#group.fields.append(Field(
#name = "radiovariable",
#label = "check city: ",
#choice = ['Moscow','Piter','New York','London'],
#type = "str",
##value = 'London',
#opt = Option(longopt="--bot",
#metavalue="BOT"),
#help = \
#"you not human? This is a anti-bot test",
#element = "radio"))
#group.fields.append(Field(
#name = "radiovariable2",
#label = "check village: ",
#choice = ['aaaaaa','bbbb','ccccc','dddddd'],
#comments = ['a','b','c','d'],
#type = "str",
#value = 'bbbb',
#opt = Option(longopt="--bot",
#metavalue="BOT"),
#help = \
#"you not human? This is a anti-bot test",
#element = "radio"))
group.fields.append(Field(
name = "comboEdit1",
label = "check city number: ",
choice = ['M','P','N','L'],
comments = ['Moscow','Piter','New York','London'],
type = "str",
default = 'N',
value = 'N',
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
@ -470,7 +475,7 @@ class ApiWsdl:
label = _("check population: "),
choice = ['1000','10000','500000','2000000'],
type = "str",
default = '10000',
value = '10000',
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
@ -482,38 +487,79 @@ class ApiWsdl:
choice = ['aa','bb','cc','dd'],
comments = ['America','Bosniya','Chine','Denmark'],
type = "str",
default = '22,33',
listvalue = ['bb','cc'],
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
_("you not human? This is a anti-bot test"),
element = "multichoice_add"))
group.fields.append(Field(
name = "multichoice",
label = _("check population: "),
choice = ['1000','10000','500000','2000000'],
type = "str",
listvalue = ['qwe','ert'],
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
_("you not human? This is a anti-bot test"),
element = "multichoice"))
#group.fields.append(Field(
#name = "button_view0",
#label = _("previous step"),
#value = 'test_view',
#default = '0',
#opt = Option(longopt="--bot",
#metavalue="BOT"),
#element = "button"))
#group.fields.append(Field(
#name = "button_call",
#label = _("call method"),
#value = 'test',
#opt = Option(longopt="--bot",
#metavalue="BOT"),
#element = "button"))
if expert:
group.fields.append(Field(
name = "expert_open",
label = _("Press for advanced settings..."),
type = "label",
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
"you not human? This is a anti-bot test",
value = 'open',
element = "expert"))
group.fields.append(Field(
name = "multichoice",
label = _("check population: "),
choice = ['1000','10000','500000','2000000','qwe','ert'],
type = "str",
listvalue = ['qwe','ert'],
opt = Option(longopt="--bot",
metavalue="BOT"),
comments = ['Thousand',\
'Ten thousand smoothly and is less than a penny'],
default = False,
help = \
_("you not human? This is a anti-bot test"),
element = "selecttable_add"))
group.fields.append(Field(
name = "Partition_table",
label = _("Mount Points: "),
opt = Option(longopt="--times",
metavalue="TIMES"),
element = "table",
type = 'writable',
# Table
tablevalue = Table(
head = ['Partition','Mount Point','Filesystem', \
'Perform format','Label','Size'],
body = [['/dev/sda1','swap','swap','off',None,'4G'],\
['/dev/sda2','/','reiserfs','on','CLD','10G'],\
['/dev/sda3','/var/calculate','ext4','off',None,'30G']],
values = [ChoiceValue(
typefield = 'combo',
values = ['/dev/sda1','/dev/sda2','/dev/sda3'],
onChanged = ['nothing',None,'get_body','get_body','get_body','get_body']),
ChoiceValue(
typefield = 'comboEdit',
values = ['/','swap','/var/calculate']),
ChoiceValue(
typefield = 'multichoice_add',
values = ['swap','reiserfs','ext4']),
ChoiceValue(
typefield = 'check',
values = ['on','off'])]
)))
else:
group.fields.append(Field(
name = "expert_close",
label = _("Press for advanced settings..."),
type = "label",
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \
"you not human? This is a anti-bot test",
value = 'close',
element = "expert"))
elif step == 2:
view = ViewInfo(groups=[])
@ -524,9 +570,9 @@ class ApiWsdl:
name = "final_label",
label = "Final step in system install!!! Congratulation!\n"\
"Please, select language now!",
#default = "border-style: solid; border-width: "
#value = "border-style: solid; border-width: "
#"2px;border-color: #ff2222;",
default = 'border: 0px outset gray;'
value = 'border: 0px outset gray;'
'border-radius: 6px;'
'subcontrol-origin: margin;'
'color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1,'
@ -538,7 +584,7 @@ class ApiWsdl:
label = "check language: ",
choice = ['Russian','English'],
type = "str",
#default = 'London',
#value = 'London',
opt = Option(longopt="--bot",
metavalue="BOT"),
help = \

@ -93,7 +93,7 @@ class ApiWsdl:
body = [['One','11','12','13','14'],['Two','21','22','23','24'],\
['Three','31','32','33','34'], ['Four','41','42','43','44']]
self.printTable(head, body, "Table 1!")
self.printTable("Table 1!", head, body)
self.startTask("Second task!", True)
perc = 0
while self.getProgress() < 50:
@ -136,7 +136,7 @@ class ApiWsdl:
@rpc(Integer, SH2, _returns = Array(ReturnedMessage))
@Dec.check_permissions(["test2"])
@Dec.console('cl-test2')
@Dec.gui('Api.Тестовые', 'test2 install', \
@Dec.gui('Api.Test', 'test2 install', \
'voicecall,system-software-install,system-log-out')
def test2 ( self, sid, rrr):
import threading

@ -20,6 +20,7 @@ from calculate.api.datavars import __version__,__app__
import api
import request
import certificate
import edit_groups
section = "api"

@ -0,0 +1,154 @@
#-*- coding: utf-8 -*-
# Copyright 2010-2012 Calculate Ltd. 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.
# mode - read only or writeable variable
# value - default variable value
# select - list of posible values for variable
# hide - flag, if it is True, then the variable is not printable
# printval - print value of variable
from calculate.lib.datavars import Variable,ReadonlyVariable,VariableError
import os, glob, sys
from os import path
import OpenSSL
from calculate.lib.cl_lang import setLocalTranslate
from calculate.lib.utils.files import readLinesFile
from calculate.api.server.decorators import Dec
#from calculate.api.cert_cmd import find_id_cert
setLocalTranslate('cl_api',sys.modules[__name__])
class VariableClGroupName(Variable):
"""
Certificate Group
"""
type = "choice"
opt = ["--group-name"]
metavalue = "GROUP_NAME"
def init(self):
self.help = _("set certificate group")
self.label = _("Group name")
def choice(self):
group_rights = self.Get('cl_api_group_rights')
t = open(group_rights, 'r').read()
result = []
for line in t.splitlines():
words = line.split()
if not words[0].startswith('#'):
result.append(words[0])
if not 'all' in result:
result.append('all')
return result
#def get(self):
#req_id = self.Get('cl_req_id')
#data_path = self.Get('cl_api_data')
#cert_file = data_path + '/client_certs/%s.crt' %req_id
#if os.path.exists(cert_file):
#fp = open(cert_file, 'r')
#cert = fp.read()
#fp.close()
#certobj = OpenSSL.crypto.load_certificate \
#(OpenSSL.SSL.FILETYPE_PEM, cert)
#com = certobj.get_extension(certobj.get_extension_count()-1).get_data()
#return com.split(':')[1]
#return ''
def check(self, group):
group_rights = self.Get('cl_api_group_rights')
if group == 'all':
return
t = open(group_rights, 'r').read()
for line in t.splitlines():
words = line.split()
if words[0].startswith('#'):
continue
if group == words[0]:
return
raise VariableError(_("Group %s does not exist") %group)
def uniq(seq):
seen = set()
seen_add = seen.add
return [ x for x in seq if x not in seen and not seen_add(x)]
class VariableClGroupRights(Variable):
"""
Certificate Group
"""
type = "choice-list"
opt = ["-g"]
metavalue = "REQ_GROUP"
def init(self):
self.help = _("set certificate group")
self.label = _("Group rights")
def choice(self):
right_list = []
for key in Dec.rightsMethods.keys():
right_list += Dec.rightsMethods[key]
uniq_right_list = uniq(right_list)
uniq_right_list.sort()
return uniq_right_list
def get(self):
group_name = self.Get('cl_group_name')
group_rights = self.Get('cl_api_group_rights')
t = open(group_rights, 'r').read()
results = []
for line in t.splitlines():
words = line.split(' ',1)
if words[0] == group_name:
methods = words[1].split(',')
for i in methods:
results.append(i.strip())
if group_name == 'all' and results == []:
right_list = []
for key in Dec.rightsMethods.keys():
right_list += Dec.rightsMethods[key]
uniq_right_list = uniq(right_list)
uniq_right_list.sort()
return uniq_right_list
return results
class VariableClGroupAdd(Variable):
"""
Certificate Identification
"""
opt = ["--add-group"]
metavalue = "ADD_GROUP"
def init(self):
self.help = _("Group name for added")
self.label = _("Group name")
def check(self, group):
name_re = re.compile("^[a-zA-Z_0-9]{3,20}$")
if name_re.findall(user_name):
raise VariableError( \
_("Group name must consist of words, digits and simbol '_'"))

@ -30,7 +30,6 @@ from calculate.lib.utils.files import readLinesFile
setLocalTranslate('cl_api',sys.modules[__name__])
class VariableClAllReqId(Variable):
def get(self):
data_path = self.Get('cl_api_data')
result = []
@ -200,7 +199,6 @@ class VariableClReqDate(ReadonlyVariable):
def get(self):
words = self.Get('cl_req_base_data')
return '%s %s' %(words[2], words[3])
class VariableClReqUserName(ReadonlyVariable):
"""
@ -244,7 +242,7 @@ class VariableClReqGroup(Variable):
"""
Certificate Group
"""
type = "choiceedit"
type = "choice"
opt = ["-g"]
metavalue = "REQ_GROUP"
@ -279,7 +277,7 @@ class VariableClReqGroup(Variable):
(OpenSSL.SSL.FILETYPE_PEM, cert)
com = certobj.get_extension(certobj.get_extension_count()-1).get_data()
return com.split(':')[1]
return 'not signed'
return ''
def check(self, group):
group_rights = self.Get('cl_api_group_rights')

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: calculate-api\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-04-13 13:13+0300\n"
"PO-Revision-Date: 2012-04-13 13:13+0300\n"
"POT-Creation-Date: 2012-04-19 15:21+0300\n"
"PO-Revision-Date: 2012-04-19 15:23+0300\n"
"Last-Translator: Denis <ds@mail.ru>\n"
"Language-Team: \n"
"Language: \n"
@ -14,95 +14,124 @@ msgstr ""
"X-Poedit-Basepath: .\n"
"X-Poedit-SearchPath-0: /var/calculate/mydir/git/calculate-api\n"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:57
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:58
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:59
msgid "Request Identification"
msgstr "Идентификатор запроса"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:68
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:67
msgid "Request id must be int"
msgstr "Идентификатор запроса должен быть целочисленным"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:80
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:79
msgid "Set page limit values"
msgstr "Установите значение предела"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:81
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:80
msgid "Page limit"
msgstr "Предел для страницы"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:87
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:86
msgid "Limit number must be int"
msgstr "Предел должен быть целочисленным"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:99
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:98
msgid "Set page count values"
msgstr "Учтановите количество для страницы"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:100
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:99
msgid "Page count"
msgstr "Количество для страницы"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:106
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:105
msgid "Count number must be int"
msgstr "Количество должно быть целочисленным"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:118
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:117
msgid "Set page offset values"
msgstr "Учтановите смещение для страницы"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:119
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:118
msgid "Page offset"
msgstr "Смещение для страницы"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:125
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:124
msgid "Offset number must be int"
msgstr "Смещение должно быть целочисленным"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:164
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:163
msgid "Request Ip adress"
msgstr "Ip адрес"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:165
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:164
msgid "Request Ip"
msgstr "Ip адрес"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:179
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:178
msgid "Request Mac adress"
msgstr "Mac адрес"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:180
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:179
msgid "Request Mac"
msgstr "Mac адрес"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:193
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:194
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:195
msgid "Request Date"
msgstr "Дата запроса"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:211
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:212
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:209
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:210
msgid "Request Owner UserName"
msgstr "Имя владельца запроса"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:230
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:231
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:228
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:229
msgid "Request Location"
msgstr "Расположение"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:252
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:250
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:42
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:103
msgid "set certificate group"
msgstr "выберите группу сертификата"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:253
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:251
msgid "Certificate group"
msgstr "Группа сертификата"
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:296
#: /var/calculate/mydir/git/calculate-api/api/variables/request.py:295
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:86
#, python-format
msgid "Group %s does not exist"
msgstr "Группа %s не существует"
#: /var/calculate/mydir/git/calculate-api/api/variables/certificate.py:57
#: /var/calculate/mydir/git/calculate-api/api/variables/certificate.py:58
msgid "Certificate Identification"
msgstr "Идентификатор сертификата"
#: /var/calculate/mydir/git/calculate-api/api/variables/certificate.py:71
msgid "Certificate id must be int"
msgstr "Номер сертификата должен быть целочисленным"
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:43
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:148
msgid "Group name"
msgstr "Имя группы"
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:104
msgid "Group rights"
msgstr "Права группы"
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:147
msgid "Group name for added"
msgstr "Имя группы для добавления"
#: /var/calculate/mydir/git/calculate-api/api/variables/edit_groups.py:154
msgid "Group name must consist of words, digits and simbol '_'"
msgstr "Имя группы должно состоять из латинских букв, цифр и символа '_'"
#: /var/calculate/mydir/git/calculate-api/api/client/pid_information.py:27
msgid "PID not found"
msgstr "ID процесса не найден"
@ -228,7 +257,6 @@ msgstr "Дата отзыва"
#: /var/calculate/mydir/git/calculate-api/api/client/cert_verify.py:94
#: /var/calculate/mydir/git/calculate-api/api/client/cert_verify.py:99
#: /var/calculate/mydir/git/calculate-api/api/client/client_class.py:346
#, python-format
msgid "error creating directory %s"
msgstr "ошибка создания директории %s"
@ -604,22 +632,18 @@ msgid "Request was sent from another ip."
msgstr "Запрос был послан с другого ip."
#: /var/calculate/mydir/git/calculate-api/api/client/cert_func.py:248
#: /var/calculate/mydir/git/calculate-api/api/client/client_class.py:164
msgid "Not found field \"CN\" in certificate!"
msgstr "Нет поля \"CN\" в сертификате!"
#: /var/calculate/mydir/git/calculate-api/api/client/cert_func.py:261
#: /var/calculate/mydir/git/calculate-api/api/client/client_class.py:174
msgid "filename = "
msgstr "имя файла = "
#: /var/calculate/mydir/git/calculate-api/api/client/cert_func.py:262
#: /var/calculate/mydir/git/calculate-api/api/client/client_class.py:175
msgid "CERTIFICATE ADD"
msgstr "Сертификат добавлен"
#: /var/calculate/mydir/git/calculate-api/api/client/cert_func.py:264
#: /var/calculate/mydir/git/calculate-api/api/client/client_class.py:177
msgid "file with ca certificates exists"
msgstr "файл с сертификатом центра авторизации создан"
@ -774,61 +798,19 @@ msgstr "Завершаю все процессы"
msgid "All processes are closed."
msgstr "Все процессы закрыты."
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:480
#, python-format
msgid "Certificate %d can run all methods!"
msgstr "Сертификат %d может запускать все методы!"
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:529
#, python-format
msgid "Certificate %d can run: "
msgstr "Сертификат %d может запускать: "
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:534
msgid "Certificate groups"
msgstr "Группы сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:536
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:485
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:760
msgid "Fingerprint = "
msgstr "Отпечаток = "
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:583
msgid "View rights certificate"
msgstr "Просмотр прав сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:583
#: /var/calculate/mydir/git/calculate-api/api/server/test2.py:222
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:430
msgid "Next"
msgstr "Далее"
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:588
msgid "Certificate id: "
msgstr "Номер сертификата: "
#: /var/calculate/mydir/git/calculate-api/api/server/baseClass.py:593
msgid "Enter Certificate id"
msgstr "Введите номер сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/create_cert.py:40
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:50
msgid "Enter certificate data by hand? [y]/n: "
msgstr "Ввести данные сертификата вручную? [y]/n: "
#: /var/calculate/mydir/git/calculate-api/api/server/create_cert.py:49
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:65
msgid "Do not use space characters and tabs"
msgstr "Не используйте символы пробела и табуляции"
#: /var/calculate/mydir/git/calculate-api/api/server/create_cert.py:68
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:70
msgid "Organization Unit: "
msgstr "Название отдела: "
#: /var/calculate/mydir/git/calculate-api/api/server/create_cert.py:78
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:80
msgid "Full network address (host:port)"
msgstr "Полный сетевой адрес (хост:порт)"
@ -871,12 +853,17 @@ msgstr "Версия %s"
msgid "First group"
msgstr "Первая группа"
#: /var/calculate/mydir/git/calculate-api/api/server/test2.py:222
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:435
msgid "Next"
msgstr "Далее"
#: /var/calculate/mydir/git/calculate-api/api/server/test2.py:223
msgid "Secound group"
msgstr "Вторая группа"
#: /var/calculate/mydir/git/calculate-api/api/server/test2.py:225
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:520
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:566
msgid "Done"
msgstr "Готово"
@ -884,56 +871,59 @@ msgstr "Готово"
msgid "Interrupted by user"
msgstr "Прервано пользователем"
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:236
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:430
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:239
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:435
msgid "TEST_METHOD"
msgstr "Тестовый метод"
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:241
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:244
msgid "YOUR NAME: "
msgstr "Ваше имя: "
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:248
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:251
msgid "Please, enter your name"
msgstr "Пожалуйста, введите Ваше имя"
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:252
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:255
msgid "TIMES: "
msgstr "Время: "
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:259
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:271
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:284
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:262
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:273
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:285
msgid "Enter times"
msgstr "Введите время"
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:264
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:275
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:267
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:277
msgid "select ISO"
msgstr "Выберите ISO образ"
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:288
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:289
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:523
msgid "Mount Points: "
msgstr "Точки монтирования: "
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:334
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:379
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:336
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:385
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:499
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:555
msgid "Press for advanced settings..."
msgstr "Нажмите для дополнительных настроек..."
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:470
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:481
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:493
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:475
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:486
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:509
msgid "check population: "
msgstr "Количество населения: "
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:477
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:489
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:500
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:482
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:494
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:519
msgid "you not human? This is a anti-bot test"
msgstr "Анти-бот тест"
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:520
#: /var/calculate/mydir/git/calculate-api/api/server/test.py:566
msgid "Gratulations!"
msgstr "Поздравляю!"
@ -981,6 +971,12 @@ msgstr "для изменения прав сертификата использ
msgid "file %s not found!"
msgstr "файл %s не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:485
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:760
#: /var/calculate/mydir/git/calculate-api/api/server/certificate.py:166
msgid "Fingerprint = "
msgstr "Отпечаток = "
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:496
msgid ""
"\n"
@ -1022,12 +1018,14 @@ msgstr "Номер сертификата должен быть целочисл
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:657
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:712
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:344
#, python-format
msgid "Signing Request %s not found"
msgstr "Запрос на подпись %s не найден"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:661
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:716
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:348
#, python-format
msgid "certificate %s already exists"
msgstr "Сертификат %s успешно создан"
@ -1038,6 +1036,7 @@ msgstr "Введите группу нового сертификата: "
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:690
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:744
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:374
#, python-format
msgid "certificate %s is signed"
msgstr "Сертификат %s подписан"
@ -1109,11 +1108,13 @@ msgid "Request or certificate with id = %s not found!"
msgstr "Запрос или сертификат с идентификатором = %s не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:930
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:493
#, python-format
msgid "request %s not found!"
msgstr "запрос %s не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:933
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:496
msgid "This request has already been signed"
msgstr "Запрос успешно подписан"
@ -1126,10 +1127,12 @@ msgid "Not deleted"
msgstr "Не удалён"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:963
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:522
msgid "request deleted"
msgstr "запрос на подпись сертификата удалён"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:966
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:525
msgid "certificate deleted"
msgstr "сертификат удалён"
@ -1138,6 +1141,7 @@ msgid "successfully removed"
msgstr "успешно удалено"
#: /var/calculate/mydir/git/calculate-api/api/server/cert_cmd.py:969
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:527
msgid "delete file error!"
msgstr "ошибка удаления файла!"
@ -1231,56 +1235,134 @@ msgstr "вывод версии программы и выход"
msgid "Write pid file %s Error!"
msgstr "Ошибка чтения файла с идентификаторами процессов %s!"
#: /var/calculate/mydir/git/calculate-api/api/server/func.py:512
#: /var/calculate/mydir/git/calculate-api/api/server/func.py:513
#, python-format
msgid "Unable import %s"
msgstr "Невозможно импортировать %s"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:202
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:204
msgid "View Requests"
msgstr "Просмотр запросов"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:226
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:228
msgid "Requests"
msgstr "Запросы"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:263
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:419
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:426
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:574
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:265
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:418
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:425
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:572
msgid "Requests detail"
msgstr "Подробности запроса на подпись сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:274
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:276
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:273
msgid "Back"
msgstr "Назад"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:279
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:281
msgid "Confirm"
msgstr "Подтвердить"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:284
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:286
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:283
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:495
msgid "Delete"
msgstr "Удалено"
msgstr "Удалить"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:335
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:334
msgid "Confirm Request"
msgstr "Подтверждение запроса"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:489
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:488
#, python-format
msgid "Request and certificate with id = %s not found!"
msgstr "Запрос или сертификат с идентификатором = %s не найден!"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:538
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:536
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:464
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:570
#, python-format
msgid "Exception!%s"
msgstr "Исключение: %s"
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:567
#: /var/calculate/mydir/git/calculate-api/api/server/request.py:565
msgid "Requests delete"
msgstr "Запрос на подпись сертификата удалён"
#: /var/calculate/mydir/git/calculate-api/api/server/certificate.py:110
#, python-format
msgid "Certificate %d can run all methods!"
msgstr "Сертификат %d может запускать все методы!"
#: /var/calculate/mydir/git/calculate-api/api/server/certificate.py:159
#, python-format
msgid "Certificate %d can run: "
msgstr "Сертификат %d может запускать: "
#: /var/calculate/mydir/git/calculate-api/api/server/certificate.py:164
msgid "Certificate groups"
msgstr "Группы сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/certificate.py:279
msgid "Certificate View"
msgstr "Просмотр сертификата"
#: /var/calculate/mydir/git/calculate-api/api/server/certificate.py:281
msgid "View"
msgstr "Просмотр"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:202
msgid "View Groups"
msgstr "Просмотр групп"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:226
msgid "Groups"
msgstr "Группы"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:263
msgid "Group detail"
msgstr "Подробности группы"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:278
msgid "Change"
msgstr "Изменить"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:346
msgid "Group Changed"
msgstr "Группа изменена"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:348
msgid "Not Changed Group"
msgstr "Группа не изменена"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:382
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:388
msgid "Change group"
msgstr "Изменить группу"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:450
#, python-format
msgid "Group %s deleted"
msgstr "Группа %s удалена"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:453
#, python-format
msgid "Group %s is not deleted"
msgstr "Группа %s не удалена"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:493
msgid "Group delete"
msgstr "Удаление группы"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:600
msgid "Group add"
msgstr "Дабавление группы"
#: /var/calculate/mydir/git/calculate-api/api/server/edit_groups.py:602
msgid "Add"
msgstr "Добавить"
#: /var/calculate/mydir/git/calculate-api/api/server/clean.py:54
#, python-format
msgid "watcher process pid %d error"
@ -1363,6 +1445,26 @@ msgstr "Нажмите для дополнительных настроек"
msgid "Previous"
msgstr "Назад"
#~ msgid "Change Group"
#~ msgstr "Изменить группу"
#, fuzzy
#~ msgid "Group name must be int"
#~ msgstr "Количество должно быть целочисленным"
#, fuzzy
#~ msgid "Changed Group"
#~ msgstr "Изменить"
#~ msgid "View rights certificate"
#~ msgstr "Просмотр прав сертификата"
#~ msgid "Certificate id: "
#~ msgstr "Номер сертификата: "
#~ msgid "Enter Certificate id"
#~ msgstr "Введите номер сертификата"
#, fuzzy
#~ msgid "Serial Number = </b>"
#~ msgstr "Серийный номер = "

Loading…
Cancel
Save