U
    ҭc.                     @   sh   d Z ddlmZ ddddddhZd	d
ddhZG dd dZG dd deZG dd deZdddZdS )z0Performs requests to the Google Maps Static API.    )convertZpng8ZpngZpng32ZgifZjpgzjpg-baselineZroadmapZ	satelliteZterrainZhybridc                   @   s    e Zd ZdZdd Zdd ZdS )StaticMapParamz4Base class to handle parameters for Maps Static API.c                 C   s
   g | _ d S N)paramsself r   L/home/ubuntu/graampay/app_env/lib/python3.8/site-packages/googlemaps/maps.py__init__   s    zStaticMapParam.__init__c                 C   s   t d| jS )zvConverts a list of parameters to the format expected by
        the Google Maps server.

        :rtype: str

        |)r   Z	join_listr   r   r   r   r	   __str__!   s    zStaticMapParam.__str__N)__name__
__module____qualname____doc__r
   r   r   r   r   r	   r      s   r   c                       s"   e Zd ZdZd fdd	Z  ZS )StaticMapMarkerz.Handles marker parameters for Maps Static API.Nc                    s   t t|   |r"| jd|  |r6| jd|  |rvt|dks^| rV| r^| sft	d| jd|  | jt
| dS )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   Z	locationssizecolorlabel	__class__r   r	   r
   .   s    $zStaticMapMarker.__init__)NNNr   r   r   r   r
   __classcell__r   r   r   r	   r   +   s
        r   c                       s"   e Zd ZdZd fdd	Z  ZS )StaticMapPathz,Handles path parameters for Maps Static API.Nc                    st   t t|   |r"| jd|  |r6| jd|  |rJ| jd|  |r^| jd|  | jt| dS )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   r#   r
   r   r   r   r   )r   ZpointsZweightr   Z	fillcolorZgeodesicr   r   r	   r
   S   s    zStaticMapPath.__init__)NNNNr!   r   r   r   r	   r#   P   s         r#   Nc                 C   s  dt |i}|	s&|s&|dk	s&td|r8t ||d< |dk	rH||d< |dk	rX||d< |rt|tkrltd||d< |r|tkrtd	||d
< |r||d< |r||d< |	r|	|d< |
r|
|d< |rt ||d< |rt ||d< | jd|dd ddid}|	 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   Nz=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   s   | S r   r   )responser   r   r	   <lambda>       zstatic_map.<locals>.<lambda>streamT)Zextract_bodyZrequests_kwargs)
r   r   r   ZlatlngMAPS_IMAGE_FORMATSMAPS_MAP_TYPESr   
componentsZ_requestZiter_content)Zclientr   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r   r/   r   r   r	   
static_map}   sN    Fr6   )NNNNNNNNNNN)	r   
googlemapsr   r3   r4   r   r   r#   r6   r   r   r   r	   <module>   s$   %.                   