Example #1
0
        return self

    def get_schema(self, name):
        if self.name != name:
            Log.error("This container only has table by name of {{name}}",
                      name=name)
        return self.schema

    def get_table(self, name):
        if self is name or self.name == name:
            return self
        Log.error("This container only has table by name of {{name}}",
                  name=name)


def _exec(code):
    try:
        temp = None
        exec("temp = " + code)
        return temp
    except Exception as e:
        Log.error("Could not execute {{code|quote}}", code=code, cause=e)


DUAL = ListContainer(name="dual",
                     data=[{}],
                     schema=Schema(table_name="dual",
                                   columns=UniqueIndex(keys=("name", ))))

export("jx_base.container", ListContainer)
Example #2
0
from mo_imports import export
from tests.modname_name_value1.bars import bar


def foo():
    bar()


export("tests.modname_name_value1.bars", "alt", foo)
Example #3
0
                },
                "else": True,
            },
            {
                "when": {
                    "gte": [{
                        "count": "nested_path"
                    }, 2]
                },
                "then": {
                    "ne": [
                        {
                            "first": {
                                "right": {
                                    "nested_path": 2
                                }
                            }
                        },
                        {
                            "literal": "."
                        },
                    ]
                },  # SECOND-LAST ELEMENT
                "else": True,
            },
        ]
    },
)

export("jx_base.expressions.query_op", Column)

# GET THE MACHINE METADATA
machine_metadata = dict_to_data({
    "pid":
    os.getpid(),
    "python":
    text(platform.python_implementation()),
    "os":
    text(platform.system() + platform.release()).strip(),
    "name":
    text(platform.node())
})


def raise_from_none(e):
    raise e


if PY3:
    exec("def raise_from_none(e):\n    raise e from None\n", globals(),
         locals())

export("mo_logs.startup", Log)
export("mo_logs.log_usingFile", Log)
export("mo_logs.log_usingMulti", Log)
export("mo_logs.log_usingThread", Log)

if not Log.main_log:
    Log.main_log = StructuredLogger_usingStream(STDOUT)
Example #5
0
        if self.is_value:
            return str(self.data)
        else:
            return str(self.data)

    def __int__(self):
        if self.is_value:
            return int(self.value)
        else:
            return int(self.data)

    def __float__(self):
        if self.is_value:
            v = self.value
            if v == None:
                return v
            else:
                return float(v)
        else:
            return float(self.data)

    def __data__(self):
        return Data(select=self.select,
                    edges=self.edges,
                    data={k: v.cube
                          for k, v in self.data.items()},
                    meta=self.meta)


export("jx_base.container", Cube)
Example #6
0
        self.term = term

    def __data__(self):
        return {"not": self.term.__data__()}

    def __eq__(self, other):
        if not is_op(other, NotOp):
            return False
        return self.term == other.term

    def vars(self):
        return self.term.vars()

    def map(self, map_):
        return self.lang[NotOp(self.term.map(map_))]

    def missing(self):
        return self.lang[self.term].missing()

    def invert(self):
        return self.lang[self.term].partial_eval()

    @simplified
    def partial_eval(self):
        return self.lang[self.term].invert()


export("jx_base.expressions.and_op", NotOp)
export("jx_base.expressions.exists_op", NotOp)
export("jx_base.expressions.expression", NotOp)
Example #7
0
            elif when is FALSE:
                pass
            else:
                whens.append(
                    WhenOp(when, **{"then": w.then.partial_eval(lang)}))
        else:
            whens.append((self.whens[-1]).partial_eval(lang))

        if len(whens) == 1:
            return whens[0]
        elif len(whens) == 2:
            return WhenOp(whens[0].when, **{
                "then": whens[0].then,
                "else": whens[1]
            })
        else:
            return CaseOp(whens)

    @property
    def type(self):
        types = set(w.then.type if is_op(w, WhenOp) else w.type
                    for w in self.whens)
        if len(types) > 1:
            return OBJECT
        else:
            return first(types)


export("jx_base.expressions.eq_op", CaseOp)
export("jx_base.expressions.first_op", CaseOp)
Example #8
0
        return FALSE

    def __call__(self, row=None, rownum=None, rows=None):
        return Null

    def __unicode__(self):
        return "null"

    def __str__(self):
        return b"null"

    @property
    def type(self):
        return IS_NULL

    def __hash__(self):
        return id(None)

    def __bool__(self):
        Log.error(
            "Detecting truthiness of NullOp is too confusing to be allowed")


NULL = NullOp()
TYPE_ORDER[NullOp] = 9
TYPE_ORDER[NULL] = 9

export("jx_base.expressions._utils", NULL)
export("jx_base.expressions.literal", NULL)
export("jx_base.expressions.expression", NULL)
es_and = expect("es_and")


class OrOp(OrOp_):
    def to_es(self, schema):

        if schema.snowflake.namespace.es_cluster.version.startswith("5."):
            # VERSION 5.2.x
            # WE REQUIRE EXIT-EARLY SEMANTICS, OTHERWISE EVERY EXPRESSION IS A SCRIPT EXPRESSION
            # {"bool":{"should"  :[a, b, c]}} RUNS IN PARALLEL
            # {"bool":{"must_not":[a, b, c]}} ALSO RUNS IN PARALLEL

            # OR(x) == NOT(AND(NOT(xi) for xi in x))
            output = es_not(
                es_and([
                    NotOp(t).partial_eval().to_es(schema) for t in self.terms
                ]))
            return output
        else:
            # VERSION 6.2+
            return es_or(
                [ES52[t].partial_eval().to_es(schema) for t in self.terms])


def es_or(terms):
    return dict_to_data({"bool": {"should": terms}})


export("jx_elasticsearch.es52.expressions.not_op", es_or)
export("jx_elasticsearch.es52.expressions.utils", OrOp)
Example #10
0
    """
    sum = 0
    for v in vals:
        yield sum, v
        sum += v


def reverse(vals):
    # TODO: Test how to do this fastest
    if not hasattr(vals, "len"):
        vals = list(vals)

    l = len(vals)
    output = [None] * l

    for v in unwrap(vals):
        l -= 1
        output[l] = v

    return to_data(output)


def countdown(vals):
    remaining = len(vals) - 1
    return [(remaining - i, v) for i, v in enumerate(vals)]


from jx_python.lists.aggs import is_aggs, list_aggs

export("jx_base.container", run)
Example #11
0
from jx_base.expressions import OrOp as OrOp_
from jx_bigquery.expressions._utils import BQLang, check
from jx_bigquery.sql import SQL_OR, sql_iso, JoinSQL
from mo_dots import wrap
from mo_imports import export


class OrOp(OrOp_):
    @check
    def to_bq(self, schema, not_null=False, boolean=False):
        return wrap(
            [
                {
                    "name": ".",
                    "sql": {
                        "b": JoinSQL(
                            SQL_OR,
                            [
                                sql_iso(BQLang[t].to_bq(schema, boolean=True)[0].sql.b)
                                for t in self.terms
                            ],
                        )
                    },
                }
            ]
        )


export("jx_bigquery.expressions._utils", OrOp)
Example #12
0
    def map(self, map_):
        return self

    def missing(self, lang):
        return FALSE

    def invert(self, lang):
        return TRUE

    def __call__(self, row=None, rownum=None, rows=None):
        return False

    def __unicode__(self):
        return "false"

    def __str__(self):
        return b"false"

    def __bool__(self):
        return False

    def __nonzero__(self):
        return False


FALSE = FalseOp()

export("jx_base.expressions._utils", FALSE)
export("jx_base.expressions.expression", FALSE)
export("jx_base.expressions.literal", FALSE)
# encoding: utf-8
#
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at http:# mozilla.org/MPL/2.0/.
#
# Contact: Kyle Lahnakoski ([email protected])
#

from __future__ import absolute_import, division, unicode_literals

from jx_base.expressions import FalseOp, extend
from mo_imports import export


@extend(FalseOp)
def to_es(self, schema):
    return MATCH_NONE


MATCH_NONE = {"bool": {"must_not": {"match_all": {}}}}

export("jx_elasticsearch.es52.expressions.utils", MATCH_NONE)
Example #14
0
            else:
                obj[path0] = old_value = {}

        _assign_to_null(old_value, path[1:], value)
    except Exception as e:
        raise e


def _split_field(field):
    """
    SIMPLE SPLIT, NO CHECKS
    """
    if field == ".":
        return []
    else:
        return [k.replace("\a", ".") for k in field.replace("\\.", "\a").split(".")]


def _setdefault(obj, key, value):
    """
    DO NOT USE __dict__.setdefault(obj, key, value), IT DOES NOT CHECK FOR obj[key] == None
    """
    v = obj.get(key)
    if v == None:
        obj[key] = value
        return value
    return v


export("mo_dots.lists", Null)
Example #15
0
                obj[path0] = old_value = {}

        _assign_to_null(old_value, path[1:], value)
    except Exception as e:
        raise e


def _split_field(field):
    """
    SIMPLE SPLIT, NO CHECKS
    """
    if field == ".":
        return []
    else:
        return [k.replace("\a", ".") for k in field.replace("\\.", "\a".replace("\b", "\\.")).split(".")]


def _setdefault(obj, key, value):
    """
    DO NOT USE __dict__.setdefault(obj, key, value), IT DOES NOT CHECK FOR obj[key] == None
    """
    v = obj.get(key)
    if v == None:
        obj[key] = value
        return value
    return v


export("mo_dots.lists", Null)
export("mo_dots.lists", "EMPTY", Null)
Example #16
0
    def invert(self, lang):
        return FALSE

    def __call__(self, row=None, rownum=None, rows=None):
        return True

    def __unicode__(self):
        return "true"

    def __str__(self):
        return b"true"

    def __bool__(self):
        return True

    def __rcontains__(self, superset):
        return self is superset

    def __nonzero__(self):
        return True


TRUE = TrueOp()


export("jx_base.expressions.literal", TRUE)
export("jx_base.expressions.false_op", TRUE)
export("jx_base.expressions._utils", TRUE)
export("jx_base.expressions.expression", TRUE)
Example #17
0
            if simple.type != BOOLEAN:
                simple = simple.exists()

            if simple is TRUE:
                return TRUE
            elif simple is FALSE:
                continue
            elif is_op(simple, OrOp):
                terms.extend([tt for tt in simple.terms if tt not in terms])
            elif is_op(simple, AndOp):
                ands.append(simple)
            elif simple not in terms:
                terms.append(simple)

        if ands:  # REMOVE TERMS THAT ARE MORE RESTRICTIVE THAN OTHERS
            for a in ands:
                for tt in a.terms:
                    if tt in terms:
                        break
                else:
                    terms.append(a)

        if len(terms) == 0:
            return FALSE
        if len(terms) == 1:
            return terms[0]
        return self.lang[OrOp(terms)]


export("jx_base.expressions.and_op", OrOp)
Example #18
0
from mo_imports import export
from tests.module_value2.bars import bar
from tests.module_value2 import bars


def foo():
    bar()


export(bars, foo)
Example #19
0
                value.path, None,
                AndOp([InOp([value.select, superset]),
                       value.where])).exists().partial_eval(lang)
        else:
            return (InOp([value, superset]))

    def __call__(self, row):
        return self.value(row) in self.superset(row)

    def missing(self, lang):
        return FALSE

    def invert(self, lang):
        this = self.partial_eval(lang)
        if is_op(this, InOp):
            inv = NotOp(BasicInOp([this.value, this.superset]))
            inv.simplified = True
            return OrOp([MissingOp(this.value), inv])
        else:
            return this.invert(lang)

    def __rcontains__(self, superset):
        if (is_op(self.value, Variable) and is_op(superset, MissingOp)
                and is_op(superset.value, Variable)
                and superset.value.var == self.value.var):
            return True
        return False


export("jx_base.expressions.eq_op", InOp)
Example #20
0
        return typer(self._value)

    def partial_eval(self, lang):
        return self

    def str(self):
        return str(self.value)


ZERO = Literal(0)
ONE = Literal(1)

literal_op_ids = tuple()


def register_literal(op):
    global literal_op_ids
    literal_op_ids = literal_op_ids + (op.get_id(), )


def is_literal(l):
    try:
        return l.get_id() in literal_op_ids
    except Exception:
        return False


export("jx_base.expressions._utils", Literal)
export("jx_base.expressions.expression", Literal)
export("jx_base.expressions.expression", is_literal)
Example #21
0
    sum = 0
    for v in vals:
        yield sum, v
        sum += v


def reverse(vals):
    # TODO: Test how to do this fastest
    if not hasattr(vals, "len"):
        vals = list(vals)

    l = len(vals)
    output = [None] * l

    for v in unwrap(vals):
        l -= 1
        output[l] = v

    return to_data(output)


def countdown(vals):
    remaining = len(vals) - 1
    return [(remaining - i, v) for i, v in enumerate(vals)]


from jx_python.lists.aggs import is_aggs, list_aggs

export("jx_base.container", run)
export("jx_python.containers.list", "jx")
Example #22
0
    def min_length(self):
        return 0

    def parseImpl(self, string, start, doActions=True):
        word_chars = self.parser_config.word_chars
        instrlen = len(string)
        if instrlen > 0 and start < instrlen:
            if string[start] in word_chars or string[start - 1] not in word_chars:
                raise ParseException(self, start, string)
        return ParseResults(self, start, start, [])

    def __regex__(self):
        return "+", self.parser_config.regex.pattern

export("mo_parsing.results", Token)
export("mo_parsing.results", Empty)

export("mo_parsing.core", Empty)
export("mo_parsing.core", StringEnd)
export("mo_parsing.core", Literal)
export("mo_parsing.core", Token)

export("mo_parsing.engine", Literal)
export("mo_parsing.engine", Token)

export("mo_parsing.enhancement", Token)
export("mo_parsing.enhancement", NoMatch)
export("mo_parsing.enhancement", Literal)
export("mo_parsing.enhancement", Keyword)
export("mo_parsing.enhancement", Word)
Example #23
0

class DateOp(Literal):
    date_type = NUMBER

    def __init__(self, term):
        if hasattr(self, "date"):
            return
        if is_text(term):
            self.date = term
        else:
            self.date = coalesce(term.get("literal"), term)
        v = unicode2Date(self.date)
        if isinstance(v, Date):
            Literal.__init__(self, v.unix)
        else:
            Literal.__init__(self, v.seconds)

    @classmethod
    def define(cls, expr):
        return cls.lang[DateOp(expr.get("date"))]

    def __data__(self):
        return {"date": self.date}

    def __call__(self, row=None, rownum=None, rows=None):
        return Date(self.date)


export("jx_base.expressions.literal", DateOp)
Example #24
0
        elif not s.sort and not s.value and all(d in sort_direction
                                                for d in s.values()):
            for v, d in s.items():
                output.append({
                    "value": jx_expression(v),
                    "sort": sort_direction[d]
                })
        elif not s.sort and not s.value:
            Log.error("`sort` clause must have a `value` property")
        else:
            output.append({
                "value": jx_expression(coalesce(s.value, s.field)),
                "sort": sort_direction[s.sort]
            })
    return output


sort_direction = {
    "asc": 1,
    "ascending": 1,
    "desc": -1,
    "descending": -1,
    "none": 0,
    1: 1,
    0: 0,
    -1: -1,
    None: 1
}

export("jx_base.container", QueryOp)
Example #25
0
def is_missing(t):
    # RETURN True IF EFFECTIVELY NOTHING
    class_ = t.__class__
    if class_ in (none_type, NullType):
        return True
    elif class_ in data_types:
        return False
    elif class_ in finite_types and not t:
        return True
    else:
        return t == None


# EXPORT
export("mo_dots.nones", to_data)

export("mo_dots.datas", list_to_data)
export("mo_dots.datas", dict_to_data)
export("mo_dots.datas", to_data)
export("mo_dots.datas", from_data)
export("mo_dots.datas", coalesce)
export("mo_dots.datas", _getdefault)
export("mo_dots.datas", hash_value)
export("mo_dots.datas", listwrap)
export("mo_dots.datas", literal_field)

export("mo_dots.lists", list_to_data)
export("mo_dots.lists", to_data)
export("mo_dots.lists", coalesce)
export("mo_dots.lists", from_data)
    @simplified
    def partial_eval(self):
        when = self.lang[BooleanOp(self.when)].partial_eval()

        if when is TRUE:
            return self.lang[self.then].partial_eval()
        elif when in [FALSE, NULL]:
            return self.lang[self.els_].partial_eval()
        elif is_op(when, Literal):
            Log.error("Expecting `when` clause to return a Boolean, or `null`")

        then = self.lang[self.then].partial_eval()
        els_ = self.lang[self.els_].partial_eval()

        if then is TRUE:
            if els_ is FALSE:
                return when
            elif els_ is TRUE:
                return TRUE
        elif then is FALSE:
            if els_ is FALSE:
                return FALSE
            elif els_ is TRUE:
                return self.lang[NotOp(when)].partial_eval()

        return self.lang[WhenOp(when, **{"then": then, "else": els_})]


export("jx_base.expressions.first_op", WhenOp)
export("jx_base.expressions.eq_op", WhenOp)
Example #27
0
    def __iter__(self):
        return self.terms.__iter__()

    def __data__(self):
        return {"tuple": [t.__data__() for t in self.terms]}

    def vars(self):
        output = set()
        for t in self.terms:
            output |= t.vars()
        return output

    def map(self, map_):
        return (TupleOp([t.map(map_) for t in self.terms]))

    def missing(self, lang):
        return FALSE

    def __call__(self):
        return tuple(t() for t in self.terms)

    def partial_eval(self, lang):
        if all(is_literal(t) for t in self.terms):
            return (Literal([t.value for t in self.terms]))

        return self


export("jx_base.expressions._utils", TupleOp)
Example #28
0
from mo_imports import export
from tests.module_name_value1.bars import bar
from tests.module_name_value1 import bars


def foo():
    bar()


export(bars, "alt", foo)
Example #29
0
    def vars(self):
        return self.expr.vars()

    def map(self, map_):
        return (MissingOp(self.expr.map(map_)))

    def missing(self, lang):
        return FALSE

    def invert(self, lang):
        output = self.expr.missing(lang)
        if is_op(output, MissingOp):
            # break call cycle
            return (NotOp(output))
        else:
            return (output.invert(lang))

    def exists(self):
        return TRUE

    def partial_eval(self, lang):
        output = self.expr.partial_eval(lang).missing(lang)
        if is_op(output, MissingOp):
            return output
        else:
            return output.partial_eval(lang)


export("jx_base.expressions.expression", MissingOp)
Example #30
0
    def __add__(self, other):
        return text(self) + text(other)

    def __radd__(self, other):
        return text(other) + text(self)

    if PY2:
        __unicode__ = __str__

    @check
    def to_bq(self, schema, not_null=False, boolean=False, many=True):
        return self

    def missing(self):
        return self.miss

    def __data__(self):
        return {"script": text(self.sql)}

    def __eq__(self, other):
        if not isinstance(other, SQLScript_):
            return False
        elif self.expr == other.expr:
            return True
        else:
            return False


export("jx_bigquery.expressions._utils", BQLScript)