2014-01-18 1 views
0

저는 Wordpress 나 Drupal과 같은 일반적인 CMS 플랫폼의 'published/unpublished'기능을 모방하고 싶습니다.Google App Engine : cron을 사용하여 엔티티 만료 (또는 '게시 취소')

그래서 나는이 작업 (ndb.Model)가 :

class Job(ndb.Model): 
    title = ndb.StringProperty() 
    published = ndb.StringProperty(default = "on") 
    created = ndb.DateTimeProperty(auto_now_add = True) 
    expire = ndb.DateTimeProperty() 

NewJob 핸들러는 다음과 같습니다

class NewJob(JobHandler): 

    def get(self): 
     self.render('new-job.html') 

    def post(self): 
     title = self.request.get('title') 
     published = "on" 

     expire = datetime.datetime.now() + datetime.timedelta(days = 30) 

     if title: 
      j = Job(
       title = title, 
       published = published, 
       expire = expire, 
       created = created) 
      j.put() 
      self.redirect('/job/%s' % str(j.key.id())) 
     else: 
      self.redirect('/login') 

을 그리고 저장된 엔티티가이 같은 같습니다

Job(key=Key('Job', 5910974510923776), created=datetime.datetime(2014, 1, 17, 19, 0, 52, 12379), expire=datetime.datetime(2014, 2, 17, 19, 1, 52, 12174), published=u'on', title=u'Sous Chef') 

내가하고자하는 일은의 모든 Job 엔티티를 '게시 == "꺼짐"으로 설정하는 것입니다.시간 그래서 나는 cron.yaml

cron: 
- description: expire job entities after 30 days 
    url: /cron/job-expire 
    schedule: every day 00:00 

에서 작업을 설정 한 (현재) 오늘

입니다 ... 그리고 /cron/job-expire URL을 처리합니다 :

class CronJobExpire(BaseHandler): 
    def get(self): 
     jobs = Job.query(Job.published == "on").fetch() 
     now = datetime.datetime.now() 
     for job in jobs: 
      if job.expire < now or job.expire == now: 
       job.published = "off" 

위의 CronJobExpire 처리기의 목표는 다음과 같습니다.

현재 published == "on" 인 작업 엔터티 목록을 확인한 다음 expire 날짜가 'now'또는 '< now'인지 확인하고,이 값이 True이면 published == "off"을 설정하십시오.

이것은 작동하지 않습니다. 나는 문서를 따라 가고있다. 어떤 도움을 주시면 감사하겠습니다 - 감사합니다.

now = datetime.datetime.now()  
jobs = Job.query(Job.published == "on", Job.expire <= now).fetch() 
for job in jobs: 
    job.published = "off" 
    job.put() 

또는 API 호출을 줄이고, 따라서 속도를 개선하기 위해 :, 난 단지 만료 된 작업을 가져 오는 것이 좋습니다 또한

class CronJobExpire(BaseHandler): 
    def get(self): 
     jobs = Job.query(Job.published == "on").fetch() 
     now = datetime.datetime.now() 
     for job in jobs: 
      if job.expire <= now: 
       job.published = "off"  
       job.put() 

:

답변

2

당신은 당신이 변경하는 작업을 저장해야

now = datetime.datetime.now()  
jobs = Job.query(Job.published == "on", Job.expire <= now).fetch() 
for job in jobs: 
    job.published = "off" 
ndb.put_multi(jobs) 

마지막으로 Job.published를 부울로 만드는 것을 고려해보십시오.

published = ndb.BooleanProperty(default=True) 
+0

어리석은 나를. 추가 제안 해 주셔서 감사합니다. – puoyaahhh