[pyar] Cómo evito eval() en ésta situación?
Gabriel Acosta
acostadariogabriel en gmail.com
Mie Ago 17 10:37:10 ART 2016
Si, me parece que la cosa va por ahí, que acá lo hice [0], armé el
intérprete desde cero para parsear las consultas, y otro de los
problemas es en cómo comparar fechas y demás.
Gracias Marcos y Daniel, voy a seguir por AST.
Un abrazo !
[0]: https://github.com/centaurialpha/pireal/tree/master/src/core/interpreter
El 17/8/16, Daniel Moisset <dmoisset en machinalis.com> escribió:
> Un lambda no te sirve?
>
> r.select(lambda t: t.age > 35)
>
> Alternativamente armar algo tipo field objects de django:
>
> r.select(F("age") > 35)
>
> Si queres exactamente la API que pusiste sin usar eval, vas a tener que
> hacer un parser que arme un AST de la expresion y lo evalue. Parsimonious
> me parece de lo mejorcito para hacerlo
>
> Saludos,
> D.
>
> On Wed, Aug 17, 2016 at 1:43 PM, Gabriel Acosta <
> acostadariogabriel en gmail.com> wrote:
>
>> Buenas lista!
>>
>>
>> Quiero deshacerme del uso de eval(), ésta porción de código implementa
>> la operación `select` del álgebra relacional:
>>
>> class Relation(object):
>> def __init__(self):
>> self.tuples = set()
>> self.header = []
>>
>> def add(self, data):
>> self.tuples.add(data)
>>
>> def select(self, predicate):
>> new_rela = Relation()
>> new_rela.header = self.header
>>
>> _filter = {}
>> for data in self.tuples:
>> for e, i in enumerate(self.header):
>> _filter[i] = data[e]
>> if eval(predicate, {}, _filter):
>> new_rela.add(data)
>> print(new_rela.tuples)
>>
>>
>> r = Relation()
>> r.header = ['id', 'name', 'age']
>> r.add((1, 'Gabriel', 25))
>> r.add((4, 'Alice', 43))
>> r.add((54, 'Bob', 33))
>> r.select("age > 35")
>>
>> Alguna alternativa más 'limpia'?
>>
>> Un abrazo?
>> --
>> Gabriel Acosta
>> NINJA-IDE Core Developer
>> https://centaurialpha.github.io
>>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> Daniel F. Moisset - UK Country Manager
> www.machinalis.com
> Skype: @dmoisset
>
--
Gabriel Acosta
NINJA-IDE Core Developer
https://centaurialpha.github.io
Más información sobre la lista de distribución pyar