def _get_login(self): sql = "SELECT * FROM cor_seg_users" if self.login and self.pswd: sql += " WHERE " sql = self.cursor.mogrify(sql + " login = %s and pswd = %s", ( self.login, self.pswd, )) print sql self.cursor.execute(sql) res = copyListDicts(self.cursor.fetchall()) ret = {} """ siempre es conveniente retornar la respuesta como un elemento del diccionario, esto es en caso de que se auiera agregar informacion adicional como un paginador informacion de sesion, paginadores, etc """ if res: ret.update({'login': res, 'status': {'id': 'OK', 'message': ''}}) else: ret.update({ 'login': [], 'status': { 'id': 'ERROR', 'message': 'Nombre de usuario y/o clave incorrecto' } }) return ret
def _get_products(self, product_ids = None): """ Este metodo retorna una lista de productos segun el valor de product_ids no es necesartio hacerlo siempre de esta manera, pero la idea es ilustrar que se pueden ejecutar metodos externos al get o a cualquier otro de los metodos rest """ if product_ids: self.cursor.execute("SELECT * FROM products WHERE id IN (%s)", (product_ids, )) else: self.cursor.execute("SELECT * FROM products") res = copyListDicts( self.cursor.fetchall()) ret = {} """ Como lo indica la convencion REST las referencias a otros objetos debe ser enviada como una propiedad, aunque en este caso es una referencia al mismo objeto, sin embargo es lo recomendado para no verse en la oblicacion de construirlo del lado del cliente. La propiedad self.request.host se usa para obtener la url a la que se realizo la peticion en caso de que exista un proxy o cualquier intermedio """ for r in res: r.update({'ref' : 'http://%s/products/%s'%(self.request.host, r.get('id'))}) ret.update({'products' : res, 'status' : {'id' : 'OK', 'message' : ''} }) return ret
def _get_products(self, product_ids=None): """ Este metodo retorna una lista de productos segun el valor de product_ids no es necesartio hacerlo siempre de esta manera, pero la idea es ilustrar que se pueden ejecutar metodos externos al get o a cualquier otro de los metodos rest """ if product_ids: self.cursor.execute( "SELECT cor_modulo_sec, cor_modulo_id, cor_modulo_desc FROM cor_seg_modulo WHERE cor_modulo_id IN ('SEGURIDAD')", (product_ids, )) else: self.cursor.execute( "SELECT cor_modulo_sec, cor_modulo_id, cor_modulo_desc FROM cor_seg_modulo" ) res = copyListDicts(self.cursor.fetchall()) ret = {} """ Como lo indica la convencion REST las referencias a otros objetos debe ser enviada como una propiedad, aunque en este caso es una referencia al mismo objeto, sin embargo es lo recomendado para no verse en la oblicacion de construirlo del lado del cliente. La propiedad self.request.host se usa para obtener la url a la que se realizo la peticion en caso de que exista un proxy o cualquier intermedio """ for r in res: r.update({ 'ref': 'http://%s/products/%s' % (self.request.host, r.get('id')) }) ret.update({'products': res}) return ret
def _get_clients(self, client_ids = None): if client_ids: self.cursor.execute("SELECT * FROM clients WHERE id IN (%s) LIMIT 5", (client_ids, )) else: self.cursor.execute("SELECT * FROM clients LIMIT 5") res = copyListDicts( self.cursor.fetchall()) ret = {} for r in res: r.update({'ref' : 'http://%s/clients/%s'%(self.request.host, r.get('id'))}) ret.update({'clients':res, 'status' : {'id' : 'OK', 'message' : ''}}) return ret
def _detail_sales(self, sale_id): self.cursor.execute("""SELECT sales_lines.*, products.name product_name, products.price price FROM sales_lines JOIN products ON sales_lines.product_id = products.id WHERE sale_id = %s""", (sale_id, )) res = copyListDicts( self.cursor.fetchall()) ret = {} for r in res: r.update({'product_id_ref' : 'http://%s/products/%s'%(self.request.host, r.get('product_id'))}) ret.update({'detail':res, 'status' : {'id' : 'OK', 'message' : ''}}) return ret
def query(self, table, ids = None, limit=None, offset=None): conn = self.generate_conn() cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) sql = "SELECT * FROM %s "%(table) if ids: sql = sql + "WHERE id IN ("+", ".join(["%s"]*len(ids))+")" cur.execute(sql, ids) else: cur.execute(sql) res = copyListDicts(cur.fetchall()) return res
def list_databases(self): sql = '''SELECT d.datname as "name", u.usename as "owner", pg_catalog.pg_encoding_to_char(d.encoding) as "encoding" FROM pg_catalog.pg_database d LEFT JOIN pg_catalog.pg_user u ON d.datdba = u.usesysid ORDER BY 1;''' conn = self.generate_conn({'database':'postgres'}) cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) cur.execute(sql) res = copyListDicts(cur) conn.close() return res
def _get_sales(self): self._build_query() self.cursor.execute(self.sql) res = copyListDicts(self.cursor.fetchall()) ret = {} for r in res: r.update({'client_id_ref' : 'http://%s/clients/%s'%(self.request.host, r.get('client_id'))}) r.update({'detail_ref' : 'http://%s/detail/%s'%(self.request.host, r.get('id'))}) """ siempre es conveniente retornar la respuesta como un elemento del diccionario, esto es en caso de que se auiera agregar informacion adicional como un paginador informacion de sesion, paginadores, etc """ ret.update({'sales':res, 'status' : {'id' : 'OK', 'message' : ''}}) return ret
def _get_callback(self): field_id = self.get_argument('id', False) try: if field_id: self.cursor.execute("SELECT code, id, name, price, quantity FROM products WHERE id = %s", (field_id, )) else: self.cursor.execute("SELECT code, id, name, price, quantity FROM products") res = copyListDicts( self.cursor.fetchall() ) for r in res: r.update({'ref' : 'http://%s/products?id=%s'%(self.request.host, r.get('id'))}) res = {'products':res, 'status':{'id' : 'OK', 'message' : ''}} except Exception as e: res = {'status':{'id' : 'ERROR', 'message' : 'Hubo un error, no se pudo realizar la consulta'}} gen_log.error("Error consultando", exc_info=True) self._send_response(res)
def _get_clients(self, client_ids=None): if client_ids: self.cursor.execute("SELECT * FROM clients WHERE id IN (%s)", (client_ids, )) else: self.cursor.execute("SELECT * FROM clients") res = copyListDicts(self.cursor.fetchall()) ret = {} for r in res: r.update({ 'ref': 'http://%s/clients/%s' % (self.request.host, r.get('id')) }) ret.update({'clients': res}) return ret
def _detail_sales(self, sale_id): self.cursor.execute( """SELECT sales_lines.*, products.name product_name, products.price price FROM sales_lines JOIN products ON sales_lines.product_id = products.id WHERE sale_id = %s""", (sale_id, )) res = copyListDicts(self.cursor.fetchall()) ret = {} for r in res: r.update({ 'product_id_ref': 'http://%s/products/%s' % (self.request.host, r.get('product_id')) }) ret.update({'detail': res}) return ret
def _get_login(self): sql = "SELECT login, name, priv_admin, active FROM cor_seg_users" if self.login and self.pswd: sql += " WHERE " sql = self.cursor.mogrify(sql + " login = %s and pswd = %s", (self.login, self.pswd,)) print sql self.cursor.execute(sql) res = copyListDicts( self.cursor.fetchall()) ret = {} """ siempre es conveniente retornar la respuesta como un elemento del diccionario, esto es en caso de que se auiera agregar informacion adicional como un paginador informacion de sesion, paginadores, etc """ if res: ret.update({'login':res, 'status':{'id':'OK', 'message':''}}) else: ret.update({'login':[], 'status':{'id':'ERROR', 'message':'Nombre de usuario y/o clave incorrecto'}}) return ret
def get(self, param): res = {} if param: self.cursor.execute("SELECT * FROM products WHERE id = %s", (param,)) res = copyListDicts(self.cursor.fetchall()) self.render("form.html", res=res and res[0] or {})
def query_sync(self, table, limit=None, offset=None): conn = self.generate_conn() cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) sql = """SELECT id, write_date FROM %s """%(table) cur.execute(sql) return copyListDicts(cur.fetchall())