# TRASSIR Templates sync
#
#0.1 release
'''
<parameters>
<company>AAT</company>
<title>templates_sync</title>
<version>0.1</version>
<parameter>
<type>objects</type>
<name>Шаблоны, для синхронизации</name>
<id>TEMPLATES</id>
</parameter>
<parameter>
<type>integer</type>
<name>Период синхронизации, мин</name>
<id>DELAY</id>
<value>10</value>
<min>1</min>
<max>99999999</max>
</parameter>
<parameter>
<type>caption</type>
<name>Источник</name>
</parameter>
<parameter>
<type>server</type>
<name>Выберите или используйте текущий</name>
<id>SOURCE</id>
</parameter>
<parameter>
<type>boolean</type>
<name>Текущий сервер/клиент</name>
<id>SOURCE_CURRENT</id>
<value>0</value>
</parameter>
<parameter>
<type>caption</type>
<name>Цель</name>
</parameter>
<parameter>
<type>server</type>
<name>Выберите или используйте текущий</name>
<id>TARGET</id>
</parameter>
<parameter>
<type>boolean</type>
<name>Текущий сервер/клиент</name>
<id>TARGET_CURRENT</id>
<value>1</value>
</parameter>
</parameters>
'''
class TmplSync():
def __init__(self, templates, source, target):
self.templates = templates
self.source = source
self.target = target
self.content = {}
self.check_values()
def check_values(self):
if not self.templates:
raise ValueError('Шаблоны не выбраны')
if not self.source:
raise ValueError('Выберите источник')
if not self.target:
raise ValueError('Выберите цель')
if self.source == self.target:
raise ValueError('Источник и цель не могут совпадать!')
def sync_loop(self, relax):
try:
for tmpl in settings("/%s/templates" %self.source).ls():
if tmpl.type == 'Template' and tmpl['name'] in self.templates:
self.content.update({tmpl['name']: tmpl['content']})
except KeyError as e:
error(e)
if self.content:
try:
for tmpl in settings("/%s/templates" %self.target).ls():
if tmpl.type == 'Template' and tmpl['name'] in self.templates:
content = self.content.get(tmpl['name'], None)
if content: tmpl['content'] = content
except KeyError as e:
error(e)
finally:
self.content.clear()
timeout(1000*60*relax, lambda: self.sync_loop(relax))
if SOURCE_CURRENT:
SOURCE = settings("").path[1:]
if TARGET_CURRENT:
TARGET = settings("").path[1:]
tmpl = TmplSync(TEMPLATES.split(','), SOURCE, TARGET)
tmpl.sync_loop(DELAY)