class Organisation(MongoModel): name = CharField() member = ListField(ReferenceField(User)) projects = ListField(ReferenceField(Project)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
def test_validation_on_initialization(self): # Initializing ReferenceField with a model instance raises exception. dummy = DummyReferenceModel(data='hello') with self.assertRaisesRegex(ValueError, "model must be a Model class or a string"): _ = ReferenceField(dummy) # Initializing ReferenceField with a model class is OK. _ = ReferenceField(DummyReferenceModel)
class IfcGroup(MongoModel): pid = IntegerField() ptype = CharField() name = CharField(blank=True) pset = ListField(ReferenceField(IfcSingleProperty)) version = ListField(ReferenceField(Version)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class ExcelFile(MongoModel): path = CharField() filename = CharField() project = ReferenceField(Project) created = DateTimeField() created_by = ReferenceField(User) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class ProductType(MongoModel): name = CharField() producer = CharField() connection = ListField(ReferenceField(ProductSignal)) power = ListField(ReferenceField(ProductPower)) shape = ReferenceField(IfcShapeRepresentation) verified = BooleanField(default=False) pset = ListField(ReferenceField(IfcSingleProperty)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class DataFrame(MongoModel): from_model = BooleanField() pset = BooleanField(blank=True) type = CharField(blank=True) name = CharField(blank=True) calculation = ListField(ReferenceField(Calculation)) version = ReferenceField(Version) excelfile = ReferenceField(ExcelFile) header = IntegerField(blank=True) sheetname = CharField(blank=True) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class ChangeFileModel(MongoModel): contents = CharField() change = ReferenceField(ChangeModel) prog_language = CharField(choices=constants.LANGUAGE_NAMES) file_path = CharField() file = ReferenceField(RepositoryFileModel) class Meta: pass #connection_alias = 'mongo_000' def __str__(self): return "ChangeFileMongoModel: [%s] :: %s :: %s :: %s" % ( self.change, self.file_path, self.prog_language, self.contents)
class IfcProductType(MongoModel): pid = IntegerField() guid = CharField() ptype = CharField() name = CharField(blank=True) predefined = CharField(blank=True) tag = CharField(blank=True) pset = ListField(ReferenceField(IfcSingleProperty)) material = ListField(ReferenceField(IfcMaterial)) shape = EmbeddedDocumentField(IfcShapeRepresentation) version = ListField(ReferenceField(Version)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class IfcBuilding(MongoModel): pid = IntegerField() guid = CharField() ptype = CharField(blank=True) name = CharField(blank=True) description = CharField(blank=True) longName = CharField(blank=True) site = ReferenceField(IfcSite) pset = ListField(ReferenceField(IfcSingleProperty)) shape = EmbeddedDocumentField(IfcShapeRepresentation) version = ListField(ReferenceField(Version)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class RepositoryModel(MongoModel): combo_id = CharField() name = CharField() namespace = ReferenceField(NamespaceModel) class Meta: #indexes = [IndexModel([('name', TEXT), ('namespace', TEXT)], unique=True)] #connection_alias = 'mongo_000' indexes = [IndexModel('combo_id', unique=True)] def __str__(self): return "RepositoryMongoModel: %s [%s]" % (self.name, self.namespace) @classmethod def build_combo_id(cls, name, namespace): if name is None: raise ValueError("Name can't be None") if namespace is None: raise ValueError("Namespace can't be None") return "%s/%s" % (namespace, name) def _build_combo_id(self): return self.build_combo_id(name=self.name, namespace=self.namespace.name) def set_combo_id(self): self.combo_id = self._build_combo_id() def save(self, cascade=None, full_clean=True, force_insert=False): self.set_combo_id() super().save(cascade=cascade, full_clean=full_clean, force_insert=force_insert)
class IfcProject(MongoModel): pid = IntegerField() guid = CharField() ptype = CharField() name = CharField(blank=True) longName = CharField(blank=True) description = CharField(blank=True) phase = CharField(blank=True) lengthUnit = CharField(blank=True) lengthPrefix = CharField(blank=True) dir = ListField(FloatField(blank=True)) pset = ListField(ReferenceField(IfcSingleProperty)) version = ListField(ReferenceField(Version)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class User(MongoModel): email = EmailField(primary_key=True) first_name = CharField() last_name = CharField() projects = ListField(ReferenceField(Project)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class IfcSite(MongoModel): pid = IntegerField() guid = CharField() ptype = CharField() name = CharField(blank=True) description = CharField(blank=True) refLatitude = ListField(blank=True) refLongitude = ListField(blank=True) refElevation = FloatField(blank=True) LandTitleNumber = CharField(blank=True) #quitself.SiteAddress = element.SiteAddress pset = ListField(ReferenceField(IfcSingleProperty)) project = ReferenceField(IfcProject) version = ListField(ReferenceField(Version)) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class RepositoryFileModel(MongoModel): combo_id = CharField() contents = CharField(required=False, blank=True) repository = ReferenceField(RepositoryModel) prog_language = CharField(choices=constants.LANGUAGE_NAMES) file_path = CharField() current_change_file = ReferenceField("ChangeFileModel", blank=True) class Meta: #indexes = [IndexModel([('file_path', TEXT), ('repository', TEXT)], unique=True)] #connection_alias = 'mongo_000' indexes = [IndexModel('combo_id', unique=True)] ''' class Meta: connection_alias = CODE_PERSISTENCE_BACKENDS[MONGODB_CONNECT_TO]['connection_profile'] ''' def __str__(self): return "RepositoryFileMongoModel: %s :: %s :: [%s] :: %s" % ( self.file_path, self.prog_language, self.repository, self.contents) @classmethod def build_combo_id(cls, file_path, repository): if file_path is None: raise ValueError("File_Path can't be None") if repository is None: raise ValueError("Repository can't be None") return "%s/%s" % (repository, file_path) def _build_combo_id(self): return self.build_combo_id( file_path=self.file_path, repository="%s/%s" % (self.repository.namespace.name, self.repository.name)) def set_combo_id(self): self.combo_id = self._build_combo_id() def save(self, cascade=None, full_clean=True, force_insert=False): self.set_combo_id() super().save(cascade=cascade, full_clean=full_clean, force_insert=force_insert)
class ChangeModel(MongoModel): change_id = CharField() comment = CharField() author = CharField() timestamp = TimestampField() repository = ReferenceField(RepositoryModel) parent_change = ReferenceField("ChangeModel", blank=True) class Meta: pass #connection_alias = 'mongo_000' def __str__(self): if isinstance(self.timestamp, Timestamp): timestamp = self.timestamp.as_datetime().__str__() else: timestamp = self.timestamp return "ChangeMongoModel: %s :: \"%s\" :: %s :: %s :: [%s]" % ( self.change_id, self.comment, self.author, timestamp, self.repository)
class Version(MongoModel): project = ReferenceField(Project) branch = CharField() version = IntegerField() class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app' def to_json(self): items = self.to_son() items['project'] = self.project.to_son() return items
class IfcProduct(MongoModel): pid = IntegerField(blank=True) guid = CharField(blank=True) ptype = CharField(blank=True) name = CharField(blank=True) description = CharField(blank=True) pset = ListField(ReferenceField(IfcSingleProperty)) group = ListField(ReferenceField(IfcGroup)) material = ListField(ReferenceField(IfcMaterial)) building = ListField(ReferenceField(IfcBuilding)) storey = ListField(ReferenceField(IfcStorey)) shape = EmbeddedDocumentField(IfcShapeRepresentation) space = ListField(ReferenceField(IfcSpace)) system = ListField(ReferenceField(IfcSystem)) productType = ReferenceField(IfcProductType) product = ReferenceField(ProductType) version = ListField(ReferenceField(Version)) filepath = CharField(blank=True) class Meta: write_concern = WriteConcern(j=True) connection_alias = 'my-app'
class TemporaryChangeFileModel(MongoModel): contents = CharField() repository = ReferenceField(RepositoryModel) language = CharField(choices=constants.LANGUAGE_NAMES) file_path = CharField() class Meta: pass #connection_alias = 'mongo_000' def __str__(self): return "TemporaryChangeFileMongoModel: [%s] :: %s :: %s :: %s" % ( self.repository, self.file_path, self.language, self.contents)
def __init__(self, model, on_delete=ReferenceField.DO_NOTHING, verbose_name=None, mongo_name=None, **kwargs): """ :parameters: - `verbose_name`: A human-readable name for the Field. - `mongo_name`: The name of this field when stored in MongoDB. - `field`: The Field instance of all items in this list. This needs to be an *instance* of a `MongoBaseField` subclass. .. seealso:: constructor for :class:`~pymodm.base.fields.MongoBaseField` """ super(ReferenceListField, self).__init__(field=ReferenceField(model, on_delete=on_delete), verbose_name=verbose_name, mongo_name=mongo_name, **kwargs) self._on_delete = on_delete
class SpaceFunction(MongoModel): space = ReferenceField(IfcSpace) text = CharField() signal = ListField(ReferenceField(ProductSignal))