def mail_queue_expander(request): BATCH_SIZE=5 edition=db.get(request.form['edition']) if not edition: pass page=int(request.form.get('page',0)) subscriber_q=Query(subscriptions.models.Subscription, keys_only=True).filter('site =', edition.site).filter('active =', True) if request.form.has_key('cursor'): subscriber_q=subscriber_q.with_cursor(request.form['cursor']) subscribers=subscriber_q.fetch(BATCH_SIZE) if not subscribers: edition.status='complete' edition.put() return task=Task(params={'edition':edition.key(), 'cursor': subscriber_q.cursor(), 'page':page+1}, name="%s-%s-%s-%s" %(edition.site.slug, edition.issue_num,edition.publish_after.strftime("%Y%j%H%M-%S"), page+1) ) try: MailQueueExpander.add(task) except (TaskAlreadyExistsError, TombstonedTaskError): raise for sub in subscribers: def _tx(): pending_email=PendingEmail(subscription=sub, edition=edition) db.put(pending_email) SendNewsletter.add(Task(params={'pending_email':pending_email.key()}), transactional=True) db.run_in_transaction_custom_retries(10,_tx)
def migrate_events(request): try: if request.method == 'POST': set_namespace('') logging.warning("namespace: %s" % get_namespace()) cursor = request.POST.get('cursor') old_site = db.get(db.Key(request.POST.get('old_site'))) logging.warning("old site: %s" % old_site) #q=Event.all().filter('site =', old_site) q = Query(Event, namespace='').filter('site = ', old_site) if cursor: q = q.with_cursor(cursor) events = q.fetch(1) logging.warning(events) set_namespace(request.POST.get('new_namespace')) new_site = db.get(db.Key(request.POST.get('new_site'))) if events: taskqueue.add( url='/admin/migrate-events/', params={ 'new_namespace': request.POST.get('new_namespace'), 'old_site': old_site.key(), 'new_site': new_site.key(), 'cursor': q.cursor() }, ) for event in events: event.site = new_site #new_event.site=new_site if event.source: event.source = ICalendarSource.all().filter( 'slug =', event.source.slug).get() if event.submitted_by: event.submitted_by = Profile.all().filter( 'slug =', event.submitted_by.slug).get() if event.approved_by: event.approved_by = Profile.all().filter( 'slug =', event.approved_by.slug).get() new_event = clone_event(event, key_name=event.key().name()) #event.delete() new_event.put() except Exception, e: logging.error("%s in \n%s" % (traceback.format_exc(), str(request.POST)))
def migrate_events(request): try: if request.method == 'POST': set_namespace('') logging.warning("namespace: %s" % get_namespace()) cursor=request.POST.get('cursor') old_site=db.get(db.Key(request.POST.get('old_site'))) logging.warning("old site: %s" % old_site) #q=Event.all().filter('site =', old_site) q=Query(Event, namespace='').filter('site = ',old_site) if cursor: q=q.with_cursor(cursor) events= q.fetch(1) logging.warning(events) set_namespace(request.POST.get('new_namespace')) new_site=db.get(db.Key(request.POST.get('new_site'))) if events: taskqueue.add(url='/admin/migrate-events/', params={'new_namespace':request.POST.get('new_namespace'), 'old_site':old_site.key(), 'new_site':new_site.key(), 'cursor':q.cursor() },) for event in events: event.site=new_site #new_event.site=new_site if event.source: event.source=ICalendarSource.all().filter('slug =', event.source.slug).get() if event.submitted_by: event.submitted_by=Profile.all().filter('slug =', event.submitted_by.slug).get() if event.approved_by: event.approved_by=Profile.all().filter('slug =', event.approved_by.slug).get() new_event= clone_event(event, key_name=event.key().name()) #event.delete() new_event.put() except Exception,e: logging.error("%s in \n%s"% (traceback.format_exc(),str(request.POST)))
def mail_queue_expander(request): BATCH_SIZE = 5 edition = db.get(request.form['edition']) if not edition: pass page = int(request.form.get('page', 0)) subscriber_q = Query(subscriptions.models.Subscription, keys_only=True).filter('site =', edition.site).filter( 'active =', True) if request.form.has_key('cursor'): subscriber_q = subscriber_q.with_cursor(request.form['cursor']) subscribers = subscriber_q.fetch(BATCH_SIZE) if not subscribers: edition.status = 'complete' edition.put() return task = Task(params={ 'edition': edition.key(), 'cursor': subscriber_q.cursor(), 'page': page + 1 }, name="%s-%s-%s-%s" % (edition.site.slug, edition.issue_num, edition.publish_after.strftime("%Y%j%H%M-%S"), page + 1)) try: MailQueueExpander.add(task) except (TaskAlreadyExistsError, TombstonedTaskError): raise for sub in subscribers: def _tx(): pending_email = PendingEmail(subscription=sub, edition=edition) db.put(pending_email) SendNewsletter.add( Task(params={'pending_email': pending_email.key()}), transactional=True) db.run_in_transaction_custom_retries(10, _tx)