def end_at(self, document_fields: dict) -> Query:
     query = Query(self, end_at=(document_fields, True))
     return query
 def end_before(self, document_fields: dict) -> Query:
     query = Query(self, end_at=(document_fields, False))
     return query
 def offset(self, offset: int) -> Query:
     query = Query(self, offset=offset)
     return query
 def start_after(self, document_fields: dict) -> Query:
     query = Query(self, start_at=(document_fields, False))
     return query
 def limit(self, limit_amount: int) -> Query:
     query = Query(self, limit=limit_amount)
     return query
 def order_by(self, key: str, direction: Optional[str] = None) -> Query:
     query = Query(self, orders=[(key, direction)])
     return query
 def where(self, field: str, op: str, value: Any) -> Query:
     query = Query(self, field_filters=[(field, op, value)])
     return query
 def end_before(
         self,
         document_fields_or_snapshot: Union[dict,
                                            DocumentSnapshot]) -> Query:
     query = Query(self, end_at=(document_fields_or_snapshot, False))
     return query
 def start_after(
         self,
         document_fields_or_snapshot: Union[dict,
                                            DocumentSnapshot]) -> Query:
     query = Query(self, start_at=(document_fields_or_snapshot, False))
     return query