o
    KeE                     @   s  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
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mZ 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eee
ddd Z 	 	 eee
dddd Z!eee
dd8ddZ"G dd dejZ#G d d! d!ejZ$G d"d# d#ejZ%G d$d% d%ejZ&G d&d' d'ejZ'G d(d) d)ejZ(G d*d+ d+ejZ)G d,d- d-ejZ*G d.d/ d/ejZ+	 G d0d1 d1ejZ,G d2d3 d3ejZ-G d4d5 d5ejZ.G d6d7 d7ejZ/dS )9    N)settings)forms)models)timezone)User)myutils)	mark_safe)	post_save
pre_delete)receiver)QUniqueConstraint)HttpResponse)user_signed_up)email_confirmed)email_changedc                   @   s2   e Zd ZejddZejddZG dd dZdS )Colors   )
max_length   c                   @   s   e Zd ZedgddgZdS )zColors.Meta	colornameunique_colorname)fieldsnameN)__name__
__module____qualname__r   constraints r   r   $/var/www/ideatree/ideatree/models.pyMeta   s    r    N)r   r   r   r   	CharFieldr   hexvaluer    r   r   r   r   r      s    r   c                   @   s   e Zd ZejdfejdfejdffZej	e
dejdZejdejedZejddd	Zejejd
ZejddejdZejejd
ZejdddZejdddZejdddZdS )UserProfilefreeregularpremiumFnull	on_delete   )r   defaultchoicesTauto_now_addr(   r+      r   r(   r+   r(   r+   x    r   r+   N)r   r   r   r   	FREE_ACCTREGULAR_ACCTPREMIUM_ACCTACCOUNT_TYPE_CHOICESr   OneToOneFieldr   CASCADEuserr!   accounttypeDateTimeFieldregisterdatePositiveSmallIntegerFieldFREE_ACCT_TRIALPERIOD_DAYStrialperioddaysUSER_DEFAULT_MAP_SETTINGSmapsettingsFREE_USER_NUM_MAPS_ALLOWEDnummapsallowedBooleanFieldinvitationpendingstripecustomeriddeletegloballyr   r   r   r   r#      s    r#   )senderc              
   K   s   z*|r(dd l }tj|_|jjd|jd|jid}tj	j||j
d}|  W d S W d S  |jjyE } ztt| W Y d }~d S d }~w ty] } ztt| W Y d }~d S d }~ww )Nr   zIdeaTree paid account customeruser_id)descriptionemailmetadata)r<   rI   )striper   STRIPE_API_KEYapi_keyCustomercreaterN   pkr#   objectsidsaveerrorInvalidRequestErrorprintstr	Exception)rK   instancecreatedkwargsrP   stripe_customer_objectuserProfileerrr   r   r   create_user_profile1   s&   rd   zStripe Customer object update.)rK   dispatch_uidc           	   
   K   s   zdd l }tjj|d}tj|_|jj|j	|j
d W d S  |jjy8 } ztt|ddW  Y d }~S d }~w tyQ } ztt|ddW  Y d }~S d }~ww )Nr   r<   )rN     status)rP   r#   rV   getr   STRIPE_SECRET_KEYrR   rS   modifyrI   rN   rY   rZ   r   r\   r]   )	rK   requestr<   from_email_addressto_email_addressr`   rP   profilerc   r   r   r   update_stripe_customer_objectj   s   rq   #Remove Customer object from Stripe.c           	   
   K   s   zdd l }tj|_tjjtd}|j	|j
}W d S  |jjy5 } ztt|ddW  Y d }~S d }~w tyN } ztt|ddW  Y d }~S d }~ww )Nr   rf   rg   rh   )rP   r   rk   rR   r#   rV   rj   r<   rS   deleterI   rY   rZ   r   r\   r]   )	rK   r^   usingre   r`   rP   rp   resultrc   r   r   r   delete_stripe_customer   s   rv   c                   @   sJ   e Zd ZejdddZejedejdZ	ej
dddZejddddZdS )		ContactUsTFr-   r'   blankr(   i&  r   ry   r(   N)r   r   r   r   r>   date
ForeignKeyr   SET_NULLr<   
EmailFieldrN   r!   messager   r   r   r   rw      s
    rw   c                   @   s  e Zd ZejdfejdffZeje	dej
dZejddddZejddd	Zejd
eejdZejdddddZejddZejdejejddZejdddddZejdddddZejdddZejddddZejdddZejdddZejd
ejddZdd ZdS )Map_descActiveDeletedFr'   7   Trz   }   )r   ry   r*   r   r,   r+   r   FeFeFaFFr   ry   r(   r+   r(      )r   r+   r,   ry      dot   filled,rounded)r   r(   r+   ry   r   r+   ry   F0E68Cr   r+   ry   g      @c                 C      | j S N)mapnameselfr   r   r   __str__      zMap_desc.__str__N) r   r   r   r   
MAP_ACTIVEMAP_DELETEDMAP_STATUS_CHOICESr   r|   r   r;   ownerr!   r   rM   ri   bgcolorr@   	nodesleftDEFAULT_MAP_LAYOUT_ORIENTATIONMAP_LAYOUT_ORIENTATIONSorientationlayoutenginedefaultNodeStyledefaultNodeShapedefaultNodeFillcolor
FloatFielddefaultNodeHeightdefaultNodeWidthORIGINAL_NODEdefaultNodeTyper   r   r   r   r   r      s&    r   c                   @   sv   e Zd ZejdfejdfejdfejdffZe	j
ede	jdZe	j
edde	jd	Ze	jddd
Ze	jdeejdZdS )FriendacceptedinviteddeclineddeletedFr'   TfriendTablefriendFieldr(   related_namer)   rx   r*   r   N)r   r   r   r   FRIEND_ACCEPTEDFRIEND_INVITEDFRIEND_DECLINEDFRIEND_DELETEDFRIEND_STATUS_CHOICESr   r|   r   r;   	initiatorfriendr~   rN   r!   ri   r   r   r   r   r      s    r   c                       sn   e Zd ZejdfejdffZeje	dej
dZejedej
dZejdeejdZ fddZd	d
 Z  ZS )	Mapmemberr   r   Fr'   r*   r   c                    sz   | j j}| j|krtt| j|i | d S tjt	| j|dt	|| jdB 
 }|r9tt| j|i | d S td)N)r   r   z+Users sharing a map must exist as a friend.)ofmapr   membersuperr   rX   r   rV   filterr   countr]   )r   argsr`   mapOwnerisFriend	__class__r   r   rX      s   
(zMapmember.savec                 C   s   t | jjS r   )r\   r   usernamer   r   r   r   r         zMapmember.__str__)r   r   r   r   MAPMEMBERSHIP_ACTIVEMAPMEMBERSHIP_DELETEDMAPMEMBERSHIP_STATUS_CHOICESr   r|   r   r;   r   r   r   r!   ri   rX   r   __classcell__r   r   r   r   r      s    r   c                   @   s*   e Zd ZejedejdZejddZ	dS )Map_access_changedFr'   r   N)
r   r   r   r   r:   r   r;   r<   rG   changedr   r   r   r   r      s    r   c                   @   s0   e Zd ZejedejdZejedejdZ	dS )WhosViewingMapFr'   N)
r   r   r   r   r|   r   r;   r<   r   	mapViewedr   r   r   r   r      s    r   c                   @   s  e Zd ZejddZejejdddZ	ej
dddZejedejdZejedejdZejdddd	d
ZejedddejdZejddddd	ejdZejddZejdejejdZejdejd	dZejdddZejdddZejddddZejd	ddZ ej!dddZ"ejddddZ#ejdddZ$ejdddZ%ejdddZ&ejej'ddd	d
Z(ej)ddZ*ej+ddd	ej,dZ-ej.dd	dZ/ej0ddZ1d d! Z2d"d# Z3d$d% Z4d&d' Z5d	S )(NodeTprimary_keyrz   zdate createdauto_nowFr'   r   Nr   +)ry   r(   r   r)   r   )r   ry   r(   r+   r)   r   r/   r*   r   r      z2.5,2.5r   )r+   r(   r2   r   r1   r   r   r5   000000)ry   r(   r+   r   c                 C   s   | j r| j S t| jS r   )labelr\   rW   r   r   r   r   r     s   
zNode.__str__c                 C      t | jS r   )r   tostrurlr   r   r   r   __url__  r   zNode.__url__c                 C   r   r   )r   r   rM   r   r   r   r   __description__  r   zNode.__description__c                 C   .   t  }|tjdd | j  ko|kS   S Nr*   )days)r   nowdatetime	timedeltapub_dater   r   r   r   r   was_published_recently     &zNode.was_published_recently)6r   r   r   r   BigAutoFieldrW   r!   r   NODE_LABEL_LENGTHr   r>   created_dater|   r   r;   r   r   r   targetmapnametunnelfarendmaptunnelfarendnodePositiveIntegerField	clusteridNODE_STATUS_CHOICESNODE_ACTIVEri   NODE_TYPE_CHOICESnodetyper   xposypossizelwidthSmallIntegerFieldshapestyle	fillcolorpencolor	fontcolorNODE_DESCRIPTION_LENGTHrM   r@   numcommentsURLFieldNODE_URLFIELD_LENGTHr   BigIntegerFieldhiddenbranchrG   isbranchheadr   r   r   r   r   r   r   r   r      s<    r   c                   @   s   e Zd ZejdfejdffZejdddZ	ej
edejdZejddddd	Zej
edejdZejd
ddZejdeejdZdd ZdS )NodeCommentr   r   TF)r   ry   r'   i   Nr   r{   r   r*   r   c                 C   r   r   )r   r   r   r   r{   r   r   r   r   r   (  r   z"NodeComment.was_published_recently)r   r   r   r   NODE_COMMENT_ACTIVENODE_COMMENT_DELETEDNODE_COMMENT_CHOICESr   r   rW   r|   r   r;   noder!   commentr   r<   r>   r{   ri   r   r   r   r   r   r    s    r  c                   @   s^   e Zd ZejedejdZejddZ	eje
dejdZejdddZejdejejd	Zd
S )VoteFr'   r   r/   r{   Tr   r*   r   N)r   r   r   r   r|   r   r;   r  r@   voter   r<   r>   r{   r!   r   VOTABLE_STATUS_CHOICESVOTABLE_ACTIVEri   r   r   r   r   r	  2  s    r	  c                   @   s.  e Zd ZejdfejdfejdffZej	ddZ
ejdddZejdd	ddd
ZejdeejdZejedejdZejedddejdZejedejdZejedddejdZejddZejddddZejddZejddZejdd	ddZ ej!dddZ"ej#ej$ddZ%G dd dZ&dd  Z'dS )!Edgeprovisionalactiver   Tr   zcreation dater   r0   r4   )r   r+   ry   r(   r*   r   F)ry   r)   NconnectedEdgeOrigin)r(   r+   r   r)   connectedEdgeTargetr/   r   r   )r   ry   r+   g      ?r   i  r   r2   r   c                   @   s   e Zd ZdZdZdS )z	Edge.MetaTideatree_edgeN)r   r   r   manageddb_tabler   r   r   r   r    V  s    r    c                 C   r   r   )r   r   r   r   r   r   Z  r   zEdge.__str__)(r   r   r   r   EDGE_PROVISIONALEDGE_ACTIVEEDGE_DELETEDEDGE_STATUS_CHOICESr   r   rW   r>   creation_dater!   r   ri   r|   r   r;   r   r   originr   r   targetrG   	pheremonecolorr   penwidthr@   	arrowheaddrawr   r  r   DEFAULTEDGE_COSTcostr    r   r   r   r   r   r  @  s&    r  c                   @   s,   e Zd ZejeejdZejeejdZ	dS )WhosLoggedIn)r)   N)
r   r   r   r   r|   r   r;   
currentmapr   r<   r   r   r   r   r#  `  s    r#  c                   @   s4   e Zd ZejddddZejddZejddZdS )ClientPermissionr   Frz   r/   N)	r   r   r   r   r!   actionrG   iown	permittedr   r   r   r   r%  f  s    r%  c                   @   sD   e Zd ZejedejdZejedej	dZ
ejeddej	dZdS )MapPathEndpointsFr'   Tr   r   N)r   r   r   r   r:   r   r;   r   r   r}   pathBeginNodepathEndNoder   r   r   r   r)  m  s    r)  )rr   )0r   django.confr   djangor   	django.dbr   django.utilsr   django.contrib.auth.modelsr   ideatree.utilsr   django.utils.safestringr   django.db.models.signalsr	   r
   django.dispatchr   django.db.modelsr   r   django.httpr   allauth.account.signalsr   r   r   Modelr   r#   rd   rq   rv   rw   r   r   r   r   r   r   r  r	  r  r#  r%  r)  r   r   r   r   <module>   sN    



7 