Best Python code snippet using autotest_python
routes.py
Source:routes.py  
1from flask import render_template,flash, request, url_for, redirect, session, abort, g2from functools import wraps3from main.models.adm import *4from main.models.properties import *5from main.models.subscribers import *6from main.propertyForm import SeguridadForm,ComfortForm,PropertyForm7from main import app8from datetime import date,timedelta 9import logging 10import os11import random12import io13import base6414import math 15from PIL import Image16import cProfile, pstats, io17def profile(fnc):18    19    """A decorator that uses cProfile to profile a function"""20    21    def inner(*args, **kwargs):22        23        pr = cProfile.Profile()24        pr.enable()25        retval = fnc(*args, **kwargs)26        pr.disable()27        s = io.StringIO()28        sortby = 'cumulative'29        ps = pstats.Stats(pr, stream=s).sort_stats(sortby)30        ps.print_stats(.5)31        with open('C:/Users/Santi/Desktop/Inmobiliaria/main/p_optimize.log.txt', 'w+') as f:32            f.write(str(date.today()) + f'/n' + s.getvalue())33        print(s.getvalue())34        return retval35    return inner36#logging.basicConfig(filename='p_optimize.log', level=logging.DEBUG)37# from flask_mail import Mail, Message38# mail_data = MainMail.query.first()39# if mail_data != None:40#     app.config['MAIL_SERVER'] = 'smtp.googlemail.com'41#     app.config['MAIL_PORT'] = 2542#     app.config['MAIL_USE_TLS'] = True43#     app.config['MAIL_USERNAME'] = str(mail_data.mail)  # enter your email here44#     app.config['MAIL_DEFAULT_SENDER'] = str(mail_data.mail) # enter your email here45#     app.config['MAIL_PASSWORD'] = str(mail_data.mail_password) # enter your password here46# else:47#     app.config['MAIL_SERVER'] = 'smtp.googlemail.com'48#     app.config['MAIL_PORT'] = 2549#     app.config['MAIL_USE_TLS'] = True50#     app.config['MAIL_USERNAME'] = 'nomail@gmail.com'  # enter your email here51#     app.config['MAIL_DEFAULT_SENDER'] = 'nomail@gmail.com' # enter your email here52#     app.config['MAIL_PASSWORD'] = 'xxxx' # enter your password here53# print(app.config['MAIL_USERNAME'], app.config['MAIL_PASSWORD'])54# mail = Mail(app)55# def sort_imgs():56#     os.chdir(imgs_dir)57#     properties = os.listdir()58#     for f in properties:59#         os.chdir(imgs_dir + '/' + f)60#         imgs = os.listdir()61#         imgs.sort(key=lambda x: x[1:])62#         print(imgs)63# @app.before_request64# def caca():65#     sort_imgs()66imgs_dir = os.getcwd() + '/main/static/imgs/'67def properties_mtx(properties, columns):68    print(imgs_dir)69    aux = []70    p_show = []71    for i,propiedad in enumerate(properties):72        foto = get_img(propiedad.ref)73        aux.append([propiedad,foto])74        #print((i+1)%columns)75        if ((i+1)%columns) == 0:76            p_show.append(aux)77            aux = []78    if aux != []:79        p_show.append(aux) 80    #print(p_show[0])81    return p_show82def store_imgs(ref,imgs):83    os.chdir(imgs_dir)84    os.mkdir(ref)85    os.chdir(ref)86    print(os.getcwd())87    for i,img in enumerate(imgs):88        fext = img.filename.split('.')89        im = Image.open(img).save(str(i+1) + '.' + fext[-1])90def add_imgs(path_ref,img,id):91    im = Image.open(img).save(path_ref + '/' + str(id))92def del_imgs(ref,id):93    id = [int(i) for i in id]94    id.sort()95    f = []96    f_aux = []97    wrk_path = imgs_dir + ref + '/'98    imgs = os.listdir(wrk_path)99    imgs.sort(key=lambda x: x[1:])100    imgs = imgs[id[0]-1:]101    init_imgs = len(imgs)102    print(init_imgs,imgs,id)103    for j in range(init_imgs):104        f.append(os.path.splitext(wrk_path + imgs[j]))105        print(f)106    for delete_offset,i in enumerate(id):107        idx_mapping = i-id[0]-delete_offset108        print(idx_mapping,f[idx_mapping][0])109        init_imgs -= 1110        os.remove(f[idx_mapping][0]+f[idx_mapping][1])111        for j in range(idx_mapping,init_imgs):112            os.rename(f[j+1][0] + f[j+1][1], f[j][0] + f[j+1][1])113    return True114def get_imgs(ref):115    prop_phs = []116    os.chdir(imgs_dir + ref)117    imgs = os.listdir()118    for i in imgs:119        ph = open(i,'rb')120        im = base64.b64encode(ph.read()).decode('utf-8')121        ph.close()122        prop_phs.append(im)123    return prop_phs124def get_img(ref):125    os.chdir(imgs_dir + ref +'/')126    imgs = os.listdir()127    print(imgs)128    if (len(imgs) > 0):129        ph = open(imgs[0],'rb')130        im = base64.b64encode(ph.read()).decode('utf-8')131        ph.close()132    else:133        os.chdir(imgs_dir)134        ph = open('default.png','rb')135        im = base64.b64encode(ph.read()).decode('utf-8')136        ph.close()137    return im138def is_number(num_input):139    try:140        float(num_input)141        return True142    except ValueError:143        pass144    try:145        import unicodedata146        unicodedata.numeric(num_input)147        return True148    except (TypeError, ValueError):149        pass150    return False151@app.before_request152def get_current_user():153    g.user = None154    username = session.get('username')155    if username is not None:156        g.user = username157def login_required(f):158    @wraps(f)159    def decorated_function(*args, **kwargs):160        if g.user is None:161            return redirect(url_for('login_page', next=request.url))162        return f(*args, **kwargs)163    return decorated_function164#ROUTES -------------------------------165def assign_properties_to_from(form,get_properties):166    form.nombre.data = get_properties.propietario.nombre167    form.apellido.data = get_properties.propietario.apellido168    form.email.data = get_properties.propietario.email169    form.telefono.data = get_properties.propietario.telefono170    form.barrio.data = get_properties.barrio.barrio171    form.destacado.data = get_properties.destacado172    form.operacion.data = get_properties.operaciones.operacion173    form.tipo_propiedad.data = get_properties.tipo_propiedad.tipo_propiedad174    form.titulo.data = get_properties.titulo175    form.direccion.data = get_properties.direccion176    form.permuta.data = get_properties.permuta177    form.financia.data = get_properties.financia178    form.ref.data = get_properties.ref179    form.distancia_al_mar.data = get_properties.distancia_al_mar180    form.descripcion.data = get_properties.descripcion181    form.precio_dolares.data = get_properties.precio_dolares182    form.precio_pesos.data = get_properties.precio_pesos183    form.metraje_edificio.data = get_properties.metraje_edificio184    form.metraje_patio.data = get_properties.metraje_patio185    form.baños.data = get_properties.baños186    form.dormitorios.data = get_properties.dormitorios187    form.permuta.data = get_properties.permuta188    form.financia.data = get_properties.financia189    form.garaje.data = get_properties.garaje190    form.estado.data = get_properties.estado191    form.orientacion.data = get_properties.orientacion192    form.disposicion.data = get_properties.disposicion193    form.n_plantas.data = get_properties.n_plantas194    form.comfort.agua_caliente.data = get_properties.comfort[0].agua_caliente195    form.comfort.aire_acondicionado.data = get_properties.comfort[0].aire_acondicionado196    form.comfort.altillo.data = get_properties.comfort[0].altillo197    form.comfort.amueblada.data = get_properties.comfort[0].amueblada198    form.comfort.balcón.data = get_properties.comfort[0].balcón199    form.comfort.barbacoa.data = get_properties.comfort[0].barbacoa200    form.comfort.box.data = get_properties.comfort[0].box201    form.comfort.bungalow.data = get_properties.comfort[0].bungalow202    form.comfort.calefacción.data = get_properties.comfort[0].calefacción203    form.comfort.depósito.data = get_properties.comfort[0].depósito204    form.comfort.dormitorio_de_servicio.data = get_properties.comfort[0].dormitorio_de_servicio205    form.comfort.estufa_leña.data = get_properties.comfort[0].estufa_leña206    form.comfort.garaje.data = get_properties.comfort[0].garaje207    form.comfort.gas_por_cañerÃa.data = get_properties.comfort[0].gas_por_cañerÃa208    form.comfort.gym.data = get_properties.comfort[0].gym209    form.comfort.instalación_de_tv_cable.data = get_properties.comfort[0].instalación_de_tv_cable210    form.comfort.jacuzzi.data = get_properties.comfort[0].jacuzzi211    form.comfort.jardÃn.data = get_properties.comfort[0].jardÃn212    form.comfort.lavadero.data = get_properties.comfort[0].lavadero213    form.comfort.lavanderÃa.data = get_properties.comfort[0].lavanderÃa214    form.comfort.linea_blanca.data = get_properties.comfort[0].linea_blanca215    form.comfort.living_comedor.data = get_properties.comfort[0].living_comedor216    form.comfort.losa_radiante.data = get_properties.comfort[0].losa_radiante217    form.comfort.parrillero.data = get_properties.comfort[0].parrillero218    form.comfort.patio.data = get_properties.comfort[0].patio219    form.comfort.piscina.data = get_properties.comfort[0].piscina220    form.comfort.piso_porcelanato.data = get_properties.comfort[0].piso_porcelanato221    form.comfort.placard_en_la_cocina.data = get_properties.comfort[0].placard_en_la_cocina222    form.comfort.placard_en_dormitorio.data = get_properties.comfort[0].placard_en_dormitorio223    form.comfort.playroom.data = get_properties.comfort[0].playroom224    form.comfort.previsión_aa.data = get_properties.comfort[0].previsión_aa225    form.comfort.sauna.data = get_properties.comfort[0].sauna226    form.comfort.sótano.data = get_properties.comfort[0].sótano227    form.comfort.terraza.data = get_properties.comfort[0].terraza228    form.comfort.terraza_lavadero.data = get_properties.comfort[0].terraza_lavadero229    form.comfort.vista_al_mar.data = get_properties.comfort[0].vista_al_mar230    form.comfort.vestidor.data = get_properties.comfort[0].vestidor231    form.comfort.walkin_closet.data = get_properties.comfort[0].walkin_closet232    form.comfort.wifi.data = get_properties.comfort[0].wifi233    form.seguridad.alarma.data = get_properties.seguridad[0].alarma234    form.seguridad.cámaras_cctv.data = get_properties.seguridad[0].cámaras_cctv235    form.seguridad.cerca_perimetral.data = get_properties.seguridad[0].cerca_perimetral236    form.seguridad.porterÃa_24hs.data = get_properties.seguridad[0].porterÃa_24hs237    form.seguridad.portón_eléctrico.data = get_properties.seguridad[0].portón_eléctrico238    form.seguridad.rejas.data = get_properties.seguridad[0].rejas239    form.seguridad.guardia_de_seguridad.data = get_properties.seguridad[0].guardia_de_seguridad240    return form241def assign_form_to_properties(get_property,form):242    barrio = Barrios.query.filter_by(barrio = form.data['barrio']).first()243    operacion = Operaciones.query.filter_by(operacion = form.data['operacion']).first()244    tipo_propiedad = Tipo_propiedad.query.filter_by(tipo_propiedad = form.data['tipo_propiedad']).first()245    get_property.destacado = form.data['destacado']246    get_property.ref = form.data['ref']247    get_property.propietario.nombre = form.data['nombre']248    get_property.propietario.apellido = form.data['apellido']249    get_property.propietario.email = form.data['email']250    get_property.propietario.telefono = form.data['telefono']     251    get_property.operacion_id = operacion.id                                                                    252    get_property.fecha_publicacion = date.today()                                                                                                                                                                    253    get_property.tipo_propiedad_id = tipo_propiedad.id                       254    get_property.barrio_id = barrio.id                        255    get_property.titulo = form.data['titulo']                256    get_property.direccion = form.data['direccion']                        257    get_property.descripcion = form.data['descripcion']                        258    get_property.precio_dolares = abs(form.data['precio_dolares']) if form.data['precio_dolares'] else None                        259    get_property.precio_pesos = abs(form.data['precio_pesos']) if form.data['precio_pesos'] else None                        260    get_property.metraje_edificio = form.data['metraje_edificio']                       261    get_property.metraje_patio = form.data['metraje_patio']                       262    get_property.metraje_total = form.data['metraje_edificio'] if form.data['metraje_patio'] is None else form.data['metraje_edificio'] + form.data['metraje_patio']                        263    get_property.baños = form.data['baños']                        264    get_property.dormitorios = form.data['dormitorios']                        265    get_property.permuta = form.data['permuta'] if form.data['permuta'] != 2 else None                       266    get_property.financia = form.data['financia'] if form.data['financia'] != 2 else None                       267    get_property.garaje = form.data['garaje']                        268    get_property.estado = form.data['estado']                        269    get_property.orientacion = form.data['orientacion']                        270    get_property.disposicion = form.data['disposicion']                        271    get_property.n_plantas = form.data['n_plantas']                                    272    get_property.comfort[0].agua_caliente = form.comfort.data['agua_caliente']273    get_property.comfort[0].aire_acondicionado = form.comfort.data['aire_acondicionado']274    get_property.comfort[0].altillo = form.comfort.data['altillo']275    get_property.comfort[0].amueblada = form.comfort.data['amueblada']276    get_property.comfort[0].balcón = form.comfort.data['balcón']277    get_property.comfort[0].barbacoa = form.comfort.data['barbacoa']278    get_property.comfort[0].box = form.comfort.data['box']279    get_property.comfort[0].bungalow =form.comfort.data['bungalow']280    get_property.comfort[0].calefacción = form.comfort.data['calefacción']281    get_property.comfort[0].depósito = form.comfort.data['depósito']282    get_property.comfort[0].dormitorio_de_servicio = form.comfort.data['dormitorio_de_servicio']283    get_property.comfort[0].estufa_leña = form.comfort.data['estufa_leña']284    get_property.comfort[0].garaje = form.comfort.data['garaje']285    get_property.comfort[0].gas_por_cañerÃa = form.comfort.data['gas_por_cañerÃa']286    get_property.comfort[0].gym = form.comfort.data['gym']287    get_property.comfort[0].instalación_de_tv_cable = form.comfort.data['instalación_de_tv_cable']288    get_property.comfort[0].jacuzzi = form.comfort.data['jacuzzi']289    get_property.comfort[0].jardÃn = form.comfort.data['jardÃn']290    get_property.comfort[0].lavadero = form.comfort.data['lavadero']291    get_property.comfort[0].lavanderÃa = form.comfort.data['lavanderÃa']292    get_property.comfort[0].linea_blanca = form.comfort.data['linea_blanca']293    get_property.comfort[0].living_comedor = form.comfort.data['living_comedor']294    get_property.comfort[0].losa_radiante = form.comfort.data['losa_radiante']295    get_property.comfort[0].parrillero = form.comfort.data['parrillero']296    get_property.comfort[0].patio = form.comfort.data['patio']297    get_property.comfort[0].piscina = form.comfort.data['piscina']298    get_property.comfort[0].piso_porcelanato = form.comfort.data['piso_porcelanato']299    get_property.comfort[0].placard_en_la_cocina = form.comfort.data['placard_en_la_cocina']300    get_property.comfort[0].placard_en_dormitorio = form.comfort.data['placard_en_dormitorio']301    get_property.comfort[0].playroom = form.comfort.data['playroom']302    get_property.comfort[0].previsión_aa = form.comfort.data['previsión_aa']303    get_property.comfort[0].sauna = form.comfort.data['sauna']304    get_property.comfort[0].sótano = form.comfort.data['sótano']305    get_property.comfort[0].terraza = form.comfort.data['terraza']306    get_property.comfort[0].terraza_lavadero = form.comfort.data['terraza_lavadero']307    get_property.comfort[0].vestidor = form.comfort.data['vestidor']308    get_property.comfort[0].walkin_closet = form.comfort.data['walkin_closet']309    get_property.comfort[0].wifi = form.comfort.data['wifi']310    get_property.seguridad[0].alarma = form.seguridad.data['alarma']311    get_property.seguridad[0].cámaras_cctv = form.seguridad.data['cámaras_cctv']312    get_property.seguridad[0].cerca_perimetral = form.seguridad.data['cerca_perimetral']313    get_property.seguridad[0].porterÃa_24hs = form.seguridad.data['porterÃa_24hs']314    get_property.seguridad[0].portón_eléctrico = form.seguridad.data['portón_eléctrico']315    get_property.seguridad[0].rejas = form.seguridad.data['rejas']316    get_property.seguridad[0].guardia_de_seguridad = form.seguridad.data['guardia_de_seguridad']317def paginacion(page,step,id,prop_query):318    print(page,step,id)319    destacados_count = prop_query.filter(Properties.pausado == False,Properties.destacado == 1).count()320    if (step == 1):321        if ((page-1)*9 < destacados_count):322            get_properties = prop_query.filter(Properties.pausado == False,Properties.destacado == 1,Properties.id > id).limit(9).all()323            properties_count = len(get_properties)324            if (properties_count < 9):325                get_properties_left = prop_query.filter(Properties.pausado == False,Properties.destacado == 0).limit(9-properties_count).all()326                for propiedades in get_properties_left:327                    get_properties.append(propiedades)328            return get_properties329        elif ((page-1)*9 == destacados_count):330            get_properties = prop_query.filter(Properties.pausado == False,Properties.destacado == 0).limit(9).all()331            return get_properties332        else:333            get_properties = prop_query.filter(Properties.pausado == False,Properties.destacado == 0,Properties.id > id).limit(9).all()334            return get_properties335    else :336        if ((page*9)+1 > destacados_count):337            properties_count = prop_query.filter(Properties.pausado == False,Properties.destacado == 0,Properties.id < id).count()338            if (properties_count < 9):339                get_properties_left = prop_query.order_by().filter(Properties.pausado == False,Properties.destacado == 0,Properties.id < id).all()340                get_properties = prop_query.order_by(Properties.id.desc()).filter(Properties.pausado == False,Properties.destacado == 1).limit(9-properties_count).all()341                get_properties = get_properties[::-1]342                for propiedades in get_properties_left:343                    get_properties.append(propiedades)344            return get_properties345        elif ((page*9)+1 == destacados_count):346            get_properties = prop_query.order_by(Properties.id.desc()).filter(Properties.pausado == False,Properties.destacado == 1).limit(9).all()347            get_properties = get_properties[::-1]348            return get_properties349        else:350            get_properties = prop_query.filter(Properties.pausado == False,Properties.destacado == 1,Properties.id < id).limit(9).all()351            return get_properties352@app.route('/caca')353def caca():354    a1 = Properties.query.all()355    start = os.getcwd()356    for a in a1:357        os.mkdir(start + '/main/static/imgs/' + a.ref)358        os.chdir(start + '/main/static/imgs/' + a.ref)359        for i in range(1,15):360            pic = getattr(a,'photos'+ str(i))361            if pic is not None:362                im = Image.open(io.BytesIO(pic))363                im.save(os.getcwd() +'/'+ str(i) + '.JPEG')364                im.close()365@app.route('/')366#@profile367def index():368    barrios_query = Barrios.query.all()369    p_show = []370    aux = []371    i = 0372    get_properties = Properties.query.filter(Properties.pausado == False,Properties.destacado == 1).limit(9).all()373    properties_count = len(get_properties) if get_properties is not None else 0374    if (properties_count < 9):375        get_properties_left = Properties.query.filter(Properties.pausado == False,Properties.destacado == 0).limit(9-properties_count).all()376        for propiedades in get_properties_left:377            get_properties.append(propiedades)378    #print(get_properties)379    paginas = Properties.query.count()380    p_show = properties_mtx(get_properties,3)381    #print(p_show[0])382    paginas = math.ceil(int(paginas)/9) if paginas != '0' else 1383    return render_template('index-premium.html', barrios = barrios_query, 384    get_properties = p_show, paginas = paginas, pagina = 1)385@app.route('/page')386#@profile387def page():388    barrios_query = Barrios.query.all()389    p_show = []390    aux = []391    i = 0392    get_properties = Properties.query.filter(Properties.pausado == False,Properties.destacado == 1).limit(9).all()393    properties_count = len(get_properties) if get_properties is not None else 0394    if (properties_count < 9):395        get_properties_left = Properties.query.filter(Properties.pausado == False,Properties.destacado == 0).limit(9-properties_count).all()396        for propiedades in get_properties_left:397            get_properties.append(propiedades)398    #print(get_properties)399    paginas = Properties.query.count()400    p_show = properties_mtx(get_properties,3)401    #print(p_show[0])402    paginas = math.ceil(int(paginas)/9) if paginas != '0' else 1403    return render_template('index-premium-pag.html', barrios = barrios_query, 404    get_properties = p_show, paginas = paginas, pagina = 1,operacion_title = "Todas las propiedades")405@app.route('/<int:page>/<int:step>/<int:id>')406def index_paginas(page,step,id):407    print(page,step,id)408    p_search = False409    p_show = []410    aux = []411    barrios_query = Barrios.query.all()412    destacados_count = Properties.query.filter(Properties.pausado == False,Properties.destacado == 1).count()413    print(destacados_count)414    get_properties = paginacion(page,step,id,Properties.query)415    paginas = Properties.query.count()416    p_show = properties_mtx(get_properties,3)417    #print(p_show) 418    paginas = math.ceil(int(paginas)/9) if paginas != '0' else 1419    print('                      ' , p_show[0][0][0].id)420    #if (id == paginas)421    return render_template('index-premium-pag.html', 422    get_properties = p_show, barrios = barrios_query, pagina = page, 423    paginas = paginas, p_search = p_search,operacion_title = "Todas las propiedades")   424@app.route('/delete/<id>', methods=['GET'])425def delete(id):426    # try:427        com_deletes = Comfort.query.filter_by(id = id).delete()428        sec_deletes = Seguridad.query.filter_by(id = id).delete()429        p_deletes = Properties.query.filter_by(id = id).delete()430        db.session.commit()431    # except Exception:432    #   flash('No es posible eliminar esta propiedad')433        return redirect(url_for('admin',section = 'home'))434@app.route('/paused/<id>', methods=['GET'])435def pause(id):436    prop = Properties.query.filter_by(id = id).first()437    if prop.pausado == True:438        prop.pausado = False439        db.session.commit()440        return redirect(url_for('admin',section = 'paused'))441    else:442        prop.pausado = True443        db.session.commit()444        return redirect(url_for('admin',section = 'home'))445@app.route('/p_search', methods=['POST', 'GET'])446def search_page():447    barrios_query = Barrios.query.all()448    querys = Properties.query449    errores = {}450    print('asdasdasd',request.form)451    currency = request.form['currency']452    precio_min = request.form['precio_min']453    precio_max = request.form['precio_max']454    metraje_min = request.form['metraje_min']455    metraje_max = request.form['metraje_max']456    if  request.form['ref'] != '':457        flag = True 458        querys = querys.filter_by(ref = request.form['ref'])    459    if request.form['dormitorios'] != '':460        flag = True 461        querys = querys.filter_by(dormitorios = request.form['dormitorios'])462    if request.form['baños'] != '':463        flag = True464        querys = querys.filter_by(baños = request.form['baños']) 465    if request.form['barrio'] != '':466        flag = True467        querys = querys.filter(Properties.barrio.has(barrio=request.form['barrio']))468        469    if request.form['operacion']:470        flag = True471        querys = querys.filter(Properties.operaciones.has(operacion=request.form['operacion']))472    if request.form['tipo_propiedad']:473        flag = True474        querys = querys.filter(Properties.tipo_propiedad.has(tipo_propiedad=request.form['tipo_propiedad']))475    #....PRECIOS QUERY & erroresHANDLING...........................476    query1 = querys477    if(currency == 'precio_dolares'):478        query_precio = False479        query_precio1 = False480        if precio_min != '':481            if not is_number(precio_min):482                errores["precio_min"] = "No es un numero"483            else:484                flag = True485                query_precio = True486                query1 = query1.filter(Properties.precio_dolares >= precio_min)487        if precio_max != '':488            if not is_number(precio_max):489                errores["precio_max"] = "No es un numero"490            else:491                flag = True492                query_precio1 = True493                query1 = query1.filter(Properties.precio_dolares <= precio_max)494        if query_precio and query_precio1 and precio_min > precio_max:495            query1 = querys496            errores["precio_min"] = "Diferencia invalida"497            errores["precio_max"] = "Diferencia invalida"498    else:499        query_precio = False500        query_precio1 = False501        if precio_min != '':502            query_precio = False503            if not is_number(precio_min):504                errores["precio_min"] = "No es un numero"505            else:506                flag = True507                query_precio = True508                query1 = query1.filter(Properties.precio_pesos >= precio_min)509        if precio_max != '':510            query_precio1 = False511            if not is_number(precio_max):512                errores["precio_max"] = "No es un numero"513            else:514                flag = True515                query_precio1 = True516                query1 = query1.filter(Properties.precio_pesos <= precio_max)517        if query_precio and query_precio1 and precio_min > precio_max:518            query1 = querys519            errores["precio_min"] = "Diferencia invalida"520            errores["precio_max"] = "Diferencia invalida"521    522    523    #....METRAJE QUERY & erroresHANDLING...........................524    query2 = query1525    query_metraje = False526    query_metraje1 = False527    if metraje_min != '':        528        if not is_number(metraje_min):529            errores["metraje_min"] = "No es un numero"530        else:531            flag = True532            query_metraje = True533            query2 = query2.filter(Properties.metraje_edificio >= metraje_min)534    if metraje_max != '':535        if not is_number(metraje_max):536            errores["metraje_max"] = "No es un numero"537        else:538            flag = True539            query_metraje1 = True540            query2 = query2.filter(Properties.metraje_edificio <= metraje_max)541    if query_metraje and query_metraje1 and metraje_min > metraje_max:542        query2 = querys543        errores["metraje_min"] = "Diferencia invalida"544        errores["metraje_max"] = "Diferencia invalida"545    print(query2)546    search_results = query2 if flag==True else False547    print('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4', search_results)548    if (search_results):549        paginas = search_results.count()550        if(paginas == 0):551            flash("Sin resultados")552            return redirect(url_for('page'))553        get_properties = search_results.filter(Properties.pausado == False,Properties.destacado == 1).limit(9).all()554        properties_count = len(get_properties) if get_properties is not None else 0555        if (properties_count < 9):556            search_results_left = search_results.filter(Properties.pausado == False,Properties.destacado == 0).limit(9-properties_count).all()557            for propiedades in search_results_left:558                get_properties.append(propiedades)559        session['busqueda'] = request.form 560    else:561        #p_show = Properties.query.limit(30).all()562        return redirect(url_for('page'))563    print(errores,[e for e in errores])564    print(get_properties)565    p_show = properties_mtx(get_properties,3)566    paginas = math.ceil(int(paginas)/9)567    return render_template('index-premium-pag.html', barrios = barrios_query,568    paginas = paginas, pagina = 1, 569    get_properties=p_show, errores=errores, p_search = True)570@app.route('/p_search/<int:page>/<int:step>/<int:id>', methods=['POST', 'GET'])571def search(page,step,id):572    barrios_query = Barrios.query.all()573    querys = Properties.query574    flag = False575    errores = {}576    print('asdasdasd',session.get('busqueda'))577    currency = session.get('busqueda')['currency']578    precio_min = session.get('busqueda')['precio_min']579    precio_max = session.get('busqueda')['precio_max']580    metraje_min = session.get('busqueda')['metraje_min']581    metraje_max = session.get('busqueda')['metraje_max']582    if  session.get('busqueda')['ref'] != '':583        flag = True 584        querys = querys.filter_by(ref = session.get('busqueda')['ref'])    585    if session.get('busqueda')['dormitorios'] != '':586        flag = True 587        querys = querys.filter_by(dormitorios = session.get('busqueda')['dormitorios'])588    if session.get('busqueda')['baños'] != '':589        flag = True590        querys = querys.filter_by(baños = session.get('busqueda')['baños']) 591    if session.get('busqueda')['barrio'] != '':592        flag = True593        querys = querys.filter(Properties.barrio.has(barrio=session.get('busqueda')['barrio']))        594    if session.get('busqueda')['operacion']:595        flag = True596        querys = querys.filter(Properties.operaciones.has(operacion=session.get('busqueda')['operacion']))597    if session.get('busqueda')['tipo_propiedad']:598        flag = True599        querys = querys.filter(Properties.tipo_propiedad.has(tipo_propiedad=session.get('busqueda')['tipo_propiedad']))600    #....PRECIOS QUERY & erroresHANDLING...........................601    query1 = querys602    if(currency == 'precio_dolares'):603        query_precio = False604        query_precio1 = False605        if precio_min != '':606            if not is_number(precio_min):607                errores["precio_min"] = "No es un numero"608            else:609                flag = True610                query_precio = True611                query1 = query1.filter(Properties.precio_dolares >= precio_min)612        if precio_max != '':613            if not is_number(precio_max):614                errores["precio_max"] = "No es un numero"615            else:616                flag = True617                query_precio1 = True618                query1 = query1.filter(Properties.precio_dolares <= precio_max)619        if query_precio and query_precio1 and precio_min > precio_max:620            query1 = querys621            errores["precio_min"] = "Diferencia invalida"622            errores["precio_max"] = "Diferencia invalida"623    else:624        query_precio = False625        query_precio1 = False626        if precio_min != '':627            if not is_number(precio_min):628                errores["precio_min"] = "No es un numero"629            else:630                flag = True631                query_precio = True632                query1 = query1.filter(Properties.precio_pesos >= precio_min)633        if precio_max != '':634            if not is_number(precio_max):635                errores["precio_max"] = "No es un numero"636            else:637                flag = True638                query_precio1 = True639                query1 = query1.filter(Properties.precio_pesos <= precio_max)640        if query_precio and query_precio1 and precio_min > precio_max:641            query1 = querys642            errores["precio_min"] = "Diferencia invalida"643            errores["precio_max"] = "Diferencia invalida"        644    #....METRAJE QUERY & erroresHANDLING...........................645    query2 = query1646    query_metraje = False647    query_metraje1 = False648    if metraje_min != '':649        if not is_number(metraje_min):650            errores["metraje_min"] = "No es un numero"651        else:652            flag = True653            query_metraje = True654            query2 = query2.filter(Properties.metraje_edificio >= metraje_min)655    if metraje_max != '':656        if not is_number(metraje_max):657            errores["metraje_max"] = "No es un numero"658        else:659            flag = True660            query_metraje1 = True661            query2 = query2.filter(Properties.metraje_edificio <= metraje_max)662    if query_metraje and query_metraje1 and metraje_min > metraje_max:663        query2 = querys664        errores["metraje_min"] = "Diferencia invalida"665        errores["metraje_max"] = "Diferencia invalida"666    print(query2)667    search_results = query2 if flag==True else False668    if (search_results != False):669        paginas = search_results.count()670        if(paginas == 0):671            return redirect(url_for('page'))672        search_results = paginacion(page,step,id,search_results)673    else:674        return redirect(url_for('page'))675    print(errores,[e for e in errores])676    print(search_results)677    p_show = properties_mtx(search_results,3)678    paginas = math.ceil(int(paginas)/9)679    return render_template('index-premium-pag.html', barrios = barrios_query, 680    paginas = paginas, pagina = page, get_properties=p_show, 681    errores=errores, p_search = True)682@app.route('/admin-search', methods=['POST', 'GET'])683def admin_search():684    barrios_query = Barrios.query.all()685    querys = Properties.query686    flag = False687    errores = {}688    print('asdasdasd',request.form)689    currency = request.form['currency']690    precio_min = request.form['precio_min']691    precio_max = request.form['precio_max']692    metraje_min = request.form['metraje_min']693    metraje_max = request.form['metraje_max']694    if  request.form['ref'] != '':695        flag = True 696        querys = querys.filter_by(ref = request.form['ref'])    697    if request.form['dormitorios'] != '':698        flag = True 699        querys = querys.filter_by(dormitorios = request.form['dormitorios'])700    if request.form['baños'] != '':701        flag = True702        querys = querys.filter_by(baños = request.form['baños']) 703    if request.form['barrio'] != '':704        flag = True705        querys = querys.filter(Properties.barrio.has(barrio=request.form['barrio']))        706    if request.form['operacion']:707        flag = True708        querys = querys.filter(Properties.operaciones.has(operacion=request.form['operacion']))709    if request.form['tipo_propiedad']:710        flag = True711        querys = querys.filter(Properties.tipo_propiedad.has(tipo_propiedad=request.form['tipo_propiedad']))712    #....PRECIOS QUERY & erroresHANDLING...........................713    query1 = querys714    if(currency == 'precio_dolares'):715        query_precio = False716        query_precio1 = False717        if precio_min != '':718            if not is_number(precio_min):719                errores["precio_min"] = "No es un numero"720            else:721                flag = True722                query_precio = True723                query1 = query1.filter(Properties.precio_dolares >= precio_min)724        if precio_max != '':725            if not is_number(precio_max):726                errores["precio_max"] = "No es un numero"727            else:728                flag = True729                query_precio1 = True730                query1 = query1.filter(Properties.precio_dolares <= precio_max)731        if query_precio and query_precio1 and precio_min > precio_max:732            query1 = querys733            errores["precio_min"] = "Diferencia invalida"734            errores["precio_max"] = "Diferencia invalida"735    else:736        query_precio = False737        query_precio1 = False738        if precio_min != '':739            if not is_number(precio_min):740                errores["precio_min"] = "No es un numero"741            else:742                flag = True743                query_precio = True744                query1 = query1.filter(Properties.precio_pesos >= precio_min)745        if precio_max != '':746            if not is_number(precio_max):747                errores["precio_max"] = "No es un numero"748            else:749                flag = True750                query_precio1 = True751                query1 = query1.filter(Properties.precio_pesos <= precio_max)752        if query_precio and query_precio1 and precio_min > precio_max:753            query1 = querys754            errores["precio_min"] = "Diferencia invalida"755            errores["precio_max"] = "Diferencia invalida"        756    #....METRAJE QUERY & erroresHANDLING...........................757    query2 = query1758    query_metraje = False759    query_metraje1 = False760    if metraje_min != '':761        if not is_number(metraje_min):762            errores["metraje_min"] = "No es un numero"763        else:764            flag = True765            query_metraje = True766            query2 = query2.filter(Properties.metraje_edificio >= metraje_min)767    if metraje_max != '':768        if not is_number(metraje_max):769            errores["metraje_max"] = "No es un numero"770        else:771            flag = True772            query_metraje1 = True773            query2 = query2.filter(Properties.metraje_edificio <= metraje_max)774    if query_metraje is not None and query_metraje1 is not None and metraje_min > metraje_max:775        query2 = querys776        errores["metraje_min"] = "Diferencia invalida"777        errores["metraje_max"] = "Diferencia invalida"778    print(query2)779    search_results = query2 if flag==True else False780    if (search_results != False):781        paginas = search_results.count()782        if(paginas == 0):783            flash('No se encontro ninguna propiedad')784            return redirect(url_for('admin', section="home"))785        search_results = search_results.order_by(Properties.destacado).all()786    else:787        return redirect(url_for('admin', section="home"))788    print(errores,[e for e in errores])789    print(query2)790    properties_fotos_concat = []791    for p in search_results:792        foto = get_img(p.ref)793        properties_fotos_concat.append([p,foto]) 794    barrios_query = Barrios.query.all()795    form = PropertyForm()796    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()797    return render_template('admin.html', questions_amount=contactquestions_amount, barrios = barrios_query, 798    get_properties=properties_fotos_concat, errores=errores, form=form)799@app.route('/ventas', methods=['GET'])800def ventas():801    ventas = True802    barrios_query = Barrios.query.all()803    p_show = []804    get_properties = Properties.query.filter(Properties.pausado == False,Properties.destacado == 1,Properties.operacion_id == 1).limit(9).all()805    properties_count = len(get_properties) if get_properties is not None else 0806    if (properties_count < 9):807        get_properties_left = Properties.query.filter(Properties.pausado == False,Properties.destacado == 0,Properties.operacion_id == 1).limit(9-properties_count).all()808        for propiedades in get_properties_left:809            get_properties.append(propiedades)810    paginas =Properties.query.filter_by(operacion_id = 1).count()811    print([propiedad.id for propiedad in get_properties])812    p_show = properties_mtx(get_properties,3)813    paginas = math.ceil(int(paginas)/9) if paginas != '0' else 1 814    return render_template('index-premium-pag.html', barrios = barrios_query, 815    get_properties = p_show, paginas = paginas, pagina = 1,ventas = ventas,operacion_title = "Propiedades en venta")816@app.route('/ventas/<int:page>/<int:step>/<int:id>', methods=['GET'])817def ventas_pag(page,step,id):818    ventas = True819    barrios_query = Barrios.query.all()820    p_show = []821    get_properties = paginacion(page,step,id,Properties.query.filter(Properties.operacion_id==1))822    if (get_properties == []):823        return redirect(url_for('ventas'))824    paginas = Properties.query.filter_by(operacion_id = 1).count()825    p_show = properties_mtx(get_properties,3)826    paginas = math.ceil(int(paginas)/9) if paginas != '0' else 1 827    return render_template('index-premium-pag.html', barrios = barrios_query, 828    get_properties = p_show, paginas = paginas, pagina = page,  ventas = ventas,operacion_title = "Propiedades en venta")829@app.route('/alquiler', methods=['GET'])830def alquiler():831    alquiler = True832    barrios_query = Barrios.query.all()833    p_show = []834    get_properties = Properties.query.filter(Properties.pausado == False,Properties.destacado == 1,Properties.operacion_id == 2).limit(9).all()835    properties_count = len(get_properties) if get_properties is not None else 0836    if (properties_count < 9):837        get_properties_left = Properties.query.filter(Properties.pausado == False,Properties.destacado == 0,Properties.operacion_id == 2).limit(9-properties_count).all()838        for propiedades in get_properties_left:839            get_properties.append(propiedades)840    paginas = Properties.query.filter_by(operacion_id = 2).count()841    p_show = properties_mtx(get_properties,3)842    paginas = math.ceil(int(paginas)/9) if paginas != '0' else 1843    return render_template('index-premium-pag.html', barrios = barrios_query, 844    get_properties = p_show, paginas = paginas, pagina = 1, alquiler = alquiler,operacion_title = "Propiedades en alquiler")845@app.route('/alquiler/<int:page>/<int:step>/<int:id>', methods=['GET'])846def alquiler_pag(page,step,id):847    alquiler = True848    barrios_query = Barrios.query.all()849    p_show = []850    get_properties = paginacion(page,step,id,Properties.query.filter(Properties.pausado == False,Properties.operacion_id==2))851    print('asdasdas',get_properties)852    if (get_properties == []):853        return redirect(url_for('alquiler'))854    paginas = Properties.query.filter_by(operacion_id = 2).count()855    p_show = properties_mtx(get_properties,3)856    paginas = math.ceil(int(paginas)/9) if paginas != '0' else 1857    return render_template('index-premium-pag.html', barrios = barrios_query, 858    get_properties = p_show, paginas = paginas, pagina = page ,alquiler = alquiler,operacion_title = "Propiedades en alquiler")859@app.route('/contact-mail', methods=['POST', 'GET'])860def contact_questions():861    new_question = Contactquestions(complete_name = request.form['contact-name'], 862    mail = request.form['contact-email'], phone = request.form['contact-phone'], 863    question = request.form['contact-question'])864    db.session.add(new_question)865    db.session.commit()866    flash("Pregunta enviada correctamente!")867    return redirect(url_for('index'))868@app.route('/question-mail', methods=['POST', 'GET'])869def property_questions():870    id = request.form['contact-property_id']871    new_question = Contactquestions(property_id=request.form['contact-property_id'],complete_name = "Buscando propiedad", 872    mail = request.form['contact-email'], phone = request.form['contact-phone'], 873    question = request.form['contact-question'])874    db.session.add(new_question)875    db.session.commit()876    flash("Pregunta enviada correctamente!")877    return redirect(url_for('profile', id=id))878@profile879@app.route('/admin/<section>')880#@login_required881def admin(section):882    test = []883    form = PropertyForm()884    barrios_query = Barrios.query.all()885    propietarios = Propietarios.query.all()886    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()887    if section == "insert":888        get_properties = Properties.query.with_entities(Properties.ref).all()889        print(get_properties)890        return render_template('insert.html',form=form,get_properties = get_properties,propietarios=propietarios)891    if section == "home":892        get_properties = Properties.query.filter_by(pausado=0).all()893        for propiedades in get_properties:894            foto = get_img(propiedades.ref)895            test.append([propiedades,foto])896        print(get_properties)897        section="home"898        return render_template('admin.html', barrios = barrios_query, propietarios=propietarios,get_properties=test, 899        form=form, questions_amount=contactquestions_amount, section=section)900    if section == "sale":901        get_properties = Properties.query.filter_by(operacion_id = 1, pausado = 0).all()#THE ONE THAT CHANGES902        for propiedades in get_properties:903            foto = get_img(propiedades.ref)904            test.append([propiedades,foto])      905        print(get_properties)906        section="sale"907        return render_template('admin.html', propietarios=propietarios,barrios = barrios_query, get_properties = test, 908        form=form, questions_amount=contactquestions_amount, base64=base64, section=section)909    if section == "rent":910        get_properties = Properties.query.filter_by(operacion_id = 2, pausado = 0).all()#THE ONE THAT CHANGES911        for propiedades in get_properties:912            foto = get_img(propiedades.ref)913            test.append([propiedades,foto])       914        print(get_properties)915        section="rent"916        return render_template('admin.html', barrios = barrios_query, get_properties = test, 917        form=form, propietarios=propietarios,questions_amount=contactquestions_amount, base64=base64, section=section)918    if section == "paused":919        get_properties = Properties.query.filter_by(pausado = 1).all()#THE ONE THAT CHANGES920        for propiedades in get_properties:921            foto = get_img(propiedades.ref)922            test.append([propiedades,foto])        923        print(get_properties)924        section="paused"925        return render_template('admin.html', propietarios=propietarios,barrios = barrios_query, get_properties = test, 926        form=form, questions_amount=contactquestions_amount, section=section)927@profile      928@app.route('/update/<id>', methods=['GET', 'POST'])929#@login_required930def update(id):931    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()932    get_properties = Properties.query.get(id)933    form = PropertyForm()934    assign_properties_to_from(form,get_properties)935    propietarios = Propietarios.query.all()936    barrios = Barrios.query.all()937    print(form.data,get_properties.titulo)938    return render_template('asdasd.html', 939    form = form,fotos = get_imgs(get_properties.ref), propietarios = propietarios,questions_amount=contactquestions_amount,id = id,barrios = barrios, base64=base64)940@app.route('/about')941def about():942    return render_template('about.html')943    944@profile945@app.route('/edit-property/<int:id>', methods=['POST'])946#@login_required947def edit_property(id):948    print(request.files.getlist('change_pic[]'))949    change_pic = [a for a in request.files.getlist('change_pic[]') if a.filename != '']950    print(change_pic)951    form = PropertyForm()952    flag = True953    added_imgs = request.files.getlist('pics')954    get_property = Properties.query.get(id)955    path_to_ref = imgs_dir + '/' + get_property.ref956    all_imgs = os.listdir(path_to_ref)957    # Check when a pic is re-changed (if is pushed to change_pic array or changed content within same index)958    if request.args.getlist('change[]'):959        updates_imgs = zip(request.args.getlist('change[]') ,change_pic)960        for update in updates_imgs:961            print('werrrrrrrrr',update[1])962            fext = update[1].filename.split('.')963            print(fext[-1])964            img_fullname = all_imgs[int(update[0])-1]965            os.remove(path_to_ref + '/' + img_fullname)966            im = Image.open(update[1]).save(path_to_ref + '/' + str(update[0]) + '.' + fext[-1])967    if request.args.getlist('delete[]'): 968        deletes = request.args.getlist('delete[]')969        del_check = del_imgs(get_property.ref,deletes)970    added_imgs = request.files.getlist('pics')971    print(added_imgs[0].filename)972    #Condicional por si el input no trae ninguna imagen973    if added_imgs[0].filename != '':974        all_imgs = os.listdir(path_to_ref)975        added_imgs_count = len(added_imgs)976        total_imgs = len(all_imgs)977        i = 0978        while (i < added_imgs_count and total_imgs < 15):979            ext = added_imgs[i].filename.split('.')980            print(ext)981            img_check = add_imgs(path_to_ref,added_imgs[i], str(total_imgs+1) +'.'+ ext[-1])982            i+=1983            total_imgs =+ 1984        pics_amount_condition_check = i == added_imgs_count985        if (not pics_amount_condition_check):986            flag = False987            flash('Demasiadas fotos, las ultimas ' + str(added_imgs_count-i) + ' no fueron ingresadas')988    if form.validate_on_submit() and flag:       989        ref_check = Properties.query.filter_by(ref = form.data['ref']).first()990        if (form.data['precio_dolares'] == '' and form.data['precio_dolares'] == ''):991            flag = False992            flash("La propiedad necesita un precio")993        if (ref_check is not None and ref_check.id != get_property.id):994            flag = False   995            flash("La referencia tiene que ser unica")996        if not flag:997            contactquestions_amount = Contactquestions.query.filter_by(read=False).count()998            propietarios = Propietarios.query.all()999            barrios = Barrios.query.all()1000            fotos = get_imgs(get_property.ref)1001            print(form.errors)1002            for error in form.errors:1003                form.errors[error][0] = 'Valor no valido'1004                print(error)1005            return render_template('asdasd.html', 1006            form = form,fotos = fotos, propietarios = propietarios,questions_amount=contactquestions_amount,id = id,barrios = barrios, base64=base64)1007        else:1008            assign_form_to_properties(get_property,form)1009            db.session.commit()1010    else:1011        contactquestions_amount = Contactquestions.query.filter_by(read=False).count()1012        propietarios = Propietarios.query.all()1013        barrios = Barrios.query.all()1014        fotos = get_imgs(get_property.ref)1015        print(form.errors)1016        for error in form.errors:1017            form.errors[error][0] = 'Valor no valido'1018            print(error)1019        return render_template('asdasd.html', 1020        form = form,fotos = fotos, propietarios = propietarios,questions_amount=contactquestions_amount,id = id,barrios = barrios, base64=base64)1021    return redirect(url_for('admin', section='home'))1022@app.route('/profile/<id>')1023def profile(id):1024    get_property = Properties.query.filter_by(id = id).first()1025    comodidades = Comfort.query.filter_by(id = id).first()1026    seguridad = Seguridad.query.filter_by(id = id).first()1027    fotos = get_imgs(get_property.ref)1028    return render_template('profile.html', 1029    get_property = get_property, fotos = fotos,1030    comfort = comodidades,1031    seguridad = seguridad)1032@app.route('/insertation', methods=['POST','GET'])1033# @login_required1034def insertation():1035    form = PropertyForm()1036    fotos_count = len(form.fotos.data)1037    flag = True1038    print('asd')1039    if form.validate_on_submit():1040        ref_check = Properties.query.filter_by(ref = request.form['ref']).first()1041        ref_check = Properties.query.filter_by(ref = request.form['ref'].upper()).first() if ref_check is None else ref_check1042        print(ref_check,request.form['ref'])1043        if (form.data['precio_pesos'] == '' and form.data['precio_dolares'] == ''):1044            flag = False1045            flash("La propiedad necesita un precio")1046        if (fotos_count > 15):1047            flag = False1048            flash("Demasiadas fotos, maximo 15")1049        if (ref_check is not None):1050            flag = False1051            flash("La referencia tiene que ser unica")1052        if flag:1053            barrio = Barrios.query.filter_by(barrio = form.data['barrio']).first()1054            operacion = Operaciones.query.filter_by(operacion = form.data['operacion']).first()1055            tipo_propiedad = Tipo_propiedad.query.filter_by(tipo_propiedad = form.data['tipo_propiedad']).first()1056            store_imgs(form.data['ref'],form.fotos.data)1057            propietario_query = Propietarios.query.filter_by(telefono = form.data['telefono']).first()1058            if propietario_query is None:1059                propietario_add = Propietarios(nombre = form.data['nombre'], apellido = form.data['apellido'], email = form.data['email'], telefono = form.data['telefono'])     1060                db.session.add(propietario_add)1061                db.session.commit()1062                propietario_query = Propietarios.query.filter_by(telefono = form.data['telefono']).first()1063                print(propietario_query.id)1064            property_data = Properties(operacion_id = operacion.id,1065            pausado = 0,1066            fecha_publicacion = date.today(),1067            tipo_propiedad_id = tipo_propiedad.id,1068            propietario_id = propietario_query.id,1069            barrio_id = barrio.id,1070            destacado = form.data['destacado'],1071            ref = request.form['ref'],1072            distancia_al_mar = form.data['distancia_al_mar'],1073            titulo = request.form['titulo'],1074            direccion = request.form['direccion'],1075            descripcion = form.data['descripcion'],1076            precio_dolares = abs(form.data['precio_dolares']) if form.data['precio_dolares'] else None,1077            precio_pesos = abs(form.data['precio_pesos']) if form.data['precio_pesos'] else None,1078            metraje_edificio = form.data['metraje_edificio'],1079            metraje_patio = form.data['metraje_patio'],1080            metraje_total = form.data['metraje_edificio'] if form.data['metraje_patio'] is None else form.data['metraje_edificio'] + form.data['metraje_patio'],1081            baños = form.data['baños'],1082            dormitorios = form.data['dormitorios'],1083            permuta = form.data['permuta'] if form.data['permuta'] != 2 else None,1084            financia = form.data['financia'] if form.data['financia'] != 2 else None,1085            garaje = form.data['garaje'],1086            estado = form.data['estado'],1087            orientacion = form.data['orientacion'],1088            disposicion = form.data['disposicion'],1089            n_plantas = form.data['n_plantas'])1090            db.session.add(property_data)1091            db.session.commit()1092            comfort = Comfort(agua_caliente = form.comfort.data['agua_caliente'],1093                        aire_acondicionado = form.comfort.data['aire_acondicionado'],1094                        altillo = form.comfort.data['altillo'],1095                        amueblada = form.comfort.data['amueblada'],1096                        balcón = form.comfort.data['balcón'],1097                        barbacoa = form.comfort.data['barbacoa'],1098                        box = form.comfort.data['box'],1099                        bungalow = form.comfort.data['bungalow'],1100                        calefacción = form.comfort.data['calefacción'],1101                        depósito = form.comfort.data['depósito'],1102                        dormitorio_de_servicio = form.comfort.data['dormitorio_de_servicio'],1103                        estufa_leña = form.comfort.data['estufa_leña'],1104                        garaje = form.comfort.data['garaje'],1105                        gas_por_cañerÃa = form.comfort.data['gas_por_cañerÃa'],1106                        gym = form.comfort.data['gym'],1107                        instalación_de_tv_cable = form.comfort.data['instalación_de_tv_cable'],1108                        jacuzzi = form.comfort.data['jacuzzi'],1109                        jardÃn = form.comfort.data['jardÃn'],1110                        lavadero = form.comfort.data['lavadero'],1111                        lavanderÃa = form.comfort.data['lavanderÃa'],1112                        linea_blanca = form.comfort.data['linea_blanca'],1113                        living_comedor = form.comfort.data['living_comedor'],1114                        losa_radiante = form.comfort.data['losa_radiante'],1115                        parrillero = form.comfort.data['parrillero'],1116                        patio = form.comfort.data['patio'],1117                        piscina = form.comfort.data['piscina'],1118                        piso_porcelanato = form.comfort.data['piso_porcelanato'],1119                        placard_en_la_cocina = form.comfort.data['placard_en_la_cocina'],1120                        placard_en_dormitorio = form.comfort.data['placard_en_dormitorio'],1121                        playroom = form.comfort.data['playroom'],1122                        previsión_aa = form.comfort.data['previsión_aa'],1123                        sauna = form.comfort.data['sauna'],1124                        sótano = form.comfort.data['sótano'],1125                        terraza = form.comfort.data['terraza'],1126                        terraza_lavadero = form.comfort.data['terraza_lavadero'],1127                        vestidor = form.comfort.data['vestidor'],1128                        vista_al_mar = form.comfort.data['vista_al_mar'],1129                        walkin_closet = form.comfort.data['walkin_closet'],1130                        wifi = form.comfort.data['wifi'])1131            seguridad = Seguridad( alarma = form.seguridad.data['alarma'],1132                        cámaras_cctv = form.seguridad.data['cámaras_cctv'],1133                        cerca_perimetral = form.seguridad.data['cerca_perimetral'],1134                        porterÃa_24hs = form.seguridad.data['porterÃa_24hs'],1135                        portón_eléctrico = form.seguridad.data['portón_eléctrico'],1136                        rejas = form.seguridad.data['rejas'],1137                        guardia_de_seguridad = form.seguridad.data['guardia_de_seguridad'])1138            db.session.add_all([comfort,seguridad])1139            db.session.commit()1140            flash('Ingreso completado con exito')1141            return redirect(url_for('admin',section='home'))1142    barrios_query = Barrios.query.all()1143    propietarios = Propietarios.query.all()1144    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()1145    get_properties = Properties.query.all()1146    return render_template('insert.html', barrios = barrios_query, propietarios=propietarios,get_properties = get_properties,    1147    form=form, questions_amount=contactquestions_amount, section="home")1148@app.route('/insert-propietario', methods=['POST','GET'])1149@login_required1150def insert_propietario():1151    propietario_mail  = request.form['email']1152    propietario_check = Propietarios.query.filter_by(email=propietario_mail).first()1153    if propietario_check:1154        return redirect(url_for('owners'))1155        flash("Propietario ya esta ingresado")1156    else:1157        propietario_add = Propietarios(nombre = request.form['nombre'], apellido = request.form['apellido'], email = request.form['email'], telefono = request.form['telefono'])     1158        db.session.add(propietario_add)1159        db.session.commit()1160        return redirect(url_for('owners'))1161        1162@app.route('/update-owner', methods=['POST', 'GET'])1163@login_required1164def update_owner():1165    owner_id = request.form['id']1166    get_owner = Propietarios.query.filter_by(id=owner_id).first()1167    get_owner.nombre = request.form['nombre']1168    get_owner.apellido = request.form['apellido']1169    get_owner.email = request.form['email']1170    get_owner.telefono = request.form['telefono']1171    try:1172        db.session.commit()1173    except Exception as e:1174        flash("Error! Hay otro propietario con esos datos")1175        print(e)1176    return redirect(url_for('owners'))1177@app.route('/propietarios')1178@login_required1179def owners():1180    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()1181    form = PropertyForm()1182    propietarios = Propietarios.query.all()1183    return render_template('owners.html', questions_amount=contactquestions_amount, form=form, propietarios=propietarios,base64 = base64)1184@app.route('/propietarios/<id>')1185@login_required1186def owner_profile(id):1187    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()1188    form = PropertyForm()1189    propietario = Propietarios.query.filter_by(id=id).first()1190    for propiedades in propietario.properties:1191        foto = get_img(propiedades.ref)1192        setattr(propiedades,'foto',foto)1193    print('asdasdasdasdasdasdasdasdsdasdasda',propietario.properties[0])1194    return render_template('owner-profile.html', questions_amount=contactquestions_amount, form=form, propietario=propietario)1195@app.route('/delete-prop/<id>', methods=['GET'])1196@login_required1197def delete_prop(id):1198    # try:1199        p_deletes = Properties.query.filter_by(id = id).delete()1200        com_deletes = Comfort.query.filter_by(id = id).delete()1201        sec_deletes = Seguridad.query.filter_by(id = id).delete()1202        db.session.commit()1203    # except Exception:1204    #     flash('No es posible eliminar esta propiedad')1205        return redirect(url_for('owner_profile', id=id))1206@app.route('/remove_owner/<id>', methods=['POST'])1207@login_required1208def remove_owner(id):1209    db.session.query(Propietarios).filter_by(id=id).delete()1210    db.session.commit()1211    flash("Propietario eliminado.")1212    return redirect(url_for('owners'))1213@app.route('/contact-page')1214def contactus():1215    return render_template('contact.html')1216@app.route('/subscribed', methods=['GET', 'POST'])1217def subscribers():1218    client_mail = request.form['email']1219    new_subscriber = Subscribers( mail=client_mail)1220    try:1221        db.session.add(new_subscriber)1222        db.session.commit()1223        flash("Te has suscripto correctamente")1224    except Exception as e:1225        flash("Este mail ya esta ingresado")1226        print(e)1227    return redirect(url_for('index'))1228@app.route('/login_page')1229def login_page():1230    return render_template('login.html')1231@app.route('/login', methods=['GET', 'POST'])1232def login():1233    admin_check = Admins.query.all() 1234    username = request.form['username']1235    password = request.form['userpass']1236    if admin_check != []:1237        i = 01238        while username != admin[i].user and password != admin[i].password:1239            i+=11240        if username == admin[i].user:1241            session['username'] = username1242            print(g.user)1243            return redirect(url_for('admin', section="home"))1244        else:1245            flash("Usuario incorrecto")1246            return redirect(url_for('login_page'))1247    else:1248        if username == "admin" and password == "pass":1249            session['username'] = username1250            print(g.user)1251            return redirect(url_for('admin', section="home"))1252        else:1253            flash("Usuario incorrecto")1254            return redirect(url_for('login_page'))1255    1256    # if request.form['username'] == username and request.form['userpass'] == userpass:1257    #     session['username'] = request.form['username']1258    #     print(g.user)1259    #     return redirect(url_for('admin', section="home"))1260    # else:1261    #     flash("Usuario incorrecto")1262    #     return redirect(url_for('login_page'))1263@app.route('/logout')1264def logout():1265    session['username'] = None1266    return redirect(url_for('index'))1267# ADMIN/SOCIAL ######################################################1268@app.route('/social/<section>')1269@login_required1270def social_page(section):1271    saved_amount = Contactquestions.query.filter_by(saved=True).count()1272    trash_amount = Contactquestions.query.filter_by(erased=True).count()1273    form = PropertyForm()1274    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()1275    get_subscribers = Subscribers.query.all()1276    subscribers_amount = Subscribers.query.count()1277    subscribers = Subscribers.query.all()1278    if section == "home":1279        get_questions = Contactquestions.query.filter_by(erased=False).all()#THE ONE THAT CHANGES1280        return render_template('social.html', form=form, 1281        subscribers_amount = subscribers_amount, subscribers=subscribers, 1282        questions = get_questions, section="home", trash_amount=trash_amount, saved_amount=saved_amount, questions_amount=contactquestions_amount, subscriber = get_subscribers)1283    if section == "saved":1284        get_questions = Contactquestions.query.filter_by(saved=True).all()#THE ONE THAT CHANGES1285        form = PropertyForm()1286        return render_template('social.html', form=form, 1287        subscribers_amount = subscribers_amount,  subscribers=subscribers,1288        questions = get_questions, section="saved", trash_amount=trash_amount, saved_amount=saved_amount, questions_amount=contactquestions_amount, subscriber = get_subscribers)1289    if section == "trash":1290        get_questions = Contactquestions.query.filter_by(erased=True).all()#THE ONE THAT CHANGES1291        return render_template('social.html', form=form, 1292        subscribers_amount = subscribers_amount,  subscribers=subscribers,1293        questions = get_questions, section="trash", trash_amount=trash_amount, saved_amount=saved_amount, questions_amount=contactquestions_amount, subscriber = get_subscribers)1294@app.route('/readed/<id>', methods=['POST'])1295@login_required1296def readed(id):1297    get_question = Contactquestions.query.filter_by(id=id).first()1298    get_question.read = True1299    db.session.commit()1300    return redirect(url_for('social_page', section="home"))1301@app.route('/answered/<id>', methods=['POST'])1302@login_required1303def answered(id):1304    get_question = Contactquestions.query.filter_by(id=id).first()1305    get_question.answered = True1306    get_question.read = True1307    db.session.commit()1308    return redirect(url_for('social_page', section="home"))1309@app.route('/remove_question/<id>', methods=['POST'])1310@login_required1311def removed(id):1312    get_question = Contactquestions.query.filter_by(id=id).first()1313    if get_question.erased == False:1314        get_question.erased = True1315        get_question.saved = False1316        db.session.commit()1317        section = "home"1318    else:1319        db.session.query(Contactquestions).filter_by(id=id).delete()1320        db.session.commit()1321        section="trash"1322    return redirect(url_for('social_page', section=section))1323@app.route('/save_question/<id>', methods=['POST'])1324@login_required1325def saved(id):1326    path = request.path1327    get_question = Contactquestions.query.filter_by(id=id).first()1328    if get_question.saved == True and get_question.erased==False:1329        get_question.saved = False1330        db.session.commit()1331        return redirect(url_for('social_page', section="home"))1332    if get_question.saved == True and get_question.erased==True:1333        get_question.saved = False1334        db.session.commit()1335        return redirect(url_for('social_page', section="trash"))1336    if get_question.saved == False and get_question.erased ==True:1337        get_question.saved = True1338        get_question.erased = False1339        db.session.commit()1340        return redirect(url_for('social_page', section="trash"))1341    if get_question.saved == False:1342        get_question.saved = True1343        get_question.erased = False1344        db.session.commit()1345        return redirect(url_for('social_page', section="home"))1346@app.route('/send-mail-subscribers')1347@login_required1348def mail_send():1349    auto_send = False1350    property_id = 11351    property_description = Properties.query.filter_by(id=property_id).first()1352    message = property_description.descripcion1353    subscribers = Subscribers.query.all()1354    subscribers_mail = []1355    for subscriber in subscribers:1356        subscriber.mail1357    subscribers_mail.append(subscriber.mail)1358    print(subscribers)1359    msg = Message("Nueva propiedad ingresada!",1360                  recipients=subscribers_mail)1361    msg.html = '<div style="border-style:solid;border-width:thin;border-color:#dadce0;border-radius:8px;padding:40px 20px"><div style="font-family:''Google Sans'',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;border-bottom:thin solid #dadce0;color:rgba(0,0,0,0.87);line-height:32px;padding-bottom:24px;text-align:center;word-break:break-word"><img alt=Pallaresyasociados aria-hidden=true class=CToWUd width=50 src="https://scontent.fmvd4-1.fna.fbcdn.net/v/t1.0-9/16473247_262488650849599_8347533623051414236_n.jpg?_nc_cat=105&ccb=2&_nc_sid=09cbfe&_nc_eui2=AeG32RxTx024IYxCbpOzxz-1-3zJOy680pX7fMk7LrzSlYUv26nRqU1xX8N6KgvjcljdMNMVh_R061esq01RqNwe&_nc_ohc=Zps9IjZhHekAX9DH0kL&_nc_ht=scontent.fmvd4-1.fna&oh=e9b1d6a35f896795c3e791fc5cbbcff5&oe=5FD115BF" style=margin-bottom:16px width=74> <div style=font-size:24px> Descubre mas detalles sobre esta propiedad! </div> <div style=font-family:Roboto-Regular,Helvetica,Arial,sans-serif;font-size:14px;color:rgba(0,0,0,0.87);line-height:20px;padding-top:20px;text-align:center>' + message + '<div style=padding-top:32px;text-align:center><a href=http://127.0.0.1:3000/profile/1 style="font-family:''Google Sans'',Roboto,RobotoDraft,Helvetica,Arial,sans-serif;line-height:16px;color:#ffffff;font-weight:400;text-decoration:none;font-size:14px;display:inline-block;padding:10px 24px;background-color:rgb(1, 167, 1);border-radius:5px;min-width:90px" target=_blank> Ver la casa </a></div></div></div></div>'1362    if auto_send==True:1363        mail.send(msg)1364    1365    return render_template('mail.html')1366@app.route('/insert-miemail', methods=['POST']) #Función sin terminar1367@login_required1368def my_email():1369    existent_mail = MainMail.query.all()1370    verify_user = request.form['miemail-email']1371    verify_pass = request.form['miemail-pass']1372    # Exist?1373    if existent_mail == []:1374        try:1375            myemail_add = MainMail(mail = request.form['miemail-email'], 1376            mail_password = request.form['miemail-pass'])     1377            db.session.add(myemail_add)1378            db.session.commit()1379            flash("Correo registrado con éxito")1380            return redirect(url_for('config'))1381        except expression as identifier:1382            flash("Error, ese correo ya esta registrado")1383            return redirect(url_for('config'))1384    # = mail & != pass1385    elif existent_mail.mail == verify_user and existent_mail.mail_password != verify_pass:1386        try:1387            existent_mail.mail = request.form['miemail-email']1388            existent_mail.mail_password = request.form['miemail-pass']    1389            db.session.commit()1390            flash("Contraseña cambiada con éxito")1391            return redirect(url_for('config'))1392        except expression as identifier:1393            flash("Error, ese correo ya esta registrado")1394            return redirect(url_for('config'))1395    # = mail & = pass1396    elif existent_mail.mail == verify_user and existent_mail.mail_password == verify_pass:1397        flash("Error, correo y contraseña ya estan registradas")1398        return redirect(url_for('config'))1399    1400@app.route('/config')1401def config():1402    contactquestions_amount = Contactquestions.query.filter_by(read=False).count()1403    return render_template("config.html", questions_amount=contactquestions_amount)1404@app.route('/regist-admin', methods=['POST'])1405@login_required1406def regist_admin():1407    try:1408        admin_add = Admins(user = request.form['admin-user'], 1409        password = request.form['admin-pass'])     1410        db.session.add(admin_add)1411        db.session.commit()1412        flash("Administrador registrado con éxito")1413        return redirect(url_for('config'))1414    except Exception as e:1415        print(e)1416        flash("Error, ese administrador ya esta registrado")1417        return redirect(url_for('config'))1418@app.route('/profile-admin/<id>')1419@login_required1420def profileforadmin(id):1421    get_property = Properties.query.filter_by(id = id).first()1422    comodidades = Comfort.query.filter_by(id = id).first()1423    seguridad = Seguridad.query.filter_by(id = id).first()1424    return render_template('profileforadmin.html', 1425    get_property = get_property, 1426    comfort = comodidades,...device.py
Source:device.py  
...56        return self.dbus_method("CreateNode", uuid)57    def remove_node(self, node_path):58        return self.dbus_method("RemoveNode", node_path)59    ###Props60    def get_properties(self):61        return self.dbus_method("GetProperties")62    def set_property(self, key, value):63        return self.dbus_method("SetProperty", key, value)64    def get_name(self):65        if "Name" in self.get_properties().keys():66            return self.get_properties()["Name"]67    def get_vendor(self):68        if "Vendor" in self.get_properties().keys():69            return self.get_properties()["Vendor"]70    def get_product(self):71        if "Product" in self.get_properties().keys():72            return self.get_properties()["Product"]73    def get_version(self):74        if "Version" in self.get_properties().keys():75            return self.get_properties()["Version"]76    def get_legacy_pairing(self):77        if "LegacyPairing" in self.get_properties().keys():78            return self.get_properties()["LegacyPairing"]79    def get_alias(self):80        if "Alias" in self.get_properties().keys():81            return self.get_properties()["Alias"]82    def set_alias(self, alias):83        self.set_property("Alias", alias)84    def get_icon(self):85        if "Icon" in self.get_properties().keys():86            return self.get_properties()["Icon"]87    def get_nodes(self):88        nodes = []89        if "Nodes" in self.get_properties().keys():90            nodes =  self.get_properties()["Nodes"]91            if nodes:92                nodes = map(lambda x:str(x), nodes)93        return nodes94    def get_paired(self):95        if "Paired" in self.get_properties().keys():96            return bool(self.get_properties()["Paired"])97    def get_connected(self):98        if "Connected" in self.get_properties().keys():99            return bool(self.get_properties()["Connected"])100    def get_blocked(self):101        if "Blocked" in self.get_properties().keys():102            return bool(self.get_properties()["Blocked"])103    def set_blocked(self, blocked):104        self.set_property("Blocked", dbus.Boolean(blocked))105    def get_trusted(self):106        if "Trusted" in self.get_properties().keys():107            return bool(self.get_properties()["Trusted"])108    def set_trusted(self, trusted):109        self.set_property("Trusted", dbus.Boolean(trusted))110    def get_adapter(self):111        if "Adapter" in self.get_properties().keys():112            return str(self.get_properties()["Adapter"])113    def get_address(self):114        if "Address" in self.get_properties().keys():115            return self.get_properties()["Address"]116        else:117            return None118    def get_class(self):119        if "Class" in self.get_properties().keys():120            return self.get_properties()["Class"]121        else:122            return None123    def get_uuids(self):124        uuids = []125        if "UUIDs" in self.get_properties().keys():126            uuids = self.get_properties()["UUIDs"]127            if uuids:128                uuids = map(lambda x:str(x), uuids)129        return uuids130    def get_services(self):131        if "Services" in self.get_properties().keys():132            services = self.get_properties()["Services"]133            if services:134                services = map(lambda x:str(x), services)135            return services136        return []137    def disconnect_requested_cb(self):138        self.emit("disconnect-requested")139    def property_changed_cb(self, key, value):140        self.emit("property-changed", key, value)141    def node_created_cb(self, node_path):142        self.emit("node-created", node_path)143    def node_removed_cb(self, node_path):144        self.emit("node-removed", node_path)145class Audio(BusBase):146    __gsignals__  = {147        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))148            }149    def __init__(self, device_path):150        BusBase.__init__(self, path = device_path, interface = "org.bluez.Audio")151        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,152                                     path = self.object_path, signal_name = "PropertyChanged")153    def a_connect(self):154        return self.dbus_method("Connect")155    def a_disconnect(self):156        return self.dbus_method("Disconnect")157    def get_properties(self):158        return self.dbus_method("GetProperties")159    def get_state(self):160        if "State" in self.get_properties().keys():161            return self.get_properties()["State"]162    def property_changed_cb(self, key, value):163        self.emit("property-changed", key, value)164class Headset(BusBase):165    __gsignals__  = {166        "answer-requested":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),167        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))168            }169    def __init__(self, device_path):170        BusBase.__init__(self, path = device_path, interface = "org.bluez.Headset")171        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,172                                     path = self.object_path, signal_name = "PropertyChanged")173        self.bus.add_signal_receiver(self.answer_requested_cb, dbus_interface = self.object_interface,174                                     path = self.object_path, signal_name = "AnswerRequested")175    def hs_connect(self):176        return self.dbus_method("Connect")177    def hs_disconnect(self):178        return self.dbus_method("Disconnect")179    def is_connected(self):180        return self.dbus_method("IsConnected")181    def indicate_call(self):182        return self.dbus_method("IndicateCall")183    def cancel_call(self):184        return self.dbus_method("CancelCall")185    def play(self):186        return self.dbus_method("Play")187    def stop(self):188        return self.dbus_method("Stop")189    def get_properties(self):190        return self.dbus_method("GetProperties")191    def set_property(self, key, value):192        return self.dbus_method("SetProperty", key, value)193    def get_state(self):194        if "State" in self.get_properties().keys():195            return self.get_properties()["State"]196    def get_connected(self):197        if "Connected" in self.get_properties().keys():198            return self.get_properties()["Connected"]199    def get_playing(self):200        if "Playing" in self.get_properties().keys():201            return self.get_properties()["Playing"]202        else:203            return self.dbus_method("IsPlaying")204    def get_speaker_gain(self):205        if "SpeakerGain" in self.get_properties().keys():206            return self.get_properties()["SpeakerGain"]207        else:208            return self.dbus_method("GetSpeakerGain")209    def set_speaker_gain(self, gain):210        self.set_property("SpeakerGain", gain)211    def get_microphone_gain(self):212        if "MicrophoneGain" in self.get_properties().keys():213            return self.get_properties()["MicrophoneGain"]214        else:215            return self.dbus_method("GetMicrophoneGain")216    def set_microphone_gain(self, gain):217        self.set_property("MicrophoneGain", gain)218    def property_changed_cb(self, key, value):219        self.emit("property-changed", key, value)220    def answer_requested_cb(self, key, value):221        self.emit("answer-requested", key, value)222class AudioSink(BusBase):223    __gsignals__  = {224        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))225            }226    def __init__(self, device_path):227        BusBase.__init__(self, path = device_path, interface = "org.bluez.AudioSink")228        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,229                                     path = self.object_path, signal_name = "PropertyChanged")230    def as_connect(self):231        return self.dbus_method("Connect")232    def as_disconnect(self):233        return self.dbus_method("Disconnect")234    def get_properties(self):235        return self.dbus_method("GetProperties")236    def get_state(self):237        if "State" in self.get_properties().keys():238            return self.get_properties()["State"]239    def get_connected(self):240        if "Connected" in self.get_properties().keys():241            return self.get_properties()["Connected"]242    def get_playing(self):243        if "Playing" in self.get_properties().keys():244            return self.get_properties()["Playing"]245    def property_changed_cb(self, key, value):246        self.emit("property-changed", key, value)247class AudioSource(BusBase):248    __gsignals__  = {249        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))250            }251    def __init__(self, device_path):252        BusBase.__init__(self, path = device_path, interface = "org.bluez.AudioSource")253        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,254                                     path = self.object_path, signal_name = "PropertyChanged")255    def as_connect(self):256        return self.dbus_method("Connect")257    def as_disconnect(self):258        return self.dbus_method("Disconnect")259    def get_properties(self):260        return self.dbus_method("GetProperties")261    def get_state(self):262        # Possible values: "disconnected", "connecting", "connected", "playing"263        if "State" in self.get_properties().keys():264            return self.get_properties()["State"]265    def property_changed_cb(self, key, value):266        self.emit("property-changed", key, value)267class HeadsetFreeGateway(BusBase):268    __gsignals__  = {269        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT)),270        "ring":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str,)),271        "call-terminated":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),272        "call-started":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),273        "call-ended":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),274            }275    def __init__(self, device_path):276        BusBase.__init__(self, path = device_path, interface = "org.bluez.HeadsetGateway")277        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,278                                     path = self.object_path, signal_name = "PropertyChanged")279        self.bus.add_signal_receiver(self.ring_cb, dbus_interface = self.object_interface,280                                     path = self.object_path, signal_name = "Ring")281        self.bus.add_signal_receiver(self.call_terminated_cb, dbus_interface = self.object_interface,282                                     path = self.object_path, signal_name = "CallTerminated")283        self.bus.add_signal_receiver(self.call_started_cb, dbus_interface = self.object_interface,284                                     path = self.object_path, signal_name = "CallStarted")285        self.bus.add_signal_receiver(self.call_ended_cb, dbus_interface = self.object_interface,286                                     path = self.object_path, signal_name = "CallEnded")287    def hfg_connect(self):288        return self.dbus_method("Connect")289    def hfg_disconnect(self):290        return self.dbus_method("Disconnect")291    def answer_call(self):292        return self.dbus_method("AnswerCall")293    def terminate_call(self):294        return self.dbus_method("TerminateCall")295    def call(self, number):296        return self.dbus_method("Call", number)297    def get_operator_name(self):298        return self.dbus_method("GetOperatorName")299    def send_dtmf(self, digits):300        return self.dbus_method("SendDTMF", digits)301    def get_subscriber_number(self):302        return self.dbus_method("GetSubscriberNumber")303    def get_properties(self):304        return self.dbus_method("GetProperties")305    def get_connected(self):306        if "Connected" in self.get_properties().keys():307            return self.get_properties()["Connected"]308    def get_registration_status(self):309        if "RegistrationStatus" in self.get_properties().keys():310            return self.get_properties()["RegistrationStatus"]311    def get_signal_strength(self):312        if "SignalStrength" in self.get_properties().keys():313            return self.get_properties()["SignalStrength"]314    def get_roaming_status(self):315        if "RoamingStatus" in self.get_properties().keys():316            return self.get_properties()["RoamingStatus"]317    def get_battery_charge(self):318        if "BatteryCharge" in self.get_properties().keys():319            return self.get_properties()["BatteryCharge"]320    def get_speaker_gain(self):321        if "Connected" in self.get_properties().keys():322            return self.get_properties()["Connected"]323    def get_microphone_gain(self):324        if "MicrophoneGain" in self.get_properties().keys():325            return self.get_properties()["MicrophoneGain"]326    def property_changed_cb(self, key, value):327        self.emit("property-changed", key, value)328    def ring_cb(self, number):329        self.emit("ring", number)330    def call_terminated_cb(self):331        self.emit("call-terminated")332    def call_started_cb(self):333        self.emit("call-started")334    def call_ended_cb(self):335        self.emit("call-ended")336class Control(BusBase):337    __gsignals__  = {338        "connected":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),339        "disconnected":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),340        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))341            }342    def __init__(self, device_path):343        BusBase.__init__(self, path = device_path, interface = "org.bluez.Control")344        self.bus.add_signal_receiver(self.connected_cb, dbus_interface = self.object_interface,345                                     path = self.object_path, signal_name = "Connected")346        self.bus.add_signal_receiver(self.disconnected_cb, dbus_interface = self.object_interface,347                                     path = self.object_path, signal_name = "Disconnected")348        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,349                                     path = self.object_path, signal_name = "PropertyChanged")350    def volume_up(self):351        return self.dbus_method("VolumeUp")352    def volume_down(self):353        return self.dbus_method("VolumeDown")354    def get_properties(self):355        return self.dbus_method("GetProperties")356    def get_connected(self):357        if "Connected" in self.get_properties().keys():358            return self.get_properties()["Connected"]359        else:360            return bool(self.dbus_method("IsConnected"))361    def connected_cb(self):362        self.emit("connected")363    def disconnected_cb(self):364        self.emit("disconnected")365    def property_changed_cb(self, key, value):366        self.emit("property-changed", key, value)367class HealthManager(BusBase):368    __gsignals__  = {369        "channel-connected":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str,)),370        "channel-deleted":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str,)),371        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))372            }373    def __init__(self, device_path):374        BusBase.__init__(self, path = device_path, interface = "org.bluez.HealthDevice")375        self.bus.add_signal_receiver(self.channel_connected_cb, dbus_interface = self.object_interface,376                                     path = self.object_path, signal_name = "ChannelConnected")377        self.bus.add_signal_receiver(self.channel_deleted_cb, dbus_interface = self.object_interface,378                                     path = self.object_path, signal_name = "ChannelDeleted")379        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,380                                     path = self.object_path, signal_name = "PropertyChanged")381    def echo(self):382        return self.dbus_method("Echo")383    def create_channel(self, application, configuration):384        return self.dbus_method("CreateChannel", application, configuration)385    def destroy_channel(self, channel):386        return self.dbus_method("DestroyChannel", channel)387    def get_properties(self):388        return self.dbus_method("GetProperties")389    def get_mainchannel(self):390        if "MainChannel" in self.get_properties().keys():391            return self.get_properties()["MainChannel"]392    def channel_connected_cb(self, channel):393        self.emit("channel-connected", channel)394    def channel_deleted_cb(self, channel):395        self.emit("disconnected", channel)396    def property_changed_cb(self, key, value):397        self.emit("property-changed", key, value)398class HandsfreeGateway(BusBase):399    __gsignals__  = {400        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))401            }402    def __init__(self, device_path):403        BusBase.__init__(self, path = device_path, interface = "org.bluez.HandsfreeGateway")404        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,405                                     path = self.object_path, signal_name = "PropertyChanged")406    def hfg_connect(self):407        return self.dbus_method("Connect")408    def hfg_disconnect(self):409        return self.dbus_method("Disconnect")410    def get_properties(self):411        return self.dbus_method("GetProperties")412    def get_state(self):413        if "State" in self.get_properties().keys():414            return self.get_properties()["State"]415    def register_agent(self, agent_path):416        return self.dbus_method("RegisterAgent", agent_path)417    def unregister_agent(self, agent_path):418        return self.dbus_method("UnregisterAgent", agent_path)419    def property_changed_cb(self, key, value):420        self.emit("property-changed", key, value)421class Network(BusBase):422    __gsignals__  = {423        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))424            }425    def __init__(self, device_path):426        BusBase.__init__(self, path = device_path, interface = "org.bluez.Network")427        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,428                                     path = self.object_path, signal_name = "PropertyChanged")429    def n_connect(self, uuid):430        return self.dbus_method("Connect", uuid)431    def n_disconnect(self):432        return self.dbus_method("Disconnect")433    def get_properties(self):434        return self.dbus_method("GetProperties")435    def get_connected(self):436        if "Connected" in self.get_properties().keys():437            return self.get_properties()["Connected"]438    def get_interface(self):439        if "Interface" in self.get_properties().keys():440            return self.get_properties()["Interface"]441    def get_uuid(self):442        if "UUID" in self.get_properties().keys():443            return self.get_properties()["UUID"]444    def property_changed_cb(self, key, value):445        self.emit("property-changed", key, value)446class Input(BusBase):447    __gsignals__  = {448        "property-changed":(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (str, gobject.TYPE_PYOBJECT))449            }450    def __init__(self, device_path):451        BusBase.__init__(self, path = device_path, interface = "org.bluez.Input")452        self.bus.add_signal_receiver(self.property_changed_cb, dbus_interface = self.object_interface,453                                     path = self.object_path, signal_name = "PropertyChanged")454    def i_connect(self):455        return self.dbus_method("Connect")456    def i_disconnect(self):457        return self.dbus_method("Disconnect")458    def get_properties(self):459        return self.dbus_method("GetProperties")460    def get_connected(self):461        if "Connected" in self.get_properties().keys():462            return self.get_properties()["Connected"]463    def property_changed_cb(self, key, value):464        self.emit("property-changed", key, value)465class Serial(BusBase):466    def __init__(self, device_path):467        BusBase.__init__(self, path = device_path, interface = "org.bluez.Serial")468    def s_connect(self, pattern):469        return self.dbus_method("Connect", pattern)470    def connect_fd(self, pattern):471        return self.dbus_method("ConnectFD", pattern)472    def s_disconnect(self, device):473        return self.dbus_method("Disconnect", device)474if __name__ == "__main__":475    from manager import Manager476    from adapter import Adapter...auto_doc.py
Source:auto_doc.py  
...9        ),10    },11    "feature_store.md": {12        "fs_get": ["hsfs.connection.Connection.get_feature_store"],13        "fs_properties": keras_autodoc.get_properties(14            "hsfs.feature_store.FeatureStore"15        ),16        "fs_methods": keras_autodoc.get_methods(17            "hsfs.feature_store.FeatureStore", exclude=["from_response_json"]18        ),19    },20    "feature.md": {21        "feature": ["hsfs.feature.Feature"],22        "feature_properties": keras_autodoc.get_properties("hsfs.feature.Feature"),23        "feature_methods": keras_autodoc.get_methods(24            "hsfs.feature.Feature", exclude=["from_response_json", "to_dict"]25        ),26    },27    "feature_group.md": {28        "fg_create": ["hsfs.feature_store.FeatureStore.create_feature_group"],29        "fg_get": ["hsfs.feature_store.FeatureStore.get_feature_group"],30        "fg_properties": keras_autodoc.get_properties(31            "hsfs.feature_group.FeatureGroup"32        ),33        "fg_methods": keras_autodoc.get_methods(34            "hsfs.feature_group.FeatureGroup",35            exclude=[36                "from_response_json",37                "update_from_response_json",38                "json",39                "to_dict",40            ],41        ),42    },43    "on_demand_feature_group.md": {44        "fg_create": ["hsfs.feature_store.FeatureStore.create_on_demand_feature_group"],45        "fg_get": ["hsfs.feature_store.FeatureStore.get_on_demand_feature_group"],46        "fg_properties": keras_autodoc.get_properties(47            "hsfs.feature_group.OnDemandFeatureGroup"48        ),49        "fg_methods": keras_autodoc.get_methods(50            "hsfs.feature_group.OnDemandFeatureGroup",51            exclude=[52                "from_response_json",53                "update_from_response_json",54                "json",55                "to_dict",56            ],57        ),58    },59    "training_dataset.md": {60        "td_create": ["hsfs.feature_store.FeatureStore.create_training_dataset"],61        "td_get": ["hsfs.feature_store.FeatureStore.get_training_dataset"],62        "td_properties": keras_autodoc.get_properties(63            "hsfs.training_dataset.TrainingDataset"64        ),65        "td_methods": keras_autodoc.get_methods(66            "hsfs.training_dataset.TrainingDataset",67            exclude=[68                "from_response_json",69                "update_from_response_json",70                "json",71                "to_dict",72            ],73        ),74        "tf_record_dataset": ["hsfs.core.tfdata_engine.TFDataEngine.tf_record_dataset"],75        "tf_csv_dataset": ["hsfs.core.tfdata_engine.TFDataEngine.tf_csv_dataset"],76    },77    "storage_connector.md": {78        "sc_get": [79            "hsfs.feature_store.FeatureStore.get_storage_connector",80            "hsfs.feature_store.FeatureStore.get_online_storage_connector",81        ],82        "hopsfs_methods": keras_autodoc.get_methods(83            "hsfs.storage_connector.HopsFSConnector", exclude=["from_response_json"]84        ),85        "hopsfs_properties": keras_autodoc.get_properties(86            "hsfs.storage_connector.HopsFSConnector"87        ),88        "s3_methods": keras_autodoc.get_methods(89            "hsfs.storage_connector.S3Connector", exclude=["from_response_json"]90        ),91        "s3_properties": keras_autodoc.get_properties(92            "hsfs.storage_connector.S3Connector"93        ),94        "redshift_methods": keras_autodoc.get_methods(95            "hsfs.storage_connector.RedshiftConnector", exclude=["from_response_json"]96        ),97        "redshift_properties": keras_autodoc.get_properties(98            "hsfs.storage_connector.RedshiftConnector"99        ),100        "adls_methods": keras_autodoc.get_methods(101            "hsfs.storage_connector.AdlsConnector", exclude=["from_response_json"]102        ),103        "adls_properties": keras_autodoc.get_properties(104            "hsfs.storage_connector.AdlsConnector"105        ),106        "snowflake_methods": keras_autodoc.get_methods(107            "hsfs.storage_connector.SnowflakeConnector", exclude=["from_response_json"]108        ),109        "snowflake_properties": keras_autodoc.get_properties(110            "hsfs.storage_connector.SnowflakeConnector"111        ),112        "jdbc_methods": keras_autodoc.get_methods(113            "hsfs.storage_connector.JdbcConnector", exclude=["from_response_json"]114        ),115        "jdbc_properties": keras_autodoc.get_properties(116            "hsfs.storage_connector.JdbcConnector"117        ),118        "gcs_methods": keras_autodoc.get_methods(119            "hsfs.storage_connector.GcsConnector", exclude=["from_response_json"]120        ),121        "gcs_properties": keras_autodoc.get_properties(122            "hsfs.storage_connector.GcsConnector"123        ),124    },125    "query_vs_dataframe.md": {126        "query_methods": keras_autodoc.get_methods("hsfs.constructor.query.Query"),127        "query_properties": keras_autodoc.get_properties(128            "hsfs.constructor.query.Query"129        ),130    },131    "statistics.md": {132        "statistics_config": ["hsfs.statistics_config.StatisticsConfig"],133        "statistics_config_properties": keras_autodoc.get_properties(134            "hsfs.statistics_config.StatisticsConfig"135        ),136    },137    "feature_validation.md": {138        "rule": ["hsfs.rule.Rule"],139        "rule_properties": keras_autodoc.get_properties("hsfs.rule.Rule"),140        "ruledefinition": ["hsfs.ruledefinition.RuleDefinition"],141        "ruledefinition_getall": ["hsfs.connection.Connection.get_rules"],142        "ruledefinition_get": ["hsfs.connection.Connection.get_rule"],143        "ruledefinition_properties": keras_autodoc.get_properties(144            "hsfs.ruledefinition.RuleDefinition"145        ),146        "expectation": ["hsfs.expectation.Expectation"],147        "expectation_properties": keras_autodoc.get_properties(148            "hsfs.expectation.Expectation"149        ),150        "expectation_methods": keras_autodoc.get_methods(151            "hsfs.expectation.Expectation",152            exclude=[153                "from_response_json",154                "update_from_response_json",155                "json",156                "to_dict",157            ],158        ),159        "expectation_create": ["hsfs.feature_store.FeatureStore.create_expectation"],160        "expectation_get": ["hsfs.feature_store.FeatureStore.get_expectation"],161        "expectation_getall": ["hsfs.feature_store.FeatureStore.get_expectations"],162        "validation_result": ["hsfs.validation_result.ValidationResult"],163        "validation_result_properties": keras_autodoc.get_properties(164            "hsfs.validation_result.ValidationResult"165        ),166        "validate": ["hsfs.feature_group.FeatureGroup.validate"],167        "validation_result_get": ["hsfs.feature_group.FeatureGroup.get_validations"],168    },169    "tags.md": {170        "fg_tag_add": ["hsfs.feature_group.FeatureGroupBase.add_tag"],171        "fg_tag_get": ["hsfs.feature_group.FeatureGroupBase.get_tag"],172        "fg_tag_get_all": ["hsfs.feature_group.FeatureGroupBase.get_tags"],173        "fg_tag_delete": ["hsfs.feature_group.FeatureGroupBase.delete_tag"],174        "td_tag_add": ["hsfs.training_dataset.TrainingDataset.add_tag"],175        "td_tag_get": ["hsfs.training_dataset.TrainingDataset.get_tag"],176        "td_tag_get_all": ["hsfs.training_dataset.TrainingDataset.get_tags"],177        "td_tag_delete": ["hsfs.training_dataset.TrainingDataset.delete_tag"],178    },179    "transformation_functions.md": {180        "transformation_function": [181            "hsfs.transformation_function.TransformationFunction"182        ],183        "transformation_function_properties": keras_autodoc.get_properties(184            "hsfs.transformation_function.TransformationFunction"185        ),186        "transformation_function_methods": keras_autodoc.get_methods(187            "hsfs.transformation_function.TransformationFunction",188            exclude=[189                "from_response_json",190                "update_from_response_json",191                "json",192                "to_dict",193            ],194        ),195        "create_transformation_function": [196            "hsfs.feature_store.FeatureStore.create_transformation_function"197        ],198        "get_transformation_function": [199            "hsfs.feature_store.FeatureStore.get_transformation_function"200        ],201        "get_transformation_functions": [202            "hsfs.feature_store.FeatureStore.get_transformation_functions"203        ],204    },205    "api/connection_api.md": {206        "connection": ["hsfs.connection.Connection"],207        "connection_properties": keras_autodoc.get_properties(208            "hsfs.connection.Connection"209        ),210        "connection_methods": keras_autodoc.get_methods("hsfs.connection.Connection"),211    },212    "api/feature_store_api.md": {213        "fs": ["hsfs.feature_store.FeatureStore"],214        "fs_get": ["hsfs.connection.Connection.get_feature_store"],215        "fs_properties": keras_autodoc.get_properties(216            "hsfs.feature_store.FeatureStore"217        ),218        "fs_methods": keras_autodoc.get_methods("hsfs.feature_store.FeatureStore"),219    },220    "api/feature_group_api.md": {221        "fg": ["hsfs.feature_group.FeatureGroup"],222        "fg_create": ["hsfs.feature_store.FeatureStore.create_feature_group"],223        "fg_get": ["hsfs.feature_store.FeatureStore.get_feature_group"],224        "fg_properties": keras_autodoc.get_properties(225            "hsfs.feature_group.FeatureGroup"226        ),227        "fg_methods": keras_autodoc.get_methods("hsfs.feature_group.FeatureGroup"),228    },229    "api/training_dataset_api.md": {230        "td": ["hsfs.training_dataset.TrainingDataset"],231        "td_create": ["hsfs.feature_store.FeatureStore.create_training_dataset"],232        "td_get": ["hsfs.feature_store.FeatureStore.get_training_dataset"],233        "td_properties": keras_autodoc.get_properties(234            "hsfs.training_dataset.TrainingDataset"235        ),236        "td_methods": keras_autodoc.get_methods(237            "hsfs.training_dataset.TrainingDataset"238        ),239    },240    "api/feature_api.md": {241        "feature": ["hsfs.feature.Feature"],242        "feature_properties": keras_autodoc.get_properties("hsfs.feature.Feature"),243        "feature_methods": keras_autodoc.get_methods("hsfs.feature.Feature"),244    },245    "api/storage_connector_api.md": {246        "sc_get": [247            "hsfs.feature_store.FeatureStore.get_storage_connector",248            "hsfs.feature_store.FeatureStore.get_online_storage_connector",249        ],250        "hopsfs_methods": keras_autodoc.get_methods(251            "hsfs.storage_connector.HopsFSConnector", exclude=["from_response_json"]252        ),253        "hopsfs_properties": keras_autodoc.get_properties(254            "hsfs.storage_connector.HopsFSConnector"255        ),256        "s3_methods": keras_autodoc.get_methods(257            "hsfs.storage_connector.S3Connector", exclude=["from_response_json"]258        ),259        "s3_properties": keras_autodoc.get_properties(260            "hsfs.storage_connector.S3Connector"261        ),262        "redshift_methods": keras_autodoc.get_methods(263            "hsfs.storage_connector.RedshiftConnector", exclude=["from_response_json"]264        ),265        "redshift_properties": keras_autodoc.get_properties(266            "hsfs.storage_connector.RedshiftConnector"267        ),268        "adls_methods": keras_autodoc.get_methods(269            "hsfs.storage_connector.AdlsConnector", exclude=["from_response_json"]270        ),271        "adls_properties": keras_autodoc.get_properties(272            "hsfs.storage_connector.AdlsConnector"273        ),274        "snowflake_methods": keras_autodoc.get_methods(275            "hsfs.storage_connector.SnowflakeConnector", exclude=["from_response_json"]276        ),277        "snowflake_properties": keras_autodoc.get_properties(278            "hsfs.storage_connector.SnowflakeConnector"279        ),280        "jdbc_methods": keras_autodoc.get_methods(281            "hsfs.storage_connector.JdbcConnector", exclude=["from_response_json"]282        ),283        "jdbc_properties": keras_autodoc.get_properties(284            "hsfs.storage_connector.JdbcConnector"285        ),286        "gcs_methods": keras_autodoc.get_methods(287            "hsfs.storage_connector.GcsConnector", exclude=["from_response_json"]288        ),289        "gcs_properties": keras_autodoc.get_properties(290            "hsfs.storage_connector.GcsConnector"291        ),292    },293    "api/statistics_config_api.md": {294        "statistics_config": ["hsfs.statistics_config.StatisticsConfig"],295        "statistics_config_properties": keras_autodoc.get_properties(296            "hsfs.statistics_config.StatisticsConfig"297        ),298    },299    "api/rule_api.md": {300        "rule": ["hsfs.rule.Rule"],301        "rule_properties": keras_autodoc.get_properties("hsfs.rule.Rule"),302    },303    "api/rule_definition_api.md": {304        "ruledefinition": ["hsfs.ruledefinition.RuleDefinition"],305        "ruledefinition_getall": ["hsfs.connection.Connection.get_rules"],306        "ruledefinition_get": ["hsfs.connection.Connection.get_rule"],307        "ruledefinition_properties": keras_autodoc.get_properties(308            "hsfs.ruledefinition.RuleDefinition"309        ),310    },311    "api/expectation_api.md": {312        "expectation": ["hsfs.expectation.Expectation"],313        "expectation_properties": keras_autodoc.get_properties(314            "hsfs.expectation.Expectation"315        ),316        "expectation_methods": keras_autodoc.get_methods(317            "hsfs.expectation.Expectation",318            exclude=[319                "from_response_json",320                "update_from_response_json",321                "json",322                "to_dict",323            ],324        ),325        "expectation_create": ["hsfs.feature_store.FeatureStore.create_expectation"],326        "expectation_get": ["hsfs.feature_store.FeatureStore.get_expectation"],327        "expectation_getall": ["hsfs.feature_store.FeatureStore.get_expectations"],328    },329    "api/validation_api.md": {330        "validation_result": ["hsfs.validation_result.ValidationResult"],331        "validation_result_properties": keras_autodoc.get_properties(332            "hsfs.validation_result.ValidationResult"333        ),334        "validate": ["hsfs.feature_group.FeatureGroup.validate"],335        "validation_result_get": ["hsfs.feature_group.FeatureGroup.get_validations"],336    },337    "api/transformation_functions_api.md": {338        "transformation_function": [339            "hsfs.transformation_function.TransformationFunction"340        ],341        "transformation_function_properties": keras_autodoc.get_properties(342            "hsfs.transformation_function.TransformationFunction"343        ),344        "transformation_function_methods": keras_autodoc.get_methods(345            "hsfs.transformation_function.TransformationFunction",346            exclude=[347                "from_response_json",348                "update_from_response_json",349                "json",350                "to_dict",351            ],352        ),353        "create_transformation_function": [354            "hsfs.feature_store.FeatureStore.create_transformation_function"355        ],356        "get_transformation_function": [357            "hsfs.feature_store.FeatureStore.get_transformation_function"358        ],359        "get_transformation_functions": [360            "hsfs.feature_store.FeatureStore.get_transformation_functions"361        ],362    },363    "api/job_configuration.md": {364        "job_configuration": ["hsfs.core.job_configuration.JobConfiguration"]365    },366    "api/query_api.md": {367        "query_methods": keras_autodoc.get_methods(368            "hsfs.constructor.query.Query",369            exclude=["json", "to_dict"],370        ),371        "query_properties": keras_autodoc.get_properties(372            "hsfs.constructor.query.Query"373        ),374    },375    "versioning.md": {376        "fg_append": ["hsfs.feature_group.FeatureGroup.append_features"],377        "fg_get_all": ["hsfs.feature_store.FeatureStore.get_feature_groups"],378        "td_get_all": ["hsfs.feature_store.FeatureStore.get_training_datasets"],379        "as_of": ["hsfs.constructor.query.Query.as_of"],380        "commit_details": ["hsfs.feature_group.FeatureGroup.commit_details"],381    },382}383hsfs_dir = pathlib.Path(__file__).resolve().parents[0]384def generate(dest_dir):385    doc_generator = keras_autodoc.DocumentationGenerator(...typeCount.py
Source:typeCount.py  
...26# b = graph_db.get_indexed_node("employerIdIndex","id","105454359493345")27# print b28# print graph_db.neo4j_version29# a = graph_db.node(7)30# print a.get_properties()31# print a.get_properties()['nodeType'] == 132# c = graph_db.get_or_create_index(neo4j.Node, "employerIdIndex")33# print c34# tmp = graph_db.node(7)35# print tmp.get_properties()['nodeType']36#from first 10000 nodes37#{0: 3503, 1: 3760, 2: 2326, 3: 1, 4: 1, 5: 1, 6: 0, 7: 0}38# store = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0}39# for i in range(1,10000): #node 0 does not have nodeType40# 	# print i41# 	try:42# 		tmp = graph_db.node(i).get_properties()	43# 	except:44# 		print "No data"45# 		continue46# 	store[tmp["nodeType"]] += 147# print store48#from first 1000 who are co-workers, list of companies49# companies = []50# for i in range(1,1000):51# 	try:52# 		tmp = graph_db.node(i).get_properties()	53# 	except:54# 		print "No data"55# 		continue56# 	if tmp["nodeType"] == 1:57# 		companies.append(tmp["name"])58# print set(companies)59##############################################60typechart = {"Type1":0,"Type2":0,"Type3":0,"Type4":0,"Type5":0,"Type6":0,"Type7":0,"Type8":0}61# human = []62# for i in Xrange(1,100):63# 	try:64# 		tmp = graph_db.node(i).get_properties()	65# 	except:66# 		print "No data"67# 		continue68# 	if tmp["nodeType"] == 0:69# 		human.append(i)70# print human71def typeCount(typechart,node):72	# node = graph_db.node(nodeID)73	school = {"College":[],"High School":[],"Graduate School":[]}74	schools = list(node.match_outgoing(rel_type = "STUDIED", end_node = None))75	for i in xrange(0,len(schools)):76		rel = graph_db.relationship(schools[i]._id)77		school[rel.get_properties()["educationType"]].append(schools[i].end_node.get_properties()["name"])78	print school79	company = []80	#WORKED_AT81	companies = list(node.match_outgoing(rel_type = "WORKED_AT", end_node = None))82	for i in xrange(0,len(companies)):83		company.append(companies[i].end_node.get_properties()["name"])84	#WORKS_AT85	companies = list(node.match_outgoing(rel_type = "WORKS_AT", end_node = None))86	for i in xrange(0,len(companies)):87		company.append(companies[i].end_node.get_properties()["name"])88	print company89	#CONNECTED NODES90	connections = list(node.match_outgoing(rel_type = "CONNECTED", end_node = None)) + \91	list(node.match_incoming(rel_type = "CONNECTED"))92	connectionschool = {"College":[],"High School":[],"Graduate School":[]}93	connectioncompany = []94	print "This is connections size:"95	print len(connections)96	#if end node is itself, use start node!!!!97	for i in xrange(0,len(connections)):98		if connections[i].end_node == node:99			print "node and end node are the same!"100			connectioncompanies = list(connections[i].start_node.match_outgoing(rel_type = "WORKS_AT", end_node = None))101		else:102			connectioncompanies = list(connections[i].end_node.match_outgoing(rel_type = "WORKS_AT", end_node = None))103		print "This is connection companies"104		print len(connectioncompanies)105		#works_at106		for j in xrange(0,len(connectioncompanies)):107			connectioncompany.append(connectioncompanies[j].end_node.get_properties()["name"])108		#worked_at109		if connections[i].end_node == node:110			print "node and end node are the same!"111			connectioncompanies = list(connections[i].start_node.match_outgoing(rel_type = "WORKED_AT", end_node = None))112		else:113			connectioncompanies = list(connections[i].end_node.match_outgoing(rel_type = "WORKED_AT", end_node = None))114		for k in xrange(0,len(connectioncompanies)):115			connectioncompany.append(connectioncompanies[k].end_node.get_properties()["name"])116		if connections[i].end_node == node:117			print "node and end node are the same!"118			connectionschools = list(connections[i].start_node.match_outgoing(rel_type = "STUDIED", end_node = None))119		else:120			connectionschools = list(connections[i].end_node.match_outgoing(rel_type = "STUDIED", end_node = None))121		for l in xrange(0,len(connectionschools)):122			rel = graph_db.relationship(connectionschools[l]._id)123			try:124				connectionschool[rel.get_properties()["educationType"]].append(connectionschools[l].end_node.get_properties()["name"])125			except:126				continue127		# print "connection high school"128		# print set(connectionschool["High School"])129	# print connectionschool130	# print connectioncompany131		highschool = list(set(school["High School"]) & set(connectionschool["High School"]))132		college = list(set(school["College"]) & set(connectionschool["College"]) & set(connectionschool["Graduate School"]))133		company_intercept = list(set(company) & set(connectioncompany))134		print "Here are the interceptions:"135		print highschool136		print college137		print company_intercept138		if len(highschool)!=0:139			typechart["Type2"]+=1140			print "same highschool"141		elif len(college)!=0:142			typechart["Type3"]+=1143			print "same college"144		elif len(company_intercept)!=0:145			typechart["Type4"]+=1146		elif len(company_intercept) and len(highschool)!=0:147			typechart["Type5"]+=1148		elif len(company_intercept) and len(college)!=0:149			typechart["Type6"]+=1150		elif len(highschool) != 0 and len(college) !=0:151			typechart["Type7"]+=1152		elif len(highschool) != 0 and len(college) !=0 and len(company_intercept):153			typechart["Type8"]+=1154		else:155			typechart["Type1"]+=1156		#reset the connectionschool and connectioncompany157		connectionschool = {"College":[],"High School":[],"Graduate School":[]}158		connectioncompany = []159	return typechart160query = neo4j.CypherQuery(graph_db, "START n = node(*) WHERE has(n.nodeType) AND n.nodeType = 0 RETURN n LIMIT 1;")161record = list(query.stream())162node = record[0][0]163connectionschool = {"College":[],"High School":[],"Graduate School":[]}164connectionschools = []165connectioncompany = []166# print node167# connections = list(node.match_outgoing(rel_type = "CONNECTED", end_node = None)) + \168# list(node.match_incoming(rel_type = "CONNECTED"))169# a = connections[len(connections)-1].start_node170# connectioncompanies = list(a.match_outgoing(rel_type = "WORKED_AT", end_node = None))171connectionschools = list(node.match_outgoing(rel_type = "STUDIED", end_node = None))172for i in xrange(0,len(connectionschools)):173	# print schools[i]._id174	rel = graph_db.relationship(connectionschools[i]._id)175	# print rel.get_properties()["educationType"]176	connectionschool[rel.get_properties()["educationType"]].append(connectionschools[i].end_node.get_properties()["name"])177print connectionschool178# for k in xrange(0,len(connectioncompanies)):179# 	connectioncompany.append(connectioncompanies[k].end_node.get_properties()["name"])180# for l in xrange(0,len(connectionschools)):181# 			rel = graph_db.relationship(connectionschools[l]._id)182# 			try:183# 				connectionschool[rel.get_properties()["educationType"]].append(connectionschools[l].end_node.get_properties()["name"])184# 			except:185# 				continue186# print connectionschools[1]187# print connectionschools[1]._id188# rel = graph_db.relationship(5)189# print rel.get_properties()190# print rel.get_properties()["educationType"]191# print connectionschools[0].end_node.get_properties()["name"]192# print connectioncompany193# a = graph_db.node(11)194# print a.get_properties()195# print connectionschool196#################################################GOOD BELOW197# for record in query.stream():198# 	node = record[0]199# 	typeCount(typechart,node)200# print typechart201# print typeCount(typechart,12)202end_time = time.time()203print("Elapsed time was %g seconds" % (end_time - start_time))204body = "Elapsed time was %g seconds" % (end_time - start_time)205 206"Sends an e-mail to the specified recipient."207 208body = body + " : " + str(typechart)209 210headers = ["From: " + sender,211           "Subject: " + subject,212           "To: " + recipient,213           "MIME-Version: 1.0",214           "Content-Type: text/html"]215headers = "\r\n".join(headers)216 217session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)218 219session.ehlo()220session.starttls()221session.ehlo222session.login(sender, password)223 224#session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)225#session.quit()226# Connected + Nothing else = Type 1227# Connected + high-school = Type 2228# Connected + college-mate = Type 3229# Connected + co-worker = Type 4230# Connected + co-worker + high-school = Type 5231# Connected + co-worker + college mate = Type 6232# Connected + high-school + college mate = Type 7233# Connected + high school + college mate +co-worker = Type 8234#find particular nodes' high school and college235# node = graph_db.node(727)236# school = {"College":[],"High School":[]}237# schools = list(node.match_outgoing(rel_type = "STUDIED", end_node = None))238# for i in xrange(0,len(schools)):239# 	# print schools[i]._id240# 	rel = graph_db.relationship(schools[i]._id)241# 	# print rel.get_properties()["educationType"]242# 	school[rel.get_properties()["educationType"]].append(schools[i].end_node.get_properties()["name"])243# print school244# company = []245# #WORKED_AT246# companies = list(node.match_outgoing(rel_type = "WORKED_AT", end_node = None))247# for i in xrange(0,len(companies)):248# 	rel = graph_db.relationship(companies[i]._id)249# 	company.append(companies[i].end_node.get_properties()["name"])250# #WORKS_AT251# companies = list(node.match_outgoing(rel_type = "WORKS_AT", end_node = None))252# for i in xrange(0,len(companies)):253# 	# print schools[i]._id254# 	rel = graph_db.relationship(companies[i]._id)255# 	# print rel.get_properties()["educationType"]256# 	company.append(companies[i].end_node.get_properties()["name"])257# print company258# #CONNECTED NODES259# connections = list(node.match_outgoing(rel_type = "CONNECTED", end_node = None))260# connectionschool = {"College":[],"High School":[]}261# connectioncompany = []262# print connections[0].end_node263# #works_at264# connectioncompanies = list(connections[0].end_node.match_outgoing(rel_type = "WORKS_AT", end_node = None))265# print connectioncompanies266# for i in xrange(0,len(connectioncompanies)):267# 	# print schools[i]._id268# 	rel = graph_db.relationship(connectioncompanies[i]._id)269# 	# print rel.get_properties()["educationType"]270# 	connectioncompany.append(connectioncompanies[i].end_node.get_properties()["name"])271# print "this is connection company:"272# print connectioncompany273# #worked_at274# connectioncompanies = list(connections[0].end_node.match_outgoing(rel_type = "WORKED_AT", end_node = None))275# print connectioncompanies276# for i in xrange(0,len(connectioncompanies)):277# 	# print schools[i]._id278# 	rel = graph_db.relationship(connectioncompanies[i]._id)279# 	# print rel.get_properties()["educationType"]280# 	connectioncompany.append(connectioncompanies[i].end_node.get_properties()["name"])281# connectionschools = list(connections[0].end_node.match_outgoing(rel_type = "STUDIED", end_node = None))282# for i in xrange(0,len(connectionschools)):283# 	# print schools[i]._id284# 	rel = graph_db.relationship(connectionschools[i]._id)285# 	# print rel.get_properties()["educationType"]286# 	connectionschool[rel.get_properties()["educationType"]].append(connectionschools[i].end_node.get_properties()["name"])287# highschool = list(set(school["High School"]) & set(connectionschool["High School"]))288# college = list(set(school["College"]) & set(connectionschool["College"]))289# company_intercept = list(set(company) & set(connectioncompany))290# print highschool291# print college292# if len(highschool)!=0:293# 	typechart["Type2"]+=1294# 	print "same highschool"295# if len(college)!=0:296# 	typechart["Type3"]+=1297# 	print "same college"298# if len(highschool) != 0 and len(college) !=0:299# 	typechart["Type7"]+=1300# 	print "same highschool and college"301# print typechart302#print list(set(school["High School"]) & set(connectionschool["High School"]))303#print list(set(school["College"]) & set(connectionschool["College"]))304# print node.get_properties()305# node 12 check all his connection type306# node = graph_db.node(12)307# human = graph_db.get_indexed_relationship("userIdIndex","CONNECTED","12")308# connections = list(node.match_outgoing(rel_type = "CONNECTED", end_node = None))309# connections = list(node.match_outgoing(rel_type = "STUDIED", end_node = None))310# print connections[0]._id311# b = graph_db.relationship(connections[0]._id)312# b.get_properties()["educationType"]313# print b.get_properties()314# name = connections[0].end_node315# print name.get_properties()["name"]316# print(type(connections))317# url = "http://localhost:8001/db/data/relationship/122969794"318# new = neo4j.Node(url)319# print new.get_properties()320# b = graph_db.relationship(122969794)321# print b.get_properties()322# human.get_indexes(neo4j.Relationship)323# print human324# b = graph_db.relationship(122969750)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
