Add SAR script for pagure
Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
This commit is contained in:
parent
12ba282425
commit
8b195f8bd6
3 changed files with 157 additions and 0 deletions
|
@ -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
|
||||
|
|
145
roles/pagure/frontend/files/pagure_sar.py
Normal file
145
roles/pagure/frontend/files/pagure_sar.py
Normal 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())
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue