Exemple #1
0
def get_model_references():
    """
    Build model reference map
    :return: [(model id, [(remote model, remote field), ..], ..]
    """
    from noc.lib.nosql import PlainReferenceField, ForeignKeyField
    from noc.core.model.fields import DocumentReferenceField
    from django.db.models import ForeignKey

    def add_ref(model, ref_model, ref_field):
        model_id = get_model_id(model)
        refs[model_id] += [(ref_model, ref_field)]

    refs = defaultdict(list)  # model -> [(ref model, ref field)]
    for model_id in iter_model_id():
        model = get_model(model_id)
        if not model:
            continue
        if is_document(model):
            # mongoengine document
            for fn in model._fields:
                f = model._fields[fn]
                if isinstance(f, PlainReferenceField):
                    add_ref(f.document_type, model_id, fn)
                elif isinstance(f, ForeignKeyField):
                    add_ref(f.document_type, model_id, fn)
        else:
            # Django model
            for f in model._meta.fields:
                if isinstance(f, ForeignKey):
                    add_ref(f.rel.to, model_id, f.name)
                elif isinstance(f, DocumentReferenceField):
                    add_ref(f.document, model_id, f.name)
    return [(m, refs[m]) for m in refs]
Exemple #2
0
 def handle(self, host=None, port=None, *args, **options):
     connect()
     db = get_db()
     collections = set(db.list_collection_names())
     for model_id in iter_model_id():
         model = get_model(model_id)
         if not model:
             self.die("Invalid model: %s" % model_id)
         if not is_document(model):
             continue
         # Rename collections when necessary
         legacy_collections = model._meta.get("legacy_collections", [])
         for old_name in legacy_collections:
             if old_name in collections:
                 new_name = model._meta["collection"]
                 self.print("[%s] Renaming %s to %s" %
                            (model_id, old_name, new_name))
                 db[old_name].rename(new_name)
                 break
         # Ensure only documents with auto_create_index == False
         if model._meta.get("auto_create_index", True):
             continue
         # Index model
         self.index_model(model_id, model)
     # Index datastreams
     self.index_datastreams()
     # Index GridVCS
     self.index_gridvcs()
     # Index mongo cache
     self.index_cache()
     # Index datasource cache
     self.index_datasource_cache()
     # @todo: Detect changes
     self.print("OK")
Exemple #3
0
def iter_references():
    for model_id in iter_model_id():
        model = get_model(model_id)
        if not model:
            continue
        if is_document(model):
            # MongoEngine document
            for fn in model._fields:
                f = model._fields[fn]
                if isinstance(f, PlainReferenceField):
                    yield f.document_type, model_id, fn
                elif isinstance(f, ForeignKeyField):
                    yield f.document_type, model_id, fn
        else:
            # Django model
            for f in model._meta.fields:
                if isinstance(f, ForeignKey):
                    yield f.remote_field.model, model_id, f.name
                elif isinstance(f, DocumentReferenceField):
                    yield f.document, model_id, f.name
Exemple #4
0
def test_iter_model_id():
    """
    Check iter_model_id is not empty
    """
    assert any(iter_model_id())
Exemple #5
0
 def build_modelid(self):
     return [{"id": x, "label": x} for x in sorted(iter_model_id())]
Exemple #6
0
def test_iter_model_id():
    """
    Check loader.iter_scripts() returns values
    """
    total_models = len(list(iter_model_id()))
    assert total_models > 0
Exemple #7
0
import operator
# Third-party modules
import pytest
# NOC modules
from noc.models import iter_model_id, get_model, get_model_id, is_document


def test_iter_model_id():
    """
    Check loader.iter_scripts() returns values
    """
    total_models = len(list(iter_model_id()))
    assert total_models > 0


@pytest.fixture(params=iter_model_id())
def model_id(request):
    return request.param


@pytest.mark.dependency(name="test_model_loading")
def test_model_loading(model_id):
    """
    Check model referred by id can be loaded
    :param model_id:
    :return:
    """
    model = get_model(model_id)
    assert model is not None, "Cannot load model %s" % model_id

Exemple #8
0
def get_documents():
    for model_id in iter_model_id():
        model = get_model(model_id)
        if model and is_document(model):
            yield model
Exemple #9
0
# See LICENSE for details
# ----------------------------------------------------------------------

# Python modules
from __future__ import absolute_import

# Third-party modules
import pytest

# NOC modules
from noc.models import get_model_id, get_model, iter_model_id
from .util import get_models, get_documents


@pytest.mark.dependency(name="test_model_loading")
@pytest.mark.parametrize("model_id", iter_model_id())
def test_model_loading(model_id):
    """
    Check model referred by id can be loaded
    :param model_id:
    :return:
    """
    model = get_model(model_id)
    assert model is not None, "Cannot load model %s" % model_id


@pytest.mark.dependency(name="test_model_id", depends=["test_model_loading"])
@pytest.mark.parametrize("model_id", iter_model_id())
def test_model_id(model_id):
    """
    Check model has same model_id as referred