Exemple #1
0
    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
Exemple #2
0
 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)
Exemple #3
0
 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)
Exemple #4
0
    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
Exemple #5
0
 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)
Exemple #7
0
 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)
Exemple #8
0
 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
Exemple #9
0
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)
Exemple #10
0
 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}})
Exemple #11
0
 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}})
Exemple #12
0
    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'])
Exemple #13
0
 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
Exemple #14
0
 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
Exemple #15
0
 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())
Exemple #16
0
 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