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

49 lines
2.0 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()