scrutiny/scrutiny/projects/management/commands/update-redmine.py

58 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
from django.conf import settings
from django.core.management.base import BaseCommand
import redmine
from redmine import Redmine
from scrutiny.projects.models import Module
from scrutiny.projects.utils import get_issue_deployment_status
class Command(BaseCommand):
def handle(self, verbosity, *args, **options):
redmine_server = Redmine(settings.REDMINE_URL, key=settings.REDMINE_API_KEY)
RESOLVED_ID = None
DEPLOYED_ID = None
for issue_status in redmine_server.issue_status.all():
if issue_status.name == u'Résolu (à déployer)':
RESOLVED_ID = issue_status.id
elif issue_status.name == u'Solution déployée':
DEPLOYED_ID = issue_status.id
for module in Module.objects.all():
if not module.repository_url:
continue
try:
issues = list(
redmine_server.issue.filter(project_id=module.redmine_project, status_id=RESOLVED_ID)
)
except redmine.exceptions.ResourceNotFoundError:
if verbosity > 1:
print('unknown redmine module:', module.name)
continue
for issue in issues:
deployment_status = get_issue_deployment_status(issue.id)
if not deployment_status.get('platforms'):
if verbosity > 1:
print(
' unknown status for https://dev.entrouvert.org/issues/%s (%s)'
% (issue.id, module.redmine_project)
)
continue
platforms_ok = [
x.rsplit(' / ', 1)[0]
for x in deployment_status['platforms'].keys()
if deployment_status['platforms'][x]['status'] == 'ok'
]
if settings.REDMINE_REFERENCE_PLATFORM in platforms_ok:
if verbosity > 0:
print(
'%s - https://dev.entrouvert.org/issues/%s' % (module.redmine_project, issue.id)
)
issue.status_id = DEPLOYED_ID
issue.save()