aeromancer/aeromancer/cli/project.py

81 lines
2.3 KiB
Python

import logging
import os
from aeromancer.db.models import *
from aeromancer import project
from cliff.command import Command
from cliff.lister import Lister
class Add(Command):
"(Re)register a project to be scanned"
log = logging.getLogger(__name__)
def get_parser(self, prog_name):
parser = super(Add, self).get_parser(prog_name)
parser.add_argument(
'project',
nargs='+',
default=[],
help=('project directory names under the project root, '
'for example: "stackforge/aeromancer"'),
)
return parser
def take_action(self, parsed_args):
session = self.app.get_db_session()
for project_name in parsed_args.project:
project_path = os.path.join(self.app.options.repo_root, project_name)
proj_obj = project.add_or_update(session, project_name, project_path)
session.commit()
class List(Lister):
"""Show the registered projects"""
log = logging.getLogger(__name__)
def take_action(self, parsed_args):
session = self.app.get_db_session()
query = session.query(Project).order_by(Project.name)
return (('Name', 'Path'),
((p.name, p.path) for p in query.all()))
class Rescan(Command):
"Rescan all known projects"
log = logging.getLogger(__name__)
def take_action(self, parsed_args):
session = self.app.get_db_session()
query = session.query(Project).order_by(Project.name)
for proj_obj in query.all():
project.update(session, proj_obj)
session.commit()
class Remove(Command):
"Remove a project from the database"
log = logging.getLogger(__name__)
def get_parser(self, prog_name):
parser = super(Remove, self).get_parser(prog_name)
parser.add_argument(
'project',
nargs='+',
default=[],
help=('project directory names under the project root, '
'for example: "stackforge/aeromancer"'),
)
return parser
def take_action(self, parsed_args):
session = self.app.get_db_session()
for project_name in parsed_args.project:
project.remove(session, project_name)
session.commit()