Source code for gen_avr8.pro

# -*- coding: UTF-8 -*-

'''
 Module
     __init__.py
 Copyright
     Copyright (C) 2018 Vladimir Roncevic <elektron.ronca@gmail.com>
     gen_avr8 is free software: you can redistribute it and/or modify it
     under the terms of the GNU General Public License as published by the
     Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
     gen_avr8 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 General Public License for more details.
     You should have received a copy of the GNU General Public License along
     with this program. If not, see <http://www.gnu.org/licenses/>.
 Info
     Defined class AVR8Setup with attribute(s) and method(s).
     Generate AVR project skeleton.
'''

import sys

try:
    from gen_avr8.pro.module_type import ModuleType
    from gen_avr8.pro.mcu_selector import MCUSelector
    from gen_avr8.pro.osc_selector import OSCSelector
    from gen_avr8.pro.template_dir import TemplateDir
    from gen_avr8.pro.template_type import TemplateType
    from gen_avr8.pro.read_template import ReadTemplate
    from gen_avr8.pro.write_template import WriteTemplate
    from ats_utilities.checker import ATSChecker
    from ats_utilities.console_io.verbose import verbose_message
    from ats_utilities.config_io.yaml.yaml2object import Yaml2Object
    from ats_utilities.exceptions.ats_type_error import ATSTypeError
    from ats_utilities.exceptions.ats_bad_call_error import ATSBadCallError
except ImportError as ats_error_message:
    MESSAGE = '\n{0}\n{1}\n'.format(__file__, ats_error_message)
    sys.exit(MESSAGE)  # Force close python ATS ##############################

__author__ = 'Vladimir Roncevic'
__copyright__ = 'Copyright 2018, https://vroncevic.github.io/gen_avr8'
__credits__ = ['Vladimir Roncevic']
__license__ = 'https://github.com/vroncevic/gen_avr8/blob/dev/LICENSE'
__version__ = '2.4.5'
__maintainer__ = 'Vladimir Roncevic'
__email__ = 'elektron.ronca@gmail.com'
__status__ = 'Updated'


[docs]class AVR8Setup: ''' Defined class AVR8Setup with attribute(s) and method(s). Generate AVR project skeleton. It defines: :attributes: | GEN_VERBOSE - console text indicator for process-phase. | __mcu_sel - MCU selector API. | __fosc_sel - FOSC selector API. | __reader - reader API. | __writer - writer API. | __project_setup - project setup. :methods: | __init__ - initial constructor. | project_setup - property methods for set operations. | gen_pro_setup - generate project skeleton. | __str__ - dunder method for AVR8Setup. ''' GEN_VERBOSE = 'GEN_AVR8::PRO::AVR8SETUP' def __init__(self, verbose=False): ''' Initial constructor. :param verbose: enable/disable verbose option. :type verbose: <bool> :exceptions: None ''' verbose_message(AVR8Setup.GEN_VERBOSE, verbose, 'init setup') self.__mcu_sel = MCUSelector(verbose=verbose) self.__fosc_sel = OSCSelector(verbose=verbose) self.__reader = ReadTemplate(verbose=verbose) self.__writer = WriteTemplate(verbose=verbose) self.__project_setup = dict()
[docs] def project_setup(self, project_name, project_type, verbose=False): ''' Setter for project setup. :param project_name: project name. :type project_name: <str> :param project_type: project type. :type project_type: <str> :param verbose: enable/disable verbose option. :type verbose: <bool> :exceptions: ATSTypeError | ATSBadCallError ''' checker, error, status = ATSChecker(), None, False error, status = checker.check_params([ ('str:project_name', project_name), ('str:project_type', project_type) ]) if status == ATSChecker.TYPE_ERROR: raise ATSTypeError(error) if status == ATSChecker.VALUE_ERROR: raise ATSBadCallError(error) self.__project_setup.update({'name': project_name}) self.__project_setup.update({'type': project_type})
[docs] def gen_pro_setup(self, verbose=False): ''' Generate AVR8 project setup. :param verbose: enable/disable verbose option. :type verbose: <bool> :return: boolean status, True (success) | False. :rtype: <bool> :exceptions: None ''' verbose_message( AVR8Setup.GEN_VERBOSE, verbose, 'generate project', self.__project_setup['type'], self.__project_setup['name'] ) yml2obj, status, statuses = Yaml2Object( '{0}{1}'.format( TemplateDir.setup_conf_dir(verbose), TemplateType.setup_template_type( self.__project_setup['type'], verbose ) ) ), False, [] if bool(yml2obj): pro_cfg, project_data = yml2obj.read_configuration(), {} templates = pro_cfg['templates'].split(' ') modules = pro_cfg['modules'].split(' ') project_data['name'] = self.__project_setup['name'] project_data['type'] = self.__project_setup['type'] project_data['mcu'] = self.__mcu_sel.choose_mcu(verbose=verbose) project_data['osc'] = self.__fosc_sel.choose_osc(verbose=verbose) self.__writer.pro_dir = self.__project_setup['name'] for template, module in zip(templates, modules): project_data['template'] = self.__reader.read( template_file='{0}{1}/{2}'.format( TemplateDir.setup_template_dir(verbose), self.__project_setup['type'], template ), verbose=verbose ) project_data['module'] = ModuleType.pre_process_module( self.__project_setup['type'], self.__project_setup['name'], module, verbose=verbose ) statuses.append( self.__writer.write(project_data, verbose=verbose) ) if all(statuses) and len(templates) == len(statuses): status = True return status
def __str__(self): ''' Dunder method for AVR8Setup. :return: object in a human-readable format. :rtype: <str> :exceptions: None ''' return '{0} ({1}, {2}, {3}, {4}, {5})'.format( self.__class__.__name__, str(self.__mcu_sel), str(self.__fosc_sel), str(self.__reader), str(self.__writer), str(self.__project_setup) )