
    ը	fQ                         d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ ej$                  j&                  dk\  reZd Znd	 Zd
 Zd Z G d de      Zy)aM  
@package dbmgr.vinfo

@brief Support classes for Database Manager

List of classes:
 - vinfo::VectorDBInfo

(C) 2007-2013 by the GRASS Development Team

This program is free software under the GNU General Public License
(>=v2). Read the file COPYING that comes with GRASS for details.

@author Martin Landa <landa.martin gmail.com>
    N)VectorDBInfo)
StaticText)
RunCommandGError)UserSettings   c                     t        | t              r| S t        | t              rt               }t	        | |d      S t	        |       S zeGet unicode value

        :param value: value to be recoded

        :return: unicode value
        replace)errors)
isinstanceunicodebytesGetDbEncodingstrvalueencs     ,/usr/lib/grass83/gui/wxpython/dbmgr/vinfo.pyGetUnicodeValuer       s=     eW%LeU#/Cuc)44u:    c                 h    t        | t              r| S t               }t        t        |       |d      S r
   )r   r   r   r   r   s     r   r   r   1   s-     eW%Los5z3y99r   c                      t        j                  ddd      } | s'dt        j                  v rt        j                  d   } | S d} | S )zdChecks if user set DB encoding (first user settings,
    then env variable), if not assumes unicode.atmencodingr   )groupkeysubkeyGRASS_DB_ENCODINGzutf-8)r   Getosenviron)r   s    r   r   r   >   sI     

Jw
GC&"**4jj,- J Jr   c                    t        j                  ddd      }|j                  d       |j                  t	        | t         j
                  d             |j                  t	        | t         j
                  |j                  |   d                |j                  t	        | t         j
                  d             |j                  t	        | t         j
                  |j                  |   d                |j                  t	        | t         j
                  d	             |j                  t	        | t         j
                  |j                  |   d
                |j                  t	        | t         j
                  d             |j                  t	        | t         j
                  |j                  |   d                |S )z.Create database connection information content      )colshgapvgapzDriver:)parentidlabeldriverz	Database:databasezTable:tablezKey:r   )wxFlexGridSizerAddGrowableColAddr   ID_ANYlayers)panel	mapDBInfolayerinfoFlexSizers       r   CreateDbInfoDescr9   I   sY   $$!!!<M  #j"))9MN%BIIY5E5Ee5LX5VW j"));OPRYYi.>.>u.Ej.Q	

 j"))8LM%BIIY5E5Ee5LW5UV j"))6JK%BIIY5E5Ee5LU5ST r   c                   *    e Zd ZdZd Zd Zd ZddZy)r   zOClass providing information about attribute tables
    linked to the vector mapc                 0    t        j                  | |       y )N)VectorDBInfoBase__init__)selfmaps     r   r=   zVectorDBInfo.__init__h   s    !!$,r   c                     	 dgt        | j                  |   j                               z  }t	        j
                  | j                  |         D ]  \  }}|||d   <    |S # t        $ r g cY S w xY w)z3Return list of columns names (based on their index) index)lentableskeysKeyErrorsix	iteritems)r>   r.   namesnamedescs        r   
GetColumnszVectorDBInfo.GetColumnsk   s|    	D3t{{5166899E --E(:; 	(JD$#'E$w- 	(   	I	s   *A   A.-A.c                    d}d}	 t        j                  | j                  t        |d         t        |d         ft        |            }t              dk  st        d |D              ryt               }d	D ]  }t               ||<    |D ]  }d
|vr	|d
   }	t        j                  |d         D ]}  \  }}
t        |
      dk  rd}
nC| j                  |	   |   d   t        k7  r | j                  |	   |   d   |
      }
nt!        |
      }
| j                  |	   |   d   j#                  |
        t        j                  |      D ]$  \  }}
|dk(  r||v s||   j#                  |
       & d|j%                         vs|d   j#                  d        |S # t         j                  $ r4 t        dt        d      j                  | j                               Y w xY w)zhGet attributes by coordinates (all available layers)

        Return line id or None if no line is foundNr   r%   )r?   coorddistancezIFailed to query vector map <{map}>. Check database settings and topology.)r?   )r)   messagec              3   $   K   | ]  }d |v 
 yw)TableN ).0records     r   	<genexpr>z-VectorDBInfo.SelectByPoint.<locals>.<genexpr>   s     KF!6Ks   )CategoryLayerrR   IdrR   
AttributesctypevaluesrY   )grassvector_whatr?   floatScriptErrorr   _formatrC   alldictlistrG   rH   rD   r   r   appendrE   )r>   queryCoordsqdistline	nselecteddataretr   rU   r.   r   s              r   SelectByPointzVectorDBInfo.SelectByPointw   s    		$$HH[^,eKN.CDuD t9q=CKdKK f7 	CvCH	  	'Ff$7OE!mmF<,@A @
Uu:> E{{5)#.w73> @E 23 7 @ G / 6E"3'188?@ "mmF3 +
U,&#:HOOE*	+
 6;;=(D	  &+	'. 
Q    	< &TXX&& 	s   AF AG! G!Nc           
         |dk  ryd}| j                   |   d   }||dk(  r	d|d|}nd|d|d|}t        d	d
d
d|| j                   |   d   | j                   |   d         }|r|j                         D ]  }|j                  d      \  }	}
|
rGt	        d| j
                  |   |	   d         s | j
                  |   |	   d   |
      }
nt        |
      }
nd}
| j
                  |   |	   d   j                  |
       d} |S )z^Select records from the table

        Return number of selected records, -1 on error
        r   r.   NrA   zSELECT z FROM z WHERE z	db.selectTvr-   r,   )readquietflagssqlr-   r,   |r[   r\   r%   )r4   r   
splitlinessplitr   rD   r   rf   )r>   r7   r&   whererj   r.   rt   rl   ri   rJ   r   s              r   SelectFromTablezVectorDBInfo.SelectFromTable   s2   
 A:	E"7+=ERK)-u5C ( 37uEC[['
3;;u%h/
 ( "jjoe%b$++e*<T*B7*KL AE 24 8 A% H / 6 EE"4(299%@	 r   )*N)__name__
__module____qualname____doc__r=   rL   rm   ry   rS   r   r   r   r   d   s     -
5n*r   r   )r~   r!   sysrG   r/   gui_core.gselectr   r<   gui_core.wrapr   	core.gcmdr   r   core.settingsr   grass.scriptscriptr]   version_infomajorr   r   r   r   r9   rS   r   r   <module>r      sc     
 
 
 	 = $ ( & QG"
:6t# tr   