refactor add and define remove command
This commit is contained in:
parent
3fd0e021c5
commit
ca8b6ff7d6
|
@ -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()
|
||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue