Source code for tendril.entityhub.macs

#!/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)