From virako.9 en gmail.com Mon Oct 3 12:14:19 2022 From: virako.9 en gmail.com (Victor Ramirez) Date: Mon, 3 Oct 2022 18:14:19 +0200 Subject: [Python-es] Tertulia python. Martes 4 de octubre a las 20:00 CEST Message-ID: Hola, Se convoca la Tertulia de la semana: ¿Cuándo? *Martes 4 de octubre* a las *20:00 CEST* ¿Dónde? https://meet.jit.si/py2022 Accesible desde cualquier navegador moderno y desde aplicación para Android e iOS. La sala estará bloqueada con clave, que se retirará a la hora de comienzo para permitir el acceso público. ¿Por qué? Porque tenemos ganas de hablar sobre python con más gente. Anímate, no se necesitan conocimientos avanzados, solo ganas de charlar y pasar un buen rato. ANUNCIO: Se busca: Se busca alguien con ganas de editar audio, mientras se sigue publicando el excelente trabajo que realizó Pablo en https://podcast.jcea.es/python/ Se recompensa con mucha satisfacción pero sin dinero. Otros detalles: - Se grabará el audio de la conversación con vistas a una difusión pública posterior (tipo podcast). Entendemos que los participantes están de acuerdo en ser grabados (solo audio, no video). Si alguien tiene pegas con esto lo puede comentar al principio de la tertulia. De todas maneras se recordará al empezar. - Se agradece entrar con vídeo, aunque el sonido esté silenciado, porque hablar a una pantalla llena de recuadros negros resulta confuso y desagradable. No es imprescindible, pero se agradece. - A poder ser, ten el sonido silenciado si no estás hablando. Procura que tu audio tenga calidad y no meter ruido ambiente. Procura usar auriculares para evitar el retorno. - La tertulia no tiene tema definido más allá de hablar de Python como lenguaje. Lo más fácil es romper el hielo con algún problema o algún descubrimiento reciente con el que te hayas tropezado con el lenguaje. Sería interesante que trajeras algo pensado. ¡Trae tu tema! - Al final de la tertulia, recomendamos algo que no tiene porqué estar relacionado con python ni con la informática. Libros, películas, juegos, comidas, deportes, ... ¡Cuéntanos! - *Después de terminar la tertulia, nos quedamos y seguimos charlando de cosas muy interesantes que no son grabadas/no queremos que se graben, ahí lo dejo.* Un saludo. -- Víctor Ramírez de la Corte @virako ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From msanchez en uninet.edu Sun Oct 9 07:50:56 2022 From: msanchez en uninet.edu (Miguel Sanchez) Date: Sun, 9 Oct 2022 12:50:56 +0100 Subject: [Python-es] Pyramid + SQLAlchemy + commit() inoportuno Message-ID: <20221009125056.034418e6@nausicaa.mariaonline.org> Hola Lista. Estoy comenzando con Pyramid + SQLAlchemy y me he atascado. Es posible que esté haciendo varias cosas mal al mismo tiempo. Les digo cómo lo estoy haciendo: He definido los modelos, según la documentación recomienda (creo): class Mitabla(Base): __tablename__ = 'mitabla' id = Column(Integer, primary_key=True) dato1 = Column(Integer) def __init__(self, dato1): self.dato1 = dato1 def __setattr__(self, attr, valor): if attr == 'dato1': if not isinstance(int(valor), int): raise ValueError('dato1 no es un int') super().__setattr__(attr, valor) Como pueden ver uso __setattr__ para filtrar los valores que se pueden asignar a las columnas. He definido una "vista" que va a ser invocada desde un ajax y que espero me devuelva unos valores json: @view_config(route_name='haceralgo', http_cache=0, renderer='json' ) def haceralgo(request): En dicha vista tengo varios executes a la sesion del request (request.dbsession) Unos seleccionan datos, otras borran, otras actualizan Esto funciona perfectamente, genero una respuesta json y los datos quedan modificados/borrados try: sentencia = select( .... resultado = request.dbsession.execute(sentencia).scalar_one() sentencia = delete( .... request.dbsession.execute(sentencia) sentencia = select( ... resultado2 = request.dbsession.execute(sentencia).scalar_one() resultado2.dato1 = 100 return Response(..... except .... El problema aparece cuando hay un error y quiero capturarlo .... por ejemplo haciendo que resultado2.dato1 = 'No sea un entero' o simplemente metiendo un 1/0 en el try ... except Mi idea es capturar el error, loguearlo y enviar un json informando del error Si hago: except Exception as error: request.dbsession.rollback() log.debug(error) raise Todo funciona como debería salvo que no respondo a la petición ajax, lo que llega es un error generado por el servidor: Internal Server Error The server encountered an unexpected internal server error (generated by waitress) Si hago except Exception as error: log.debug(error) return Response(json.dumps('Datos con el error'), content_type='application/json; charset=utf-8', status=500) Se genera la respuesta json correctamente PERO también se genera un commit() que hace que todas las sentencias del try: donde NO se han generado errores (del tipo que sea) se graben en la base de datos Esto es un problema pues la bd se me queda en un estado inconsistente Si hago except Exception as error: request.dbsession.rollback() log.debug(error) return Response(json.dumps('Datos con el error'), content_type='application/json; charset=utf-8', status=500) En el servidor se lanza un error: sqlalchemy.exc.ResourceClosedError: This transaction is closed No se genera la respuesta json Y llega el mismo error de antes generado por el servidor Internal Server Error The server encountered an unexpected internal server error (generated by waitress) Alguna sugerencia???, que hago mal??? Gracias y saludos Miguel Sánchez From virako.9 en gmail.com Mon Oct 10 13:18:20 2022 From: virako.9 en gmail.com (Victor Ramirez) Date: Mon, 10 Oct 2022 19:18:20 +0200 Subject: [Python-es] Tertulia python. Martes 11 de octubre a las 20:00 CEST Message-ID: Hola, Se convoca la Tertulia de la semana: ¿Cuándo? *Martes 11 de octubre* a las *20:00 CEST* ¿Dónde? https://meet.jit.si/py2022 Accesible desde cualquier navegador moderno y desde aplicación para Android e iOS. La sala estará bloqueada con clave, que se retirará a la hora de comienzo para permitir el acceso público. ¿Por qué? Porque tenemos ganas de hablar sobre python con más gente. Anímate, no se necesitan conocimientos avanzados, solo ganas de charlar y pasar un buen rato. ANUNCIO: Se busca: Se busca alguien con ganas de editar audio, mientras se sigue publicando el excelente trabajo que realizó Pablo en https://podcast.jcea.es/python/ Se recompensa con mucha satisfacción pero sin dinero. Otros detalles: - Se grabará el audio de la conversación con vistas a una difusión pública posterior (tipo podcast). Entendemos que los participantes están de acuerdo en ser grabados (solo audio, no video). Si alguien tiene pegas con esto lo puede comentar al principio de la tertulia. De todas maneras se recordará al empezar. - Se agradece entrar con vídeo, aunque el sonido esté silenciado, porque hablar a una pantalla llena de recuadros negros resulta confuso y desagradable. No es imprescindible, pero se agradece. - A poder ser, ten el sonido silenciado si no estás hablando. Procura que tu audio tenga calidad y no meter ruido ambiente. Procura usar auriculares para evitar el retorno. - La tertulia no tiene tema definido más allá de hablar de Python como lenguaje. Lo más fácil es romper el hielo con algún problema o algún descubrimiento reciente con el que te hayas tropezado con el lenguaje. Sería interesante que trajeras algo pensado. ¡Trae tu tema! - Al final de la tertulia, recomendamos algo que no tiene porqué estar relacionado con python ni con la informática. Libros, películas, juegos, comidas, deportes, ... ¡Cuéntanos! - *Después de terminar la tertulia, nos quedamos y seguimos charlando de cosas muy interesantes que no son grabadas/no queremos que se graben, ahí lo dejo.* Un saludo. -- Víctor Ramírez de la Corte @virako ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From virako.9 en gmail.com Mon Oct 17 06:08:13 2022 From: virako.9 en gmail.com (Victor Ramirez) Date: Mon, 17 Oct 2022 12:08:13 +0200 Subject: [Python-es] Tertulia python. Martes 18 de octubre a las 20:00 CEST Message-ID: Hola, Se convoca la Tertulia de la semana: ¿Cuándo? *Martes 18 de octubre* a las *20:00 CEST* ¿Dónde? https://meet.jit.si/py2022 Accesible desde cualquier navegador moderno y desde aplicación para Android e iOS. La sala estará bloqueada con clave, que se retirará a la hora de comienzo para permitir el acceso público. ¿Por qué? Porque tenemos ganas de hablar sobre python con más gente. Anímate, no se necesitan conocimientos avanzados, solo ganas de charlar y pasar un buen rato. ANUNCIO: Se busca: Se busca alguien con ganas de editar audio, mientras se sigue publicando el excelente trabajo que realizó Pablo en https://podcast.jcea.es/python/ Se recompensa con mucha satisfacción pero sin dinero. Otros detalles: - Se grabará el audio de la conversación con vistas a una difusión pública posterior (tipo podcast). Entendemos que los participantes están de acuerdo en ser grabados (solo audio, no video). Si alguien tiene pegas con esto lo puede comentar al principio de la tertulia. De todas maneras se recordará al empezar. - Se agradece entrar con vídeo, aunque el sonido esté silenciado, porque hablar a una pantalla llena de recuadros negros resulta confuso y desagradable. No es imprescindible, pero se agradece. - A poder ser, ten el sonido silenciado si no estás hablando. Procura que tu audio tenga calidad y no meter ruido ambiente. Procura usar auriculares para evitar el retorno. - La tertulia no tiene tema definido más allá de hablar de Python como lenguaje. Lo más fácil es romper el hielo con algún problema o algún descubrimiento reciente con el que te hayas tropezado con el lenguaje. Sería interesante que trajeras algo pensado. ¡Trae tu tema! - Al final de la tertulia, recomendamos algo que no tiene porqué estar relacionado con python ni con la informática. Libros, películas, juegos, comidas, deportes, ... ¡Cuéntanos! - *Después de terminar la tertulia, nos quedamos y seguimos charlando de cosas muy interesantes que no son grabadas/no queremos que se graben, ahí lo dejo.* Un saludo. -- Víctor Ramírez de la Corte @virako ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: From miguel en mariaonline.org Mon Oct 17 18:31:36 2022 From: miguel en mariaonline.org (Miguel Sanchez) Date: Mon, 17 Oct 2022 23:31:36 +0100 Subject: [Python-es] Pyramid + SQLAlchemy + commit() inoportuno In-Reply-To: <20221009125056.034418e6@nausicaa.mariaonline.org> References: <20221009125056.034418e6@nausicaa.mariaonline.org> Message-ID: <20221017233136.6206ecc3@mariaonline.org> Hola lista. Me contesto a mi mismo, por si alguien se encuentra con este mismo asunto. El tema no está tanto en la sesión de SQLAlchemy, sino en el manejo de las transacciones que hace Pyramid (tal como queda configurado usando su cookiecutter recomendado para hacer un proyecto básico [1]) En estas circunstancias las transacciones las maneja el módulo transaction[2] tal como lo configura pyramid_tm[3] y leyendo este código fuente he podido hacerme una idea de como tratar la situación: Usando request.tm.doom() en lugar de request.dbsession.rollback() he conseguido que las cosas funcionen como quería (eso creo). Saludos Miguel Sánchez [1] https://github.com/Pylons/pyramid-cookiecutter-starter [2] https://github.com/zopefoundation/transaction [3] https://github.com/Pylons/pyramid_tm/blob/master/src/pyramid_tm/__init__.py El Sun, 9 Oct 2022 12:50:56 +0100 Miguel Sanchez dijo: > Hola Lista. > > Estoy comenzando con Pyramid + SQLAlchemy y me he atascado. > > Es posible que esté haciendo varias cosas mal al mismo tiempo. Les digo cómo lo estoy haciendo: > > He definido los modelos, según la documentación recomienda (creo): > > class Mitabla(Base): > __tablename__ = 'mitabla' > id = Column(Integer, primary_key=True) > dato1 = Column(Integer) > > def __init__(self, dato1): > self.dato1 = dato1 > > def __setattr__(self, attr, valor): > if attr == 'dato1': > if not isinstance(int(valor), int): > raise ValueError('dato1 no es un int') > super().__setattr__(attr, valor) > > > Como pueden ver uso __setattr__ para filtrar los valores que se pueden asignar a las columnas. > > He definido una "vista" que va a ser invocada desde un ajax y que espero me devuelva unos valores json: > > @view_config(route_name='haceralgo', > http_cache=0, > renderer='json' > ) > def haceralgo(request): > > En dicha vista tengo varios executes a la sesion del request (request.dbsession) > Unos seleccionan datos, otras borran, otras actualizan > > Esto funciona perfectamente, genero una respuesta json y los datos quedan modificados/borrados > > try: > sentencia = select( .... > resultado = request.dbsession.execute(sentencia).scalar_one() > sentencia = delete( .... > request.dbsession.execute(sentencia) > sentencia = select( ... > resultado2 = request.dbsession.execute(sentencia).scalar_one() > resultado2.dato1 = 100 > > return Response(..... > except .... > > El problema aparece cuando hay un error y quiero capturarlo .... por ejemplo haciendo que resultado2.dato1 = 'No sea un entero' o simplemente metiendo un 1/0 en el try ... except > > Mi idea es capturar el error, loguearlo y enviar un json informando del error > > Si hago: > except Exception as error: > request.dbsession.rollback() > log.debug(error) > raise > > Todo funciona como debería salvo que no respondo a la petición ajax, lo que llega es un error generado por el servidor: > Internal Server Error > The server encountered an unexpected internal server error > (generated by waitress) > > > Si hago > except Exception as error: > log.debug(error) > return Response(json.dumps('Datos con el error'), > content_type='application/json; charset=utf-8', > status=500) > Se genera la respuesta json correctamente > PERO también se genera un commit() que hace que todas las sentencias del try: donde NO se han generado errores (del tipo que sea) se graben en la base de datos > Esto es un problema pues la bd se me queda en un estado inconsistente > > > Si hago > except Exception as error: > request.dbsession.rollback() > log.debug(error) > return Response(json.dumps('Datos con el error'), > content_type='application/json; charset=utf-8', > status=500) > > En el servidor se lanza un error: sqlalchemy.exc.ResourceClosedError: This transaction is closed > No se genera la respuesta json > Y llega el mismo error de antes generado por el servidor > Internal Server Error > The server encountered an unexpected internal server error > (generated by waitress) > > > > > Alguna sugerencia???, que hago mal??? > > > Gracias y saludos > > > Miguel Sánchez > > > _______________________________________________ > Python-es mailing list > Python-es en python.org > https://mail.python.org/mailman/listinfo/python-es From virako.9 en gmail.com Mon Oct 24 15:36:39 2022 From: virako.9 en gmail.com (Victor Ramirez) Date: Mon, 24 Oct 2022 21:36:39 +0200 Subject: [Python-es] Tertulia python. Martes 25 de octubre a las 20:00 CEST Message-ID: Hola, Se convoca la Tertulia de la semana: ¿Cuándo? *Martes 25 de octubre* a las *20:00 CEST* ¿Dónde? https://meet.jit.si/py2022 Accesible desde cualquier navegador moderno y desde aplicación para Android e iOS. La sala estará bloqueada con clave, que se retirará a la hora de comienzo para permitir el acceso público. ¿Por qué? Porque tenemos ganas de hablar sobre python con más gente. Anímate, no se necesitan conocimientos avanzados, solo ganas de charlar y pasar un buen rato. ANUNCIO: Se busca: Se busca alguien con ganas de editar audio, mientras se sigue publicando el excelente trabajo que realizó Pablo en https://podcast.jcea.es/python/ Se recompensa con mucha satisfacción pero sin dinero. Otros detalles: - Se grabará el audio de la conversación con vistas a una difusión pública posterior (tipo podcast). Entendemos que los participantes están de acuerdo en ser grabados (solo audio, no video). Si alguien tiene pegas con esto lo puede comentar al principio de la tertulia. De todas maneras se recordará al empezar. - Se agradece entrar con vídeo, aunque el sonido esté silenciado, porque hablar a una pantalla llena de recuadros negros resulta confuso y desagradable. No es imprescindible, pero se agradece. - A poder ser, ten el sonido silenciado si no estás hablando. Procura que tu audio tenga calidad y no meter ruido ambiente. Procura usar auriculares para evitar el retorno. - La tertulia no tiene tema definido más allá de hablar de Python como lenguaje. Lo más fácil es romper el hielo con algún problema o algún descubrimiento reciente con el que te hayas tropezado con el lenguaje. Sería interesante que trajeras algo pensado. ¡Trae tu tema! - Al final de la tertulia, recomendamos algo que no tiene porqué estar relacionado con python ni con la informática. Libros, películas, juegos, comidas, deportes, ... ¡Cuéntanos! - *Después de terminar la tertulia, nos quedamos y seguimos charlando de cosas muy interesantes que no son grabadas/no queremos que se graben, ahí lo dejo.* Un saludo. -- Víctor Ramírez de la Corte @virako ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: