refactor add and define remove command

This commit is contained in:
Doug Hellmann 2014-10-30 12:35:57 -04:00
parent 3fd0e021c5
commit ca8b6ff7d6
3 changed files with 62 additions and 12 deletions

View File

@ -2,10 +2,11 @@ import logging
import os
from aeromancer.db.models import *
from aeromancer import project
from cliff.command import Command
from cliff.lister import Lister
from sqlalchemy.orm.exc import NoResultFound
class Add(Command):
"(Re)register a project to be scanned"
@ -25,17 +26,9 @@ class Add(Command):
def take_action(self, parsed_args):
session = self.app.get_db_session()
for project in parsed_args.project:
project_path = os.path.join(self.app.options.repo_root, project)
query = session.query(Project).filter(Project.name == project)
try:
proj_obj = query.one()
proj_obj.path = project_path
self.log.info('updating project %s from %s', project, project_path)
except NoResultFound:
proj_obj = Project(name=project, path=project_path)
self.log.info('adding project %s from %s', project, project_path)
session.add(proj_obj)
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()
@ -47,3 +40,26 @@ class List(Lister):
query = session.query(Project).order_by(Project.name)
return (('Name', 'Path'),
((p.name, p.path) for p in query.all()))
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()

33
aeromancer/project.py Normal file
View File

@ -0,0 +1,33 @@
import logging
from aeromancer.db.models import Project
from sqlalchemy.orm.exc import NoResultFound
LOG = logging.getLogger(__name__)
def add_or_update(session, name, path):
"""Create a new project definition or update an existing one"""
query = session.query(Project).filter(Project.name == name)
try:
proj_obj = query.one()
proj_obj.path = path
LOG.info('updating project %s from %s', name, path)
except NoResultFound:
proj_obj = Project(name=name, path=path)
LOG.info('adding project %s from %s', name, path)
session.add(proj_obj)
return proj_obj
def remove(session, name):
"""Delete stored data for the named project"""
query = session.query(Project).filter(Project.name == name)
try:
proj_obj = query.one()
LOG.info('removing project %s', name)
except NoResultFound:
return
session.delete(proj_obj)

View File

@ -52,3 +52,4 @@ console_scripts =
aeromancer.cli =
add = aeromancer.cli.project:Add
list = aeromancer.cli.project:List
remove = aeromancer.cli.project:Remove