o
    þÞhk  ã                   @   st   d dl mZ d dlmZmZ G dd„ dƒZG dd„ deeƒZG dd„ deeƒZG d	d
„ d
eeƒZ	G dd„ deƒZdS )é    )ÚFeed)Ú	Atom1FeedÚRss201rev2Feedc                   @   s,   e Zd ZdZdd„ Zd
dd„Zd
dd„Zd	S )ÚGeoFeedMixinz…
    This mixin provides the necessary routines for SyndicationFeed subclasses
    to produce simple GeoRSS or W3C Geo elements.
    c                 C   s   d  dd„ |D ƒ¡S )z¿
        In GeoRSS coordinate pairs are ordered by lat/lon and separated by
        a single white space. Given a tuple of coordinates, return a string
        GeoRSS representation.
        ú c                 s   s$   � | ]}d |d |d f V  qdS )z%f %fé   r   N© )Ú.0Úcoordr   r   úX/var/www/html/premium_crap/venv/lib/python3.10/site-packages/django/contrib/gis/feeds.pyÚ	<genexpr>   s   €" z-GeoFeedMixin.georss_coords.<locals>.<genexpr>)Újoin)ÚselfÚcoordsr   r   r   Úgeorss_coords   s   zGeoFeedMixin.georss_coordsFc                 C   sP   |r|dd… \}}|  dd| ¡ |  dd| ¡ dS |  d|  |f¡¡ dS )z¾
        Adds a GeoRSS point with the given coords using the given handler.
        Handles the differences between simple GeoRSS and the more popular
        W3C Geo specification.
        Né   zgeo:latz%fzgeo:lonzgeorss:point)ÚaddQuickElementr   )r   Úhandlerr   Úw3c_geoÚlonÚlatr   r   r   Úadd_georss_point   s
   zGeoFeedMixin.add_georss_pointc                 C   sX  |  d¡}|durªt|ttfƒred}t|d ttfƒr(t|ƒdkr$|}n*tdƒ‚t|ƒdkr7| j|||d� nt|ƒdkrJ|dd… |dd… f}ntdƒ‚|durc|rXtd	ƒ‚| d
|  |¡¡ dS dS t	|j
ƒ ¡ }|dkr{| j||j|d� dS |r�tdƒ‚|dv r‘| d|  |j¡¡ dS |dv r£| d|  |d j¡¡ dS td|j
 ƒ‚dS )z:Add a GeoRSS XML element using the given item and handler.ÚgeometryNr   r   z'Only should be two sets of coordinates.©r   é   z'Only should be 2 or 4 numeric elements.z.Cannot use simple GeoRSS box in W3C Geo feeds.z
georss:boxÚpointz'W3C Geo only supports Point geometries.)Ú
linestringÚ
linearringzgeorss:line)Úpolygonzgeorss:polygonz!Geometry type "%s" not supported.)ÚgetÚ
isinstanceÚlistÚtupleÚlenÚ
ValueErrorr   r   r   ÚstrÚ	geom_typeÚlowerr   )r   r   Úitemr   ÚgeomÚ
box_coordsÚgtyper   r   r   Úadd_georss_element    sN   
ÿ
ÿû
ÿÿÿÏzGeoFeedMixin.add_georss_elementN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r,   r   r   r   r   r      s
    
r   c                       ó4   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )Ú
GeoRSSFeedc                    ó   t ƒ  ¡ }d|d< |S ©Nzhttp://www.georss.org/georsszxmlns:georss©ÚsuperÚrss_attributes©r   Úattrs©Ú	__class__r   r   r7   \   ó   
zGeoRSSFeed.rss_attributesc                    ó   t ƒ  ||¡ |  ||¡ d S ©N©r6   Úadd_item_elementsr,   ©r   r   r(   r:   r   r   r@   a   ó   zGeoRSSFeed.add_item_elementsc                    ó   t ƒ  |¡ |  || j¡ d S r>   ©r6   Úadd_root_elementsr,   Úfeed©r   r   r:   r   r   rE   e   ó   zGeoRSSFeed.add_root_elements©r-   r.   r/   r7   r@   rE   Ú__classcell__r   r   r:   r   r2   [   ó    r2   c                       r1   )ÚGeoAtom1Feedc                    r3   r4   )r6   Úroot_attributesr8   r:   r   r   rM   k   r<   zGeoAtom1Feed.root_attributesc                    r=   r>   r?   rA   r:   r   r   r@   p   rB   zGeoAtom1Feed.add_item_elementsc                    rC   r>   rD   rG   r:   r   r   rE   t   rH   zGeoAtom1Feed.add_root_elements)r-   r.   r/   rM   r@   rE   rJ   r   r   r:   r   rL   j   rK   rL   c                       r1   )Ú
W3CGeoFeedc                    r3   )Nz(http://www.w3.org/2003/01/geo/wgs84_pos#z	xmlns:geor5   r8   r:   r   r   r7   z   r<   zW3CGeoFeed.rss_attributesc                    s"   t ƒ  ||¡ | j||dd� d S ©NTr   r?   rA   r:   r   r   r@      s   zW3CGeoFeed.add_item_elementsc                    s"   t ƒ  |¡ | j|| jdd� d S rO   rD   rG   r:   r   r   rE   ƒ   s   zW3CGeoFeed.add_root_elementsrI   r   r   r:   r   rN   y   rK   rN   c                   @   s$   e Zd ZdZeZdd„ Zdd„ ZdS )r   zÿ
    This is a subclass of the `Feed` from `django.contrib.syndication`.
    This allows users to define a `geometry(obj)` and/or `item_geometry(item)`
    methods on their own subclasses so that geo-referenced information may
    placed in the feed.
    c                 C   s   d|   d|¡iS )Nr   ©Ú_get_dynamic_attr)r   Úobjr   r   r   Úfeed_extra_kwargs“   ó   zFeed.feed_extra_kwargsc                 C   s   d|   d|¡iS )Nr   Úitem_geometryrP   )r   r(   r   r   r   Úitem_extra_kwargs–   rT   zFeed.item_extra_kwargsN)r-   r.   r/   r0   r2   Ú	feed_typerS   rV   r   r   r   r   r   ‰   s
    r   N)
Ú django.contrib.syndication.viewsr   ÚBaseFeedÚdjango.utils.feedgeneratorr   r   r   r2   rL   rN   r   r   r   r   Ú<module>   s    V