Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def visitIf(self, node, scope):
for test, body in node.tests:
if isinstance(test, ast.Const):
if type(test.value) in self._const_types:
if not test.value:
continue
self.visit(test, scope)
self.visit(body, scope)
if node.else_:
self.visit(node.else_, scope)
def STORE_FAST(decompiler, varname):
if varname.startswith('_['):
throw(InvalidQuery('Use generator expression (... for ... in ...) '
'instead of list comprehension [... for ... in ...] inside query'))
decompiler.assnames.add(varname)
decompiler.store(ast.AssName(varname, 'OP_ASSIGN'))
def BUILD_TUPLE(decompiler, size):
return ast.Tuple(decompiler.pop_items(size))
def YIELD_VALUE(decompiler):
expr = decompiler.stack.pop()
fors = []
while decompiler.stack:
decompiler.process_target(None)
top = decompiler.stack.pop()
if not isinstance(top, (ast.GenExprFor)):
cond = ast.GenExprIf(top)
top = decompiler.stack.pop()
assert isinstance(top, ast.GenExprFor)
top.ifs.append(cond)
fors.append(top)
else: fors.append(top)
fors.reverse()
return ast.GenExpr(ast.GenExprInner(simplify(expr), fors))
def LOAD_DEREF(decompiler, freevar):
decompiler.names.add(freevar)
return ast.Name(freevar)
def CALL_FUNCTION(decompiler, argc, star=None, star2=None):
pop = decompiler.stack.pop
kwarg, posarg = divmod(argc, 256)
args = []
for i in xrange(kwarg):
arg = pop()
key = pop().value
args.append(ast.Keyword(key, arg))
for i in xrange(posarg): args.append(pop())
args.reverse()
return decompiler._call_function(args, star, star2)
else: name_path += '-' + attr.name
tableref = JoinedTableRef(subquery, name_path, parent_tableref, attr)
if can_affect_distinct is not None:
tableref.can_affect_distinct = can_affect_distinct
tablerefs[name_path] = tableref
parent_tableref = tableref
parent_entity = entity
database = entity._database_
assert database.schema is not None
if translator.database is None: translator.database = database
elif translator.database is not database: throw(TranslationError,
'All entities in a query must belong to the same database')
for if_ in qual.ifs:
assert isinstance(if_, ast.GenExprIf)
translator.dispatch(if_)
if isinstance(if_.monad, translator.AndMonad): cond_monads = if_.monad.operands
else: cond_monads = [ if_.monad ]
for m in cond_monads:
if not m.aggregated: translator.conditions.extend(m.getsql())
else: translator.having_conditions.extend(m.getsql())
translator.inside_expr = True
translator.dispatch(tree.expr)
assert not translator.hint_join
assert not translator.inside_not
monad = tree.expr.monad
if isinstance(monad, translator.ParamMonad): throw(TranslationError,
"External parameter '%s' cannot be used as query result" % ast2src(tree.expr))
translator.expr_monads = monad.items if isinstance(monad, translator.ListMonad) else [ monad ]
translator.groupby_monads = None
'Inside declarative query, iterator must be entity. '
'Got: for %s in %s' % (name, ast2src(qual.iter)))
entity = iterable.item_type
if not isinstance(entity, EntityMeta):
throw(TranslationError, 'for %s in %s' % (name, ast2src(qual.iter)))
if i > 0:
if translator.left_join: throw(TranslationError,
'Collection expected inside left join query. '
'Got: for %s in %s' % (name, ast2src(qual.iter)))
translator.distinct = True
tableref = TableRef(subquery, name, entity)
tablerefs[name] = tableref
tableref.make_join()
else:
attr_names = []
while isinstance(node, ast.Getattr):
attr_names.append(node.attrname)
node = node.expr
if not isinstance(node, ast.Name) or not attr_names:
throw(TranslationError, 'for %s in %s' % (name, ast2src(qual.iter)))
node_name = node.name
attr_names.reverse()
name_path = node_name
parent_tableref = subquery.get_tableref(node_name)
if parent_tableref is None: throw(TranslationError, "Name %r must be defined in query" % node_name)
parent_entity = parent_tableref.entity
last_index = len(attr_names) - 1
for j, attrname in enumerate(attr_names):
attr = parent_entity._adict_.get(attrname)
if attr is None: throw(AttributeError, attrname)
entity = attr.py_type
if not isinstance(entity, EntityMeta):
def FORMAT_VALUE(decompiler, flags):
if flags in (0, 1, 2, 3):
value = decompiler.stack.pop()
return ast.Str(value, flags)
elif flags == 4:
fmt_spec = decompiler.stack.pop()
value = decompiler.stack.pop()
return ast.FormattedValue(value, fmt_spec)
def UNARY_CONVERT(decompiler):
return ast.Backquote(decompiler.stack.pop())