最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - Firestore - Querying a collection based on current time - Stack Overflow

programmeradmin4浏览0评论

I would like to retrieve a list of events stored in a Firestore collection in Python. I want to retrieve only future events (but I also want to keep past events up to 2 hours).

I also want to listen on the collection in case of changes on the future schedule.

The problem I'm facing is that when I run my script and my on_snapshot, the time with which I compare the “end” fields of my events is equal to the time when I ran the script. The datetime doesn't update itself.

MAX_EVENTS_SHOWN = 4

def on_events(doc_snapshot, changes, read_time):
  global next_sessions_shown, next_sessions

  try:
    next_sessions_shown.clear() 
    next_sessions.clear() 

    # on init and on change, same for loop is used
    all_docs = list(doc_snapshot) + [change.document for change in changes]

    # init events on screen
    for index, doc in enumerate(all_docs):
      data = doc.to_dict()

      # only show 4 future events
      if index <= MAX_EVENTS_SHOWN - 1:
        next_sessions_shown.append(doc.id)
        

      next_sessions.append(doc.id)


  except Exception as error:
      print_now(f"Error in on_events function: {error}")


if __name__ == '__main__':
  get_all_upcoming_events_fs_doc().on_snapshot(on_events)
_FS_CRM_ROOT = 'v3'
_FS_EVENTS = _FS_CRM_ROOT + '/events'

def get_all_upcoming_events_fs_doc():
  utc_plus_1 = timezone(timedelta(hours=1))

  # convert to UTC+1 (current local here)
  now = datetime.utcnow().replace(tzinfo=timezone.utc).astimezone(utc_plus_1)

  # 2H hours ago from now
  two_hours_ago = now - timedelta(hours=2)

  return db.collection(_FS_EVENTS).order_by("end").where(filter=FieldFilter("end", ">=", two_hours_ago))

I've already tried resetting the listener every minute with a thread, without success. I got an error message like: "Background thread did not exit".

Thank you in advance.

发布评论

评论列表(0)

  1. 暂无评论