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))
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