[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