def add_author_feature(author_features_context, request): author = author_features_context.author json_dict = request.json_body if not 'name' in json_dict: # TODO: better error request.response.status_int = 400 return {'error': 'missing required attribute "name"'} feature_name = json_dict['name'] feature = Feature.query_by_name(feature_name) if feature is None: # TODO: better error request.response.status_int = 404 return {'error': 'unknown feature %s' % feature_name} # get the max feature sequence for this author maxSequence, = tim_commons.db.Session().query(func.max(AuthorFeatureMap.sequence)). \ filter(AuthorFeatureMap.author_id == author.id).one() if not maxSequence: maxSequence = 0 afm = AuthorFeatureMap(author.id, feature.id, maxSequence + 1) try: tim_commons.db.Session().add(afm) tim_commons.db.Session().flush() logging.info("created author/feature link: %s -> %s", author.author_name, feature_name) except IntegrityError, e: request.response.status_int = 409 return {'error': e.message}
def set_default_feature(author_features_context, request): author = author_features_context.author feature_name = request.json_body['default_feature'] feature = Feature.query_by_name(feature_name) if feature is None: # TODO: better error request.response.status_int = 404 return {'error': 'unknown feature %s' % feature_name} # if a default already exists then remove it try: afd = tim_commons.db.Session().query(AuthorFeatureDefault).filter_by(author_id=author.id).one() tim_commons.db.Session().delete(afd) except NoResultFound: pass afd = AuthorFeatureDefault(author.id, feature.id) tim_commons.db.Session().add(afd) tim_commons.db.Session().flush() return {'author': author.author_name, 'default_feature': feature_name}