o />h":@s$ddlmZddlmZddZdS))datetime)loggerc Cs ddddddddgd }zd[dd}d\dd}gd }d |vs&|d |vr8d |d <|d d|d dd|vr||d}|d dvre|dksP|dkrdd |d<|d d|d d|dn;|d dvr|dkss|dkrd |d<|d d|d d|dn|d dvr|dkrd |d<|d d|d|vr ||d}|d dvr|dks|dkrd |d<|d d|d d|d n=|d dvr|d!ks|dkrd |d<|d d|d d|d"n|d dvr |dkr d |d<|d d#|d$|vrz]t|d$}|dkr,d |d%<|d d&|d'n@d|vrld|vrlz+t|d}tt|d}|||kr`d |d%<|d d(|d)||d*Wn tykYnwWntyd |d%<|d d+Ynwd,|vr zot|d,}|d dvr|d-ks|dkrd |d.<|d d/|d d|d0nA|d dvr|dks|dkrd |d.<|d d/|d d|d n|d dvr|dkrd |d.<|d d1|d'Wnty d |d.<|d d2Ynwd3|vrzt|d3d4d5} | dkr2d |d6<|d d7| d8nq|d dvrk| d9krRd |d6<|d d:| d;|d nQ| dkrd |d6<|d d:| d;|d n| d?krd |d6<|d d:| d=|d Wntyd |d6<|d d@YnwdA|vrWzt|dAd4d5dBd5} | dkrd |dC<|d dD| d8nY|d dvr"| dEkrd |dC<|d dF| dGd;|d n| dHkr!d |dC<|d dF| dGd=|d n||d dvr]| dIkrCd |dC<|d dF| dGd;|d n[| dJkr\d |dC<|d dF| dGd=|d nA|d dKvr~| dLkr}d |dC<|d dF| dGd=|d n |d dMvr| dNkrd |dC<|d dF| dGd=|d d3|vr@t|d3d4d5dkr@zt|d3d4d5} | | } |d dvr| dOkrd |dC<|d dP| dGd=|d nT| dQkrd |dC<|d dP| dGd;|d n:|d dvr4| d?krd |dC<|d dP| dGd=|d n| dRkr4d |dC<|d dP| dGd;|d Wn ty?YnwWntyVd |dC<|d dSYnwt|d|d|d%|dT|d.|d6|dCg} dU} | | dV|dW<t|d|d|d%|dT|d.|d6|dCg|d <W|St y}z!t dXt |d |d <|d dYt |WYdZ}~|SdZ}~ww)]z Verify property specifications for reasonableness and consistency. This function checks if the provided property details are within reasonable ranges for the Indian real estate market. T) is_validbedrooms_reasonablebathrooms_reasonabletotal_rooms_reasonableyear_built_reasonableparking_reasonablesq_ft_reasonablemarket_value_reasonableissuesc Ssbz#t|ttfr t|WSt|tr!t|ddddWS|WSttfy0|YSw)N,₹ isinstanceintfloatstrreplacestrip ValueError TypeErrorvaluedefaultr0D:\propertyverify_final\models\property_specs.pysafe_float_converts  z1verify_property_specs..safe_float_convertrc Ss^z!t|ttfr t|WSt|trtt|ddWS|WSttfy.|YSw)Nrrrrrrrsafe_int_convert$s  z/verify_property_specs..safe_int_convert) ApartmentHouseVillaIndependent HouseIndependent VillaStudio CommercialOfficeShop Warehouse Industrial property_typeFrr zInvalid property type: z Not specifiedbedrooms)r"r'rzInvalid number of bedrooms for z: z. Should be between 0 and 5.)r#r$r%r&z. Should be between 0 and 8.)r(r)r*r+r,z5Commercial properties typically don't have bedrooms: bathroomsrz Invalid number of bathrooms for z. Should be between 0 and 4.z. Should be between 0 and 6.z6Commercial properties typically don't have bathrooms: total_roomsrzInvalid total rooms: z. Cannot be negative.z Total rooms (z%) is less than bedrooms + bathrooms ()z*Invalid total rooms data: must be a numberparkingr zInvalid parking spaces for z. Should be between 0 and 2.zInvalid parking spaces: z&Invalid parking data: must be a numbersq_ftrrr zInvalid square footage: z. Must be greater than 0.izSquare footage (z) seems unreasonably high for z) seems unreasonably low for i'iz-Invalid square footage data: must be a number market_valuerr zInvalid market value: ieuMarket value (₹z,.2fi i5wi@B)r(r)r*i)r+r,i@KLiuPrice per sq ft (₹iPiz+Invalid market value data: must be a numberr dverification_scorez&Error in property specs verification: zError in verification: N)r)r) appendgetrrrrrsumall Exceptionrerrorr)dataspecs_verificationr r!Zvalid_property_typesr.r1r4r6r8r:price_per_sqftZ valid_checks total_checkserrrverify_property_specss                                      "   "      $ "   "    "rIN)rlogging_configrrIrrrrs