【发布时间】:2015-09-03 17:49:43
【问题描述】:
create_assessment 中的我的 test.py 文件(以及所有 CRUD 操作)正在运行,例如填充我创建的database。但是,用于与数据库交互的ArgParse 命令行在create_assessment 中由于category 区域而失败。 Assessment-Category 共享多对多关系。
我认为问题是由于解析器的category 行(如TracebackError 所示,但我无法解决这个难题。categories 确实存在于db 中,解析器无法识别类别,而是在 test.py 文件中识别它们。可能是 args = parser.parse_args() 解析不正确。
错误:
(venv)acks-MacBook-Pro:notssdb ack$ notssdb-cmd create_assessment 'Learning new things' 'this' dancinglady 'movie' ['Bats', 'Development', 'Swinging at nothing']
usage: API_ArgParse [-h]
{create_user,retrieve_user,update_user,update_user_lastname,delete_user,create_assessment,retrieve_assessment,update_assessment,delete_assessment,create_video,retrieve_video,update_video,update_video_url,delete_video,create_category,retrieve_category,update_category,delete_category,create_element,retrieve_element,update_element,delete_element,create_assessment_results,retrieve_assessment_results,delete_assessment_results,create_category_rating,retrieve_category_rating,update_category_rating,delete_category_rating,create_element_rating,retrieve_element_rating,update_element_rating,delete_element_rating,create_comment,retrieve_comment,update_comment,delete_comment}
...
API_ArgParse: error: unrecognized arguments: Development, Swinging at nothing]
添加了解析器=配置。
代码:
parser = argparse.ArgumentParser(prog='API_ArgParse', description='Create, Read, Update, and Delete (CRUD) Interface Commands for NOTSSdb')
subparsers = parser.add_subparsers(dest='cmd', title='subcommands', description='type subcommand name with -h for more details : e.g. notssdb-cmd create_user -h', help='additional help')
api = ConvenienceAPI()
# Create command for 'assessment'
create_parser = subparsers.add_parser('create_assessment', help='create an assessment')
create_parser.add_argument('name', type=str, help='name of the assessment')
create_parser.add_argument('text', type=str, help='assessment text')
create_parser.add_argument('username', type=str, help='name of user')
create_parser.add_argument('videoname', type=str, help='name of video')
create_parser.add_argument('category_names', type=str, help='list all category names')#THIS LINE
# Parse the arguments
args = parser.parse_args()
api = ConvenienceAPI()
api_method = getattr(api, args.cmd)
arg_dict = vars(args)
del arg_dict['cmd']
api_method(**arg_dict)
带有类别检索的 Create_assessment 方法(convenience.py - 继承基):
class ConvenienceAPI(BaseAPI):
def create_assessment(self, name, text, username, videoname, category_names):
user = self.retrieve_user(username)
video = self.retrieve_video(videoname)
cat_objects = [self.retrieve_category(category_name) for category_name in category_names]
return super(ConvenienceAPI, self).create_assessment(name, text, user, video, cat_objects)
类别的检索方法(base.py):
def retrieve_category(self, something_unique):
if isinstance(something_unique, int):
return self.session.query(Category).\
filter(Category.category_id == something_unique).all() # multiple categories
elif isinstance(something_unique, basestring):
print(something_unique) # added
return self.session.query(Category).\
filter(Category.category_name == something_unique).one()
工作 test.py 文件示例:
api.create_assessment('How to be a leader', 'better decisions', 'wizard', 'good leadership', ['Leadership', 'Decision-Making', 'Teamwork and Communication', 'Situation Awareness'])
【问题讨论】:
标签: python oop sqlalchemy argparse traceback