#!/usr/bin/env python
# encoding: utf-8
# Copyright (C) 2015 Chintalagiri Shashank
#
# This file is part of tendril.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
Docstring for __init__.py
"""
import os
from tendril.gedaif.conffile import ConfigsFile
from tendril.gedaif.conffile import NoGedaProjectError
from tendril.entityhub import serialnos
from tendril.entityhub import projects
from tendril.utils.db import with_db
from tendril.utils.config import INSTANCE_ROOT
from tendril.utils.fsutils import import_
from tendril.utils import log
logger = log.get_logger(__name__, log.DEFAULT)
macs_folder = os.path.join(INSTANCE_ROOT, 'macs')
@with_db
[docs]def get_mac_from_sno(serialno=None, session=None):
devicetype = serialnos.get_serialno_efield(sno=serialno)
try:
projectfolder = projects.cards[devicetype]
except KeyError:
raise AttributeError("Project for " + devicetype + " not found.")
try:
gcf = ConfigsFile(projectfolder)
logger.debug("Using gEDA configs file from : " +
projects.cards[devicetype])
except NoGedaProjectError:
raise AttributeError("gEDA project for " + devicetype + " not found.")
modname = gcf.mactype
funcname = 'get_mac_from_sno'
mod = import_(os.path.join(macs_folder, modname))
func = getattr(mod, funcname)
return func(serialno=serialno, session=session)
@with_db
[docs]def get_sno_from_mac(mac=None, mactype=None, devicetype=None, session=None):
if mactype is None:
try:
projectfolder = projects.cards[devicetype]
except KeyError:
raise AttributeError("Project for " + devicetype + " not found.")
try:
gcf = ConfigsFile(projectfolder)
logger.debug("Using gEDA configs file from : " +
projects.cards[devicetype])
except NoGedaProjectError:
raise AttributeError(
"gEDA project for " + devicetype + " not found."
)
modname = gcf.mactype
else:
modname = mactype
funcname = 'get_sno_from_mac'
mod = import_(os.path.join(macs_folder, modname))
func = getattr(mod, funcname)
return func(mac=mac, session=session)
[docs]def get_device_mac(mactype='QASCv1', **kwargs):
if mactype == 'QASCv1':
funcname = 'get_device_mac'
modname = mactype
params = {}
elif mactype == 'FT232DEVICEv1':
funcname = 'get_device_mac'
modname = mactype
params = {'description': kwargs['description']}
else:
raise ValueError("Unrecognized MACTYPE")
mod = import_(os.path.join(macs_folder, modname))
func = getattr(mod, funcname)
return func(**params)
[docs]def get_sno_from_device(mactype='QASCv1', **kwargs):
mac = get_device_mac(mactype, **kwargs)
return get_sno_from_mac(mac=mac, mactype=mactype)