Improved version of __rolevars, using a single entry per role with two lists

This commit is contained in:
enricobacis 2015-09-11 01:47:19 +02:00
parent 3dddc535d5
commit 8ff650ab6d
1 changed files with 6 additions and 12 deletions

View File

@ -5,7 +5,6 @@
__author__ = 'BgLUG'
__email__ = 'info@bglug.it'
from collections import namedtuple
from contextlib import contextmanager, closing
from subprocess import Popen, PIPE
from sqlite3 import connect
@ -20,9 +19,6 @@ import sys
import re
import os
# namedtuple used by Nethserver's Network Package Manager
Package = namedtuple('Package', ['name', 'role', 'rule', 'description'])
class MyApp:
def __init__(self, configfile = '/etc/mac2hostname.ini'):
if not os.path.isfile(configfile):
@ -108,18 +104,16 @@ class MyApp:
(role,) = cursor.execute("SELECT role FROM client WHERE hostname = '%s' AND mac = '%s'" % (hostname, macaddress)).fetchone()
return role
# Parse a json pkg retrieved by Nethserver's Network Package Manager into a Package namedtuple
def parse_package(pkg):
return Package(pkg['name'], pkg['props']['Role'], pkg['props']['Rule'], pkg['props']['Description'])
# Variables returned to the client
def __rolevars(self, role=None):
retval = {'role': role, 'addpkg': [], 'delpkg': []}
try:
db = Popen(['db', 'packages', 'getjson'], stdout=PIPE).communicate()[0]
for pkg in map(parse_package, json.loads(db)):
if pkg.role == role:
result['addpkg' if pkg.rule == 'add' else 'delpkg'].append(str(pkg.name))
db = Popen(['db', 'roles', 'getjson'], stdout=PIPE).communicate()[0]
for data in json.loads(db):
if data['name'] == role:
retval['addpkg'] = data['props']['Addpkg'].split()
retval['delpkg'] = data['props']['Delpkg'].split()
continue
except: pass
return retval