def ensure_indexes()

in src/main.py [0:0]


    def ensure_indexes(self, model: 'BaseModel'):
        table_name = model.Meta.table_name
        _LOG.info(f'Going to check indexes for {table_name}')
        collection = model.mongodb_handler().mongodb.collection(table_name)
        existing = collection.index_information()
        for name in self._exceptional_indexes():
            existing.pop(name, None)
        needed = {}
        for name, h, r in self._iter_all_indexes(model):
            needed[name] = [(h, self.hash_key_order)]
            if r:
                needed[name].append((r, self.range_key_order))
        to_create = []
        to_delete = set()
        for name, data in existing.items():
            if name not in needed:
                to_delete.add(name)
                continue
            # name in needed so maybe the index is valid, and we must keep it
            # or the index has changed, and we need to re-create it
            if data.get('key', []) != needed[name]:  # not valid
                to_delete.add(name)
                to_create.append(IndexModel(keys=needed[name], name=name))
            needed.pop(name)
        for name, keys in needed.items():  # all that left must be created
            to_create.append(IndexModel(keys=keys, name=name))
        for name in to_delete:
            _LOG.info(f'Going to remove index: {name}')
            collection.drop_index(name)
        if to_create:
            _message = ','.join(
                json.dumps(i.document, separators=(',', ':'))
                for i in to_create
            )
            _LOG.info(f'Going to create indexes: {_message}')
            collection.create_indexes(to_create)