U
    ¥ùd­  ã                   @   sj   d dl mZ d dlmZ d dlmZ d dlmZ G dd„ dejƒZG dd„ dejƒZG d	d
„ d
ejƒZdS )é    )Úabort)Ú
collection)Údatabase)Úmongo_clientc                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )ÚMongoClientzöWrapper for :class:`~pymongo.mongo_client.MongoClient`.

    Returns instances of Flask-PyMongo
    :class:`~flask_pymongo.wrappers.Database` instead of native PyMongo
    :class:`~pymongo.database.Database` when accessed with dot notation.

    c                    s*   t t| ƒ |¡}t|tjƒr&t| |ƒS |S ©N)Úsuperr   Ú__getattr__Ú
isinstancer   ÚDatabase©ÚselfÚnameÚattr©Ú	__class__© ú:/tmp/pip-unpacked-wheel-4yt48ixh/flask_pymongo/wrappers.pyr	   *   s    
zMongoClient.__getattr__c                    s*   t t| ƒ |¡}t|tjƒr&t| |ƒS |S r   )r   r   Ú__getitem__r
   r   r   )r   Úitemr   r   r   r   r   0   s    
zMongoClient.__getitem__©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   Ú__classcell__r   r   r   r   r       s   r   c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )r   zõWrapper for :class:`~pymongo.database.Database`.

    Returns instances of Flask-PyMongo
    :class:`~flask_pymongo.wrappers.Collection` instead of native PyMongo
    :class:`~pymongo.collection.Collection` when accessed with dot notation.

    c                    s*   t t| ƒ |¡}t|tjƒr&t| |ƒS |S r   )r   r   r	   r
   r   Ú
Collectionr   r   r   r   r	   A   s    
zDatabase.__getattr__c                    s*   t t| ƒ |¡}t|tjƒr&t| |ƒS |S r   )r   r   r   r
   r   r   )r   r   Úitem_r   r   r   r   G   s    
zDatabase.__getitem__r   r   r   r   r   r   7   s   r   c                       s4   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )r   zPSub-class of PyMongo :class:`~pymongo.collection.Collection` with helpers.

    c                    s2   t t| ƒ |¡}t|tjƒr.| j}t||jƒS |S r   )r   r   r	   r
   r   Ú_Collection__databaser   )r   r   r   Údbr   r   r   r	   T   s
    zCollection.__getattr__c                    s2   t t| ƒ |¡}t|tjƒr.| j}t||jƒS |S r   )r   r   r   r
   r   r   r   )r   r   r   r   r   r   r   r   [   s
    zCollection.__getitem__c                 O   s    | j ||Ž}|dkrtdƒ |S )aí  Find a single document or raise a 404.

        This is like :meth:`~pymongo.collection.Collection.find_one`, but
        rather than returning ``None``, cause a 404 Not Found HTTP status
        on the request.

        .. code-block:: python

            @app.route("/user/<username>")
            def user_profile(username):
                user = mongo.db.users.find_one_or_404({"_id": username})
                return render_template("user.html",
                    user=user)

        Ni”  )Zfind_oner   )r   ÚargsÚkwargsÚfoundr   r   r   Úfind_one_or_404b   s    zCollection.find_one_or_404)r   r   r   r   r	   r   r#   r   r   r   r   r   r   N   s   r   N)	Zflaskr   Zpymongor   r   r   r   r   r   r   r   r   r   Ú<module>   s   