Beispiel #1
0
def process_queue():
    from django.utils.translation import ugettext as _
    from common.utils.lock import LockException
    from common.i18n import UserLanguage
    from django.template.loader import render_to_string
    from django.core.mail import send_mail
    from djangopm.utils import send_pm
    
    count = 0
    erc = 0
    submits = {}
    # group by project and user
    files = POFileSubmitDeferred.objects.get_ordered()
    for sf in files:
        project = sf.filesubmit.pofile.release.project.slug
        userkey = sf.user.username
        if not submits.has_key(project):
            submits[project] = {userkey: UserFiles(sf.user, sf.repo_user, sf.repo_pwd)}
        elif not submits[project].has_key(userkey):
            submits[project][userkey] = UserFiles(sf.user, sf.repo_user, sf.repo_pwd)
        submits[project][userkey].add_files(sf.filesubmit, sf, sf.message)
        sf.lock()
        
    for project in submits.values():
        for userfile in project.values():
            c = SubmitClient(userfile.files,
                             userfile.user,
                             userfile.repo_user,
                             userfile.repo_pwd,
                             userfile.message)
            try:
                count += 1
                c.run(True)
                # if success the file is removed when the fk gets removed.
            except LockException, e:
                logger.warn('Project %s is currently locked.' % project)
                erc += 1
                for sf in userfile.deffiles: sf.lock(False)
            except Exception, e:
                for sf in userfile.deffiles:
                    try:
                        sf.delete()
                    except Exception:
                        pass
                erc += 1
                logger.error(e)
                logger.error(traceback.format_exc())

                # send mail
                try:
                    with UserLanguage(userfile.user) as user_lang:
                        subject = getattr(settings, 'EMAIL_SUBJECT_PREFIX','') + _("File submit failed")
                        message = render_to_string('updater/commitfail.mail', {'error': smart_unicode(e)})
                        send_mail(subject, message, None, [userfile.user.email])
                except Exception, e:
                    logger.error(str(e))
Beispiel #2
0
def __perform_commit(**kw):
    request = kw.pop('request',None)
    c = SubmitClient(**kw)
    try:
        c.run()
        msg = ungettext('File submitted.',
                        'Files submitted.', len(submits))
        if request is not None:
            messages.success(request, message=msg)
    except SubmitException, se:
        logger.error(se)
        if request is not None:
            messages.error(request, message=_("Submit failed. Reason: %s") % smart_unicode(e))
        else:
            if len(se.files) > 0 and deferredhandler.deferred_running:
                logger.info("%d files added to deferred handler because they were locked at this moment" % len(se.files))
                deferredhandler.add_submits(se.files, user, repo_user, repo_pass, message)
            else:
                kw['user'].email_user("Submit failed", message=smart_unicode(e))
        return False