Пример #1
0
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}
Пример #2
0
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}