# -*- coding: utf-8; -*-
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2023 Lance Edgar
#
# This file is part of Rattail.
#
# Rattail 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.
#
# Rattail 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
# Rattail. If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
"""
Generator for 'rattail' projects
"""
import os
import colander
from rattail.projects import PoserProjectGenerator
[docs]
class RattailProjectGenerator(PoserProjectGenerator):
"""
Generator for "generic" Rattail projects
"""
key = 'rattail'
def make_schema(self, **kwargs):
schema = super(RattailProjectGenerator, self).make_schema(**kwargs)
# TODO: get rid of these after templates are updated
schema.add(colander.SchemaNode(name='integrates_catapult',
typ=colander.Boolean()))
schema.add(colander.SchemaNode(name='integrates_corepos',
typ=colander.Boolean()))
schema.add(colander.SchemaNode(name='integrates_locsms',
typ=colander.Boolean()))
return schema
[docs]
def generate_project(self, output, context, **kwargs):
super(RattailProjectGenerator, self).generate_project(
output, context, **kwargs)
package = os.path.join(output, context['pkg_name'])
##############################
# fablib / machines
##############################
if context['uses_fabric']:
fablib = os.path.join(package, 'fablib')
os.makedirs(fablib)
self.generate('package/fablib/__init__.py.mako',
os.path.join(fablib, '__init__.py'),
context)
self.generate('package/fablib/python.py.mako',
os.path.join(fablib, 'python.py'),
context)
deploy = os.path.join(fablib, 'deploy')
os.makedirs(deploy)
python = os.path.join(deploy, 'python')
os.makedirs(python)
self.generate('package/fablib/deploy/python/premkvirtualenv.mako',
os.path.join(python, 'premkvirtualenv.mako'),
context)
machines = os.path.join(output, 'machines')
os.makedirs(machines)
server = os.path.join(machines, 'server')
os.makedirs(server)
self.generate('machines/server/README.md.mako',
os.path.join(server, 'README.md'),
context)
self.generate('machines/server/Vagrantfile.mako',
os.path.join(server, 'Vagrantfile'),
context)
self.generate('machines/server/fabenv.py.dist.mako',
os.path.join(server, 'fabenv.py.dist'),
context)
self.generate('machines/server/fabric.yaml.dist',
os.path.join(server, 'fabric.yaml.dist'))
self.generate('machines/server/fabfile.py.mako',
os.path.join(server, 'fabfile.py'),
context)
deploy = os.path.join(server, 'deploy')
os.makedirs(deploy)
poser = os.path.join(deploy, context['folder'])
os.makedirs(poser)
if context['integrates_catapult']:
self.generate('machines/server/deploy/poser/freetds.conf.mako_',
os.path.join(poser, 'freetds.conf.mako'))
self.generate('machines/server/deploy/poser/odbc.ini',
os.path.join(poser, 'odbc.ini'))
self.generate('machines/server/deploy/poser/rattail.conf.mako',
os.path.join(poser, 'rattail.conf.mako'),
context)
self.generate('machines/server/deploy/poser/cron.conf.mako',
os.path.join(poser, 'cron.conf'),
context)
self.generate('machines/server/deploy/poser/web.conf.mako',
os.path.join(poser, 'web.conf.mako'),
context)
self.generate('machines/server/deploy/poser/supervisor.conf.mako',
os.path.join(poser, 'supervisor.conf'),
context)
self.generate('machines/server/deploy/poser/overnight.sh.mako',
os.path.join(poser, 'overnight.sh'),
context)
self.generate('machines/server/deploy/poser/overnight-wrapper.sh.mako',
os.path.join(poser, 'overnight-wrapper.sh'),
context)
self.generate('machines/server/deploy/poser/crontab.mako',
os.path.join(poser, 'crontab.mako'),
context)
self.generate('machines/server/deploy/poser/upgrade.sh.mako',
os.path.join(poser, 'upgrade.sh'),
context)
self.generate('machines/server/deploy/poser/tasks.py.mako',
os.path.join(poser, 'tasks.py'),
context)
self.generate('machines/server/deploy/poser/upgrade-wrapper.sh.mako',
os.path.join(poser, 'upgrade-wrapper.sh'),
context)
self.generate('machines/server/deploy/poser/sudoers.mako',
os.path.join(poser, 'sudoers'),
context)
self.generate('machines/server/deploy/poser/logrotate.conf.mako',
os.path.join(poser, 'logrotate.conf'),
context)