mirror of
https://github.com/MikroWizard/mikroman.git
synced 2025-07-16 08:54:34 +02:00
MikroWizard Initial commit | MikroMan Welcome to the world :)
This commit is contained in:
commit
8c49b9a55d
96 changed files with 12274 additions and 0 deletions
158
py/libs/db/db_groups.py
Normal file
158
py/libs/db/db_groups.py
Normal file
|
@ -0,0 +1,158 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# db_group.py: Models and functions for accsessing db related to Device groups
|
||||
# MikroWizard.com , Mikrotik router management solution
|
||||
# Author: sepehr.ha@gmail.com
|
||||
|
||||
from peewee import *
|
||||
|
||||
from libs.db.db import User,BaseModel,get_object_or_none
|
||||
import logging
|
||||
from libs.db.db_device import Devices
|
||||
log = logging.getLogger("db_groups")
|
||||
|
||||
|
||||
class DevGroups(BaseModel):
|
||||
name = TextField()
|
||||
owner = ForeignKeyField(db_column='owner', null=True,
|
||||
model=User, to_field='id')
|
||||
created = DateTimeField()
|
||||
modified = DateTimeField()
|
||||
|
||||
class Meta:
|
||||
db_table = 'device_groups'
|
||||
|
||||
def get_group(id):
|
||||
return get_object_or_none(DevGroups, id=id)
|
||||
|
||||
class DevGroupRel(BaseModel):
|
||||
group_id = ForeignKeyField(db_column='group_id', null=True,
|
||||
model=DevGroups, to_field='id')
|
||||
device_id = ForeignKeyField(db_column='device_id', null=True,
|
||||
model=Devices, to_field='id')
|
||||
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 = 'device_groups_devices_rel'
|
||||
indexes = (
|
||||
# Specify a unique multi-column index on from/to-user.
|
||||
(('group_id', 'device_id'), True),
|
||||
)
|
||||
|
||||
def create_group(name):
|
||||
try:
|
||||
#check if we have a group with same name
|
||||
group = get_object_or_none(DevGroups,name=name)
|
||||
#if we do, return id
|
||||
if group:
|
||||
return False
|
||||
group = DevGroups.create(name=name)
|
||||
except IntegrityError:
|
||||
return False
|
||||
return group
|
||||
|
||||
def update_group(id, name):
|
||||
group = get_group(id)
|
||||
group.name = name
|
||||
group.save()
|
||||
return group
|
||||
|
||||
def add_devices_to_group(group, devids):
|
||||
data=[]
|
||||
for devid in devids:
|
||||
data.append({'group_id': group, 'device_id': devid})
|
||||
res=DevGroupRel.insert_many(data).on_conflict_ignore().execute()
|
||||
return res
|
||||
|
||||
#Get groups of device
|
||||
def devgroups(devid):
|
||||
return (DevGroups
|
||||
.select()
|
||||
.join(DevGroupRel, on=DevGroupRel.group_id)
|
||||
.where(DevGroupRel.device_id == devid)
|
||||
.order_by(DevGroups.name))
|
||||
|
||||
#Get devices of group
|
||||
def devs(groupid):
|
||||
return (Devices
|
||||
.select()
|
||||
.join(DevGroupRel, on=DevGroupRel.device_id)
|
||||
.where(DevGroupRel.group_id == groupid)
|
||||
.order_by(Devices.name))
|
||||
|
||||
#Get groups of device
|
||||
def devgroups_api(devid):
|
||||
return list(DevGroups
|
||||
.select()
|
||||
.join(DevGroupRel, on=DevGroupRel.group_id)
|
||||
.where(DevGroupRel.device_id == devid)
|
||||
.order_by(DevGroups.name).dicts())
|
||||
|
||||
#Get devices of group in dict
|
||||
def devs(groupid):
|
||||
return list(Devices
|
||||
.select()
|
||||
.join(DevGroupRel, on=DevGroupRel.device_id)
|
||||
.where(DevGroupRel.group_id == groupid)
|
||||
.order_by(Devices.name).dicts())
|
||||
|
||||
#Get devices of group
|
||||
def devs2(groupid):
|
||||
return list(Devices
|
||||
.select()
|
||||
.join(DevGroupRel, on=DevGroupRel.device_id)
|
||||
.where(DevGroupRel.group_id == groupid)
|
||||
.order_by(Devices.name))
|
||||
def get_devs_of_groups(group_ids):
|
||||
try:
|
||||
return list(Devices
|
||||
.select()
|
||||
.join(DevGroupRel, on=DevGroupRel.device_id)
|
||||
.where(DevGroupRel.group_id << group_ids)
|
||||
.order_by(Devices.name))
|
||||
except Exception as e :
|
||||
log.error(e)
|
||||
return []
|
||||
|
||||
#get all groups including devices in each group
|
||||
def query_groups_api():
|
||||
t3=DevGroups.alias()
|
||||
q=DevGroups.select(DevGroups.id,DevGroups.name,DevGroups.created,fn.array_agg(DevGroupRel.device_id)).join(DevGroupRel,JOIN.LEFT_OUTER, on=(DevGroupRel.group_id == DevGroups.id)).order_by(DevGroups.id).group_by(DevGroups.id)
|
||||
return list(q.dicts())
|
||||
|
||||
def get_groups_by_id(ids):
|
||||
"""Return list of unique directors. An example of a raw SQL query."""
|
||||
q=DevGroups.select().where(DevGroups.id << ids)
|
||||
try:
|
||||
q=list(q)
|
||||
except Exception as e :
|
||||
log.error(e)
|
||||
q=False
|
||||
return q
|
||||
|
||||
def delete_from_group(devids):
|
||||
delete=DevGroupRel.delete().where(DevGroupRel.device_id << devids).execute()
|
||||
return delete
|
||||
|
||||
def delete_device(devid):
|
||||
try:
|
||||
|
||||
delete_from_group([devid])
|
||||
dev = get_object_or_none(Devices, id=devid)
|
||||
dev.delete_instance(recursive=True)
|
||||
return True
|
||||
except Exception as e:
|
||||
log.error(e)
|
||||
return False
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# quick adhoc tests
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue