parent
97ff20c35a
commit
ba8656eb9f
|
@ -170,3 +170,7 @@ class Models:
|
|||
'overwrite': fields.Boolean(required=False, default=False, description="Set to true, to modify all existing entries with new data."),
|
||||
'hesitations': fields.List(fields.Nested(self.input_batch_entry)),
|
||||
})
|
||||
self.response_model_tag_info = api.model('TagsInfo', {
|
||||
'tag': fields.String(description="The tag name (lowercased)", example="anarchism"),
|
||||
'count': fields.Integer(description="The amount of instances tagged with this tag", example="5"),
|
||||
})
|
|
@ -5,6 +5,24 @@ from fediseer.consts import MAX_TAGS
|
|||
|
||||
class Tags(Resource):
|
||||
|
||||
get_parser = reqparse.RequestParser()
|
||||
get_parser.add_argument("Client-Agent", default="unknown:0:unknown", type=str, required=False, help="The client name and version.", location="headers")
|
||||
|
||||
@api.expect(get_parser)
|
||||
@api.marshal_with(models.response_model_tag_info, code=200, description='Tag counts', as_list=True)
|
||||
@api.response(400, 'Bad Request', models.response_model_error)
|
||||
@api.response(401, 'Invalid API Key', models.response_model_error)
|
||||
@api.response(403, 'Access Denied', models.response_model_error)
|
||||
|
||||
def get(self):
|
||||
'''Display all known tags (converted to lowercase)
|
||||
And count how many times they've been used
|
||||
'''
|
||||
self.args = self.get_parser.parse_args()
|
||||
rows_dict = database.get_tag_counts()
|
||||
tags = [{"tag":tag, "count": rows_dict[tag]} for tag in rows_dict]
|
||||
return tags,200
|
||||
|
||||
put_parser = reqparse.RequestParser()
|
||||
put_parser.add_argument("apikey", type=str, required=True, help="The sending instance's API key.", location='headers')
|
||||
put_parser.add_argument("Client-Agent", default="unknown:0:unknown", type=str, required=False, help="The client name and version.", location="headers")
|
||||
|
|
|
@ -540,4 +540,15 @@ def count_instance_tags(instance_id):
|
|||
query = InstanceTag.query.filter(
|
||||
InstanceTag.instance_id == instance_id,
|
||||
)
|
||||
return query.count()
|
||||
return query.count()
|
||||
|
||||
def get_tag_counts():
|
||||
query = db.session.query(
|
||||
func.lower(InstanceTag.tag).label('tag'),
|
||||
func.count().label('tag_count')
|
||||
).group_by(InstanceTag.tag)
|
||||
|
||||
result = query.all()
|
||||
|
||||
tag_counts = {row.tag: row.tag_count for row in result}
|
||||
return tag_counts
|
Loading…
Reference in New Issue