Add SAR script for pagure

Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
This commit is contained in:
Pierre-Yves Chibon 2018-05-16 15:09:52 +02:00
parent 12ba282425
commit 8b195f8bd6
3 changed files with 157 additions and 0 deletions

View file

@ -26,3 +26,8 @@ effective_cache_size: "512MB"
ssh_hostnames:
- pagure.io
# GDPR SAR variables - datanommer/datagrepper
sar_script: /usr/local/bin/pagure_sar.py
sar_script_user: git
sar_output_file: pagure.json

View file

@ -0,0 +1,145 @@
#!/usr/bin/python
from __future__ import unicode_literals, print_function
import json
import os
import sys
import sqlalchemy
import pagure.config
import pagure.lib
from pagure.lib import model
if 'PAGURE_CONFIG' not in os.environ \
and os.path.exists('/etc/pagure/pagure.cfg'):
os.environ['PAGURE_CONFIG'] = '/etc/pagure/pagure.cfg'
_config = pagure.config.reload_config()
session = pagure.lib.create_session(_config['DB_URL'])
def get_issue_users(session, user_id):
''' Return all pagure.lib.model.Issue related to the usernames provided
'''
query1 = session.query(
model.Issue.uid
).filter(
sqlalchemy.or_(
model.Issue.assignee_id == user_id,
model.Issue.user_id == user_id
)
)
query2 = session.query(
model.Issue.uid
).filter(
model.Issue.uid == model.IssueComment.issue_uid
).filter(
model.IssueComment.user_id == user_id
)
query = session.query(
model.Issue
).filter(
sqlalchemy.or_(
model.Issue.uid.in_(query1.subquery()),
model.Issue.uid.in_(query2.subquery())
)
).order_by(
model.Issue.date_created
)
return query.all()
def get_pr_users(session, user_id):
''' Return all pagure.lib.model.PullRequest related to the usernames provided
'''
query1 = session.query(
model.PullRequest.uid
).filter(
sqlalchemy.or_(
model.PullRequest.assignee_id == user_id,
model.PullRequest.user_id == user_id
)
)
query2 = session.query(
model.PullRequest.uid
).filter(
model.PullRequest.uid == model.PullRequestComment.pull_request_uid
).filter(
model.PullRequestComment.user_id == user_id
)
query = session.query(
model.PullRequest
).filter(
sqlalchemy.or_(
model.PullRequest.uid.in_(query1.subquery()),
model.PullRequest.uid.in_(query2.subquery())
)
).order_by(
model.PullRequest.date_created
)
return query.all()
def main():
''' Prints out all the pagure project and comment related to the username
specified in the SAR_USERNAME environment variable or the email
specified in the SAR_EMAIL environment variable..
'''
username = os.getenv('SAR_USERNAME')
email = os.getenv('SAR_EMAIL')
users = []
if username:
users.append(pagure.lib.search_user(session, username=username))
if email:
user_email = pagure.lib.search_user(session, email=email)
if user_email not in users:
users.apennd(user_email)
output = {}
for user in users:
temp = {}
temp['user_info'] = user.to_json(public=False)
projects = pagure.lib.search_projects(session, user.username)
projects = [
project.to_json()
for project in projects
]
temp['projects'] = projects
issues = get_issue_users(session, user.id)
issues = [
issue.to_json()
for issue in issues
]
temp['issues'] = issues
prs = get_pr_users(session, user.id)
prs = [
pr.to_json()
for pr in prs
]
temp['pull_requests'] = prs
output[user.username] = temp
session.remove()
print(json.dumps(
output, sort_keys=True, indent=4, separators=(',', ': ')
).encode('utf-8'))
if __name__ == '__main__':
sys.exit(main())

View file

@ -402,3 +402,10 @@
tags:
- config
- apache
- name: Add SAR script for pagure
copy: src=pagure_sar.py dest=/usr/local/bin/pagure_sar.py owner=git mode=0700
tags:
- SAR
- GDPR
- pagure