示例#1
0
 def build(specification: Specification = None) -> Optional[Collection]:
     if specification is None:
         return None
     elif isinstance(specification, AndSpecification):
         return {
             "$and": [
                 MongoSpecificationBuilder.build(spec)
                 for spec in specification.to_collection()
             ]
         }
     elif isinstance(specification, OrSpecification):
         return {
             "$or": [
                 MongoSpecificationBuilder.build(spec)
                 for spec in specification.to_collection()
             ]
         }
     elif isinstance(specification, InSpecification):
         return {specification.field: {"$in": specification.value}}
     elif isinstance(specification, EqualsSpecification):
         return {specification.field: {"$eq": specification.value}}
     elif isinstance(specification, LessThanSpecification):
         return {specification.field: {"$lt": specification.value}}
     elif isinstance(specification, LessThanEqualSpecification):
         return {specification.field: {"$lte": specification.value}}
     elif isinstance(specification, GreaterThanSpecification):
         return {specification.field: {"$gt": specification.value}}
     elif isinstance(specification, GreaterThanEqualSpecification):
         return {specification.field: {"$gte": specification.value}}
     elif isinstance(specification, RegexStringMatchSpecification):
         return {
             specification.field: {
                 "$regex": f".*{re.escape(specification.value)}.*"
             }
         }
     elif isinstance(specification.to_collection(), dict):
         return {
             "$and":
             [{
                 key: {
                     "$eq": value
                 }
             }
              for key, value in dict(specification.to_collection()).items()]
         }
     raise SpecificationNotMappedToMongo(
         f"Specification '{specification}' not mapped to Mongo query.")
示例#2
0
 def build(specification: Specification = None) -> Optional[Union[Collection, Q]]:
     if specification is None:
         return None
     elif isinstance(specification, AndSpecification):
         return reduce(
             lambda x, y: x & y,
             [
                 DjangoOrmSpecificationBuilder.create_q(
                     DjangoOrmSpecificationBuilder.build(spec)
                 )
                 for spec in specification.to_collection()
             ],
         )
     elif isinstance(specification, OrSpecification):
         return reduce(
             lambda x, y: x | y,
             [
                 DjangoOrmSpecificationBuilder.create_q(
                     DjangoOrmSpecificationBuilder.build(spec)
                 )
                 for spec in specification.to_collection()
             ],
         )
     elif isinstance(specification, InSpecification):
         return {f"{specification.field}__in": specification.value}
     elif isinstance(specification, EqualsSpecification):
         return {specification.field: specification.value}
     elif isinstance(specification, LessThanSpecification):
         return {f"{specification.field}__lt": specification.value}
     elif isinstance(specification, LessThanEqualSpecification):
         return {f"{specification.field}__lte": specification.value}
     elif isinstance(specification, GreaterThanSpecification):
         return {f"{specification.field}__gt": specification.value}
     elif isinstance(specification, GreaterThanEqualSpecification):
         return {f"{specification.field}__gte": specification.value}
     elif isinstance(specification, RegexStringMatchSpecification):
         return {
             f"{specification.field}__regex": rf".*{re.escape(specification.value)}.*"
         }
     elif isinstance(specification.to_collection(), dict):
         return specification.to_collection()
     raise SpecificationNotMappedToDjangoOrm(
         f"Specification '{specification}' not mapped to Django Orm query."
     )
示例#3
0
 def build(specification: Specification = None) -> Optional[Collection]:
     if specification is None:
         return None
     elif isinstance(specification, OrSpecification):
         return [
             SqlAlchemyOrmSpecificationBuilder.build(spec)
             for spec in specification.to_collection()
         ]
     elif isinstance(specification, AndSpecification):
         return {
             k: v
             for spec in specification.to_collection()
             if (i := SqlAlchemyOrmSpecificationBuilder.build(spec))
             for k, v in dict(i).items()
             if isinstance(i, dict)
         }
     elif isinstance(specification, EqualsSpecification):
         return {specification.field: specification.value}
     elif isinstance(specification.to_collection(), dict):
         return specification.to_collection()
     raise SpecificationNotMappedToSqlAlchemyOrm(
         f"Specification '{specification}' not mapped to SqlAlchemy Orm query."
     )