def fetchData(self, buildingName: str, startDateTime: str, endDateTime: str): collection = TimeSeriesDataModel.switch_collection( TimeSeriesDataModel(), buildingName) object = QuerySet(TimeSeriesDataModel, collection._get_collection()) iso = time.strptime(startDateTime, "%Y-%m-%d %H:%M") startDateTime = datetime.datetime(iso.tm_year, iso.tm_mon, iso.tm_mday, iso.tm_hour, iso.tm_min, iso.tm_sec) iso = time.strptime(endDateTime, "%Y-%m-%d %H:%M") endDateTime = datetime.datetime(iso.tm_year, iso.tm_mon, iso.tm_mday, iso.tm_hour, iso.tm_min, iso.tm_sec) results = object.aggregate(*[{ '$match': { 'data.timeStamp': { '$gte': startDateTime, '$lte': endDateTime } } }]) res = [] for doc in results: for data in doc['data']: if data['timeStamp'] >= startDateTime and data[ 'timeStamp'] <= endDateTime: res.append(data) return res
def drop_database_and_reconnect(self, reconnect=True): disconnect() self.db.drop_database(self.db_name) # Mongoengine sometimes doesn't recreate unique indexes # in between test runs, adding the below 'reset' to fix this # https://github.com/hmarr/mongoengine/issues/422 QuerySet._reset_already_indexed() if reconnect: self.db = connect(self.db_name)
def get_user(member: discord.Member, server: discord.Guild, opp=None): server_group = Users.switch_collection(Users(), f"{server.id}") server_objects = QuerySet(Users, server_group._get_collection()) response = None if opp is None: response = server_objects.filter(discord_id=member.id).first() if opp == "q": response = server_objects return response
def _qs(self): """ Returns the queryset to use for updating / reloading / deletions """ if not hasattr(self, '__objects'): self.__objects = QuerySet(self, self._get_collection()) return self.__objects
def _cleanup(): """Reset indexes, clean all connections cached in the _document_registry. Drop databases """ from mongoengine.queryset import QuerySet from mongoengine.base import _document_registry QuerySet._reset_already_indexed() for k, doc in _document_registry.items(): if not hasattr(doc, '_get_collection'): continue if doc._meta.get('abstract', False): continue col = doc._get_collection() col.database.connection.drop_database(col.database.name)
def addDataToDoc(self, id: int, buildingName: str, dataLogger: str, data: SON): collection = TimeSeriesDataModel.switch_collection( TimeSeriesDataModel(), buildingName) object = QuerySet(TimeSeriesDataModel, collection._get_collection()) if (object.filter( Q(_id=id) & Q(buildingName=buildingName) & Q(dataLogger=dataLogger)).count() == 1 ): #only one document must exist print("document data exists") d1 = Data(timeStamp=data['timeStamp'], kvarh=data['kvarh'], kwh=data['kwh']) object(_id = id,buildingName = buildingName, dataLogger=dataLogger)\ .update(push__data=d1) else: self.addDocument(id, buildingName, dataLogger) self.addDataToDoc(id, buildingName, dataLogger, data)
def paginate_queryset(self, queryset: QuerySet) -> QuerySet: """Paginate queryset""" if self.sort: order = "-" if self.reverse else "+" res = queryset.order_by(order + self.sort) else: res = queryset res = res.skip(self.skip) if self.limit: res = res.limit(self.limit) self.count = res.count() return res
def update_variant(qs: QuerySet, variant: Union[VariantSheep, VariantGoat], location: Location): """Update an existing variant (if necessary)""" record = qs.get() logger.debug(f"found {record} in database") # check chip_name in variant list record = update_chip_name(variant, record) # I chose to not update other values, I suppose they be the same # However check for locations check_location(location, record)
def test_transform_query(self): """Ensure that the _transform_query function operates correctly. """ self.assertEqual(QuerySet._transform_query(name="test", age=30), {"name": "test", "age": 30}) self.assertEqual(QuerySet._transform_query(age__lt=30), {"age": {"$lt": 30}}) self.assertEqual(QuerySet._transform_query(age__gt=20, age__lt=50), {"age": {"$gt": 20, "$lt": 50}}) self.assertEqual(QuerySet._transform_query(age=20, age__gt=50), {"age": 20}) self.assertEqual(QuerySet._transform_query(friend__age__gte=30), {"friend.age": {"$gte": 30}}) self.assertEqual(QuerySet._transform_query(name__exists=True), {"name": {"$exists": True}})
def test_transform_query(self): """Ensure that the _transform_query function operates correctly. """ self.assertEqual(QuerySet._transform_query(name='test', age=30), {'name': 'test', 'age': 30}) self.assertEqual(QuerySet._transform_query(age__lt=30), {'age': {'$lt': 30}}) self.assertEqual(QuerySet._transform_query(age__gt=20, age__lt=50), {'age': {'$gt': 20, '$lt': 50}}) self.assertEqual(QuerySet._transform_query(age=20, age__gt=50), {'age': 20}) self.assertEqual(QuerySet._transform_query(friend__age__gte=30), {'friend.age': {'$gte': 30}}) self.assertEqual(QuerySet._transform_query(name__exists=True), {'name': {'$exists': True}})
def updateDataInDoc(self, id: int, buildingName: str, dataLogger: str, data={ 'kwh': False, 'kvarh': False, 'value': -1, 'timestamp': 0 }): collection = TimeSeriesDataModel.switch_collection( TimeSeriesDataModel(), buildingName) object = QuerySet(TimeSeriesDataModel, collection._get_collection()) iso = time.strptime(data['timestamp'], "%Y-%m-%d %H:%M") if (object.filter( Q(_id=id) & Q(buildingName=buildingName) & Q(dataLogger=dataLogger) & Q(data__timeStamp=datetime.datetime( iso.tm_year, iso.tm_mon, iso.tm_mday, iso.tm_hour, iso.tm_min, iso.tm_sec))).count() > 0): if data['kwh'] and not data['kvarh']: object.filter( Q(_id=id) & Q(buildingName=buildingName) & Q(dataLogger=dataLogger) & Q(data__timeStamp=datetime.datetime( iso.tm_year, iso.tm_mon, iso.tm_mday, iso.tm_hour, iso.tm_min, iso.tm_sec))).update( set__data__S__kwh=data['value']) if not data['kwh'] and data['kvarh']: object.filter( Q(_id=id) & Q(buildingName=buildingName) & Q(dataLogger=dataLogger) & Q(data__timeStamp=datetime.datetime( iso.tm_year, iso.tm_mon, iso.tm_mday, iso.tm_hour, iso.tm_min, iso.tm_sec))).update( set__data__S__kvarh=data['value'])
def _qs(self): """Return the default queryset corresponding to this document.""" if not hasattr(self, '__objects'): self.__objects = QuerySet(self, self._get_collection()) return self.__objects
def _switch_table_and_return_query_set(self, collection, new_name): new_collection = collection.switch_collection(collection(), new_name) new_objects = QuerySet(collection,new_collection._get_collection()) return new_objects
def get_query_set(self): """Returns a new QuerySet object. Subclasses can override this method to easily customize the behavior of the Manager. """ return QuerySet(self.model, self.model._get_collection())
def get_leaderboard_results(field, server): server_group = Users.switch_collection(Users(), f"{server.id}") server_objects = QuerySet(Users, server_group._get_collection()) responses = server_objects[:10]().order_by(f"-{field}") return responses