
    s%i.                     r    d Z ddlmZ h dZh dZ G d d      Z G d de      Z G d	 d
e      Z	 	 	 ddZy)z0Performs requests to the Google Maps Static API.    )convert>   jpg-baselinegifjpgpngpng8png32>   hybridroadmapterrain	satellitec                       e Zd ZdZd Zd Zy)StaticMapParamz4Base class to handle parameters for Maps Static API.c                     g | _         y N)paramsselfs    m/var/www/html/navyabakers_fullstack/navyabakers_prod/venv_new/lib/python3.12/site-packages/googlemaps/maps.py__init__zStaticMapParam.__init__   s	        c                 B    t        j                  d| j                        S )zvConverts a list of parameters to the format expected by
        the Google Maps server.

        :rtype: str

        |)r   	join_listr   r   s    r   __str__zStaticMapParam.__str__!   s       dkk22r   N)__name__
__module____qualname____doc__r   r    r   r   r   r      s    >3r   r   c                   &     e Zd ZdZ	 d fd	Z xZS )StaticMapMarkerz.Handles marker parameters for Maps Static API.c                    t         t        |           |r| j                  j	                  d|z         |r| j                  j	                  d|z         |rgt        |      dk7  s0|j                         r|j                         r|j                         st        d      | j                  j	                  d|z         | j                  j	                  t        j                  |             y)a  
        :param locations: Specifies the locations of the markers on
            the map.
        :type locations: list

        :param size: Specifies the size of the marker.
        :type size: str

        :param color: Specifies a color of the marker.
        :type color: str

        :param label: Specifies a single uppercase alphanumeric
            character to be displaied on marker.
        :type label: str
        zsize:%scolor:%s   z0Marker label must be alphanumeric and uppercase.zlabel:%sN)superr"   r   r   appendlenisalphaisupperisalnum
ValueErrorr   location_list)r   	locationssizecolorlabel	__class__s        r   r   zStaticMapMarker.__init__.   s    $ 	ot-/KKy4/0KKzE125zQ5==?5==?SXS`S`Sb !STTKKzE12700;<r   )NNNr   r   r   r   r   __classcell__r2   s   @r   r"   r"   +   s    8 /3= =r   r"   c                   (     e Zd ZdZ	 	 d fd	Z xZS )StaticMapPathz,Handles path parameters for Maps Static API.c                    t         t        |           |r| j                  j	                  d|z         |r| j                  j	                  d|z         |r| j                  j	                  d|z         |r| j                  j	                  d|z         | j                  j	                  t        j                  |             y)a  
        :param points: Specifies the point through which the path
            will be built.
        :type points: list

        :param weight: Specifies the thickness of the path in pixels.
        :type weight: int

        :param color: Specifies a color of the path.
        :type color: str

        :param fillcolor: Indicates both that the path marks off a
            polygonal area and specifies the fill color to use as an
            overlay within that area.
        :type fillcolor: str

        :param geodesic: Indicates that the requested path should be
            interpreted as a geodesic line that follows the curvature
            of the earth.
        :type geodesic: bool
        z	weight:%sr$   zfillcolor:%szgeodesic:%sN)r&   r7   r   r   r'   r   r-   )r   pointsweightr0   	fillcolorgeodesicr2   s         r   r   zStaticMapPath.__init__S   s    2 	mT+-KK{V34KKzE12KK~	9:KK}x7870089r   )NNNNr3   r5   s   @r   r7   r7   P   s    6 %)*.': ':r   r7   Nc                    dt        j                  |      i}|	s|s|t        d      |rt        j                  |      |d<   |||d<   |||d<   |r|t        vrt        d      ||d<   |r|t
        vrt        d      ||d	<   |r||d
<   |r||d<   |	r|	|d<   |
r|
|d<   |rt        j                  |      |d<   |rt        j                  |      |d<   | j                  d|d ddi      }|j                         S )a  
    Downloads a map image from the Maps Static API.

    See https://developers.google.com/maps/documentation/maps-static/intro
    for more info, including more detail for each parameter below.

    :param size: Defines the rectangular dimensions of the map image.
    :type param: int or list

    :param center: Defines the center of the map, equidistant from all edges
        of the map.
    :type center: dict or list or string

    :param zoom: Defines the zoom level of the map, which determines the
        magnification level of the map.
    :type zoom: int

    :param scale: Affects the number of pixels that are returned.
    :type scale: int

    :param format: Defines the format of the resulting image.
    :type format: string

    :param maptype: defines the type of map to construct. There are several
        possible maptype values, including roadmap, satellite, hybrid,
        and terrain.
    :type maptype: string

    :param language: defines the language to use for display of labels on
        map tiles.
    :type language: string

    :param region: defines the appropriate borders to display, based on
        geo-political sensitivities.
    :type region: string

    :param markers: define one or more markers to attach to the image at
        specified locations.
    :type markers: StaticMapMarker

    :param path: defines a single path of two or more connected points to
        overlay on the image at specified locations.
    :type path: StaticMapPath

    :param visible: specifies one or more locations that should remain visible
        on the map, though no markers or other indicators will be displayed.
    :type visible: list of dict

    :param style: defines a custom style to alter the presentation of
        a specific feature (roads, parks, and other features) of the map.
    :type style: list of dict

    :rtype: iterator containing the raw image data, which typically can be
        used to save an image file locally. For example:

        ```
        f = open(local_filename, 'wb')
        for chunk in client.static_map(size=(400, 400),
                                       center=(52.520103, 13.404871),
                                       zoom=15):
            if chunk:
                f.write(chunk)
        f.close()
        ```
    r/   z=both center and zoom are requiredwhen markers is not specifedcenterzoomscalezInvalid image formatformatzInvalid maptypemaptypelanguageregionmarkerspathvisiblestylez/maps/api/staticmapc                     | S r   r    )responses    r   <lambda>zstatic_map.<locals>.<lambda>   s    h r   streamT)extract_bodyrequests_kwargs)
r   r/   r,   latlngMAPS_IMAGE_FORMATSMAPS_MAP_TYPESr-   
components_requestiter_content)clientr/   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   rJ   s                  r   
static_maprV   }   sE   L gll4()F$*/ 
 ">>&1xvw++455!x.(.//#y%z!x#yv#11':y!,,U3w.!4(	  H   ""r   )NNNNNNNNNNN)	r   
googlemapsr   rP   rQ   r   r"   r7   rV   r    r   r   <module>rX      sP   $ 7  L >3 3 "=n "=J*:N *:\ .2@D<@z#r   