mirror of
https://github.com/MikroWizard/mikroman.git
synced 2025-06-21 03:55:39 +02:00
128 lines
3.7 KiB
Python
128 lines
3.7 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# db_user_tasks.py: Models and functions for accsessing db related to user tasks
|
|
# MikroWizard.com , Mikrotik router management solution
|
|
# Author: sepehr.ha@gmail.com
|
|
|
|
from peewee import *
|
|
from libs.db.db_device import Devices
|
|
from libs.db.db import User,BaseModel,get_object_or_none
|
|
from libs.db.db_groups import DevGroups,get_devs_of_groups
|
|
import logging
|
|
log = logging.getLogger("db_user_tasks")
|
|
|
|
|
|
class Snippets(BaseModel):
|
|
|
|
name = TextField()
|
|
description = TextField()
|
|
content = TextField()
|
|
created = DateTimeField()
|
|
|
|
class Meta:
|
|
# `indexes` is a tuple of 2-tuples, where the 2-tuples are
|
|
# a tuple of column names to index and a boolean indicating
|
|
# whether the index is unique or not.
|
|
db_table = 'snippets'
|
|
|
|
def get_snippet_by_name(name):
|
|
return get_object_or_none(Snippets, name=name)
|
|
|
|
def get_snippet(id):
|
|
return get_object_or_none(Snippets, id=id)
|
|
|
|
def update_snippet(id,name, description, content):
|
|
snippet = get_object_or_none(Snippets, id=id)
|
|
snippet.name = name
|
|
snippet.description = description
|
|
snippet.content = content
|
|
snippet.save()
|
|
|
|
def create_snippet(name, description, content):
|
|
snippet = Snippets()
|
|
snippet.name = name
|
|
snippet.description = description
|
|
snippet.content = content
|
|
snippet.save()
|
|
|
|
def delete_snippet(id):
|
|
snippet = get_object_or_none(Snippets, id=id)
|
|
snippet.delete_instance()
|
|
|
|
class UserTasks(BaseModel):
|
|
|
|
name = TextField()
|
|
description = TextField()
|
|
desc_cron = TextField()
|
|
dev_ids = TextField()
|
|
snippetid = ForeignKeyField(db_column='snippetid', null=True,
|
|
model=Snippets, to_field='id')
|
|
data = TextField()
|
|
cron = TextField()
|
|
action = TextField()
|
|
task_type = TextField()
|
|
selection_type = TextField()
|
|
created = DateTimeField()
|
|
|
|
class Meta:
|
|
# `indexes` is a tuple of 2-tuples, where the 2-tuples are
|
|
# a tuple of column names to index and a boolean indicating
|
|
# whether the index is unique or not.
|
|
db_table = 'user_tasks'
|
|
|
|
def get_utask_by_id(tid):
|
|
return get_object_or_none(UserTasks, id=tid)
|
|
|
|
class TaskDevRel(BaseModel):
|
|
utask_id = ForeignKeyField(UserTasks, related_name='utask_id')
|
|
group_id = ForeignKeyField(DevGroups, related_name='group_id')
|
|
device_id = ForeignKeyField(Devices, related_name='device_id')
|
|
|
|
class Meta:
|
|
db_table = 'task_group_dev_rel'
|
|
|
|
def get_task_devices(task,return_devs=True):
|
|
members=[]
|
|
members=list(TaskDevRel.select().where(TaskDevRel.utask_id == task.id).execute())
|
|
devs=[]
|
|
if task.selection_type=='groups':
|
|
group_ids=[]
|
|
for mem in members:
|
|
try:
|
|
group_ids.append(mem.group_id)
|
|
except DoesNotExist as err:
|
|
pass
|
|
if return_devs:
|
|
devs=get_devs_of_groups(group_ids)
|
|
else:
|
|
devs=group_ids
|
|
else:
|
|
for mem in members:
|
|
try:
|
|
devs.append(mem.device_id)
|
|
except DoesNotExist as err:
|
|
pass
|
|
return devs
|
|
|
|
def add_member_to_task(task_id,members,type='devices'):
|
|
data=[]
|
|
for member in members:
|
|
if type=='groups':
|
|
data.append({'utask_id': task_id, 'group_id': member})
|
|
else:
|
|
data.append({'utask_id': task_id, 'device_id': member})
|
|
res=TaskDevRel.insert_many(data).on_conflict_ignore().execute()
|
|
return res
|
|
|
|
def delete_members(task_id):
|
|
res=TaskDevRel.delete().where(TaskDevRel.utask_id == task_id).execute()
|
|
return res
|
|
# --------------------------------------------------------------------------
|
|
|
|
if __name__ == '__main__':
|
|
|
|
# quick adhoc tests
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
|