o
    2gb"                     @  s  d dl mZ d dlZd dlZd dlmZ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mZmZmZ ddlmZmZ eeZeZe
G dd dZe
G dd dZ e
G dd dZ!e
G dd dZ"e
G dd dZ#e
G dd dZ$e
G dd dZ%d4ddZ&d5d!d"Z'd6d&d'Z(G d(d) d)Z)ej*d*d+ Z+d7d-d.Z,d8d0d1Z-ed2krej.e)e-d3 dS dS )9    )annotationsN)IteratorSequence)Executor)	dataclass)datetimetimezone)Path   )
dal_helperlogging_helper)JsonPathIshdatetime_awarepathify)DummyFuturejson_items_as_listc                   @  st   e Zd ZU ded< ded< ded< dd Zedd
dZedddZedddZedddZ	edddZ
dS )Saver   createdstrtitler   rawc                 C  
   t | jS N)hashsidself r   C/home/garg/my-data/venv/lib/python3.10/site-packages/rexport/dal.py__hash__   s   
zSave.__hash__returnc                 C  
   | j d S Nidr   r   r   r   r   r$         
zSave.idSidc                 C  s   | j S r   )r$   r   r   r   r   r   $   s   zSave.sidc                 C     t | jd S N	permalinkredditr   r   r   r   r   url(      zSave.urlc                 C  r   r   get_textr   r   r   r   r   text,   r&   z	Save.textc                 C  s   | j d d S )N	subredditdisplay_namer%   r   r   r   r   r2   0   r.   zSave.subredditNr!   r   )r!   r'   )__name__
__module____qualname____annotations__r    propertyr$   r   r-   r1   r2   r   r   r   r   r      s   
 r   c                   @  sN   e Zd ZU ded< edddZeddd	Zedd
dZedddZdS )Commentr   r   r!   r   c                 C  r"   r#   r%   r   r   r   r   r$   9   r&   z
Comment.idr   c                 C  r(   Ncreated_utcmake_dtr   r   r   r   r   r   =   r.   zComment.createdc                 C  r(   r)   r+   r   r   r   r   r-   A   r.   zComment.urlc                 C  r"   )Nbodyr%   r   r   r   r   r1   E   r&   zComment.textNr4   r!   r   )	r5   r6   r7   r8   r9   r$   r   r-   r1   r   r   r   r   r:   5   s   
 r:   c                   @  \   e Zd ZU ded< edddZeddd	Zedd
dZedddZedddZ	dS )
Submissionr   r   r!   r   c                 C  r"   r#   r%   r   r   r   r   r$   N   r&   zSubmission.idr   c                 C  r(   r;   r=   r   r   r   r   r   R   r.   zSubmission.createdc                 C  r(   r)   r+   r   r   r   r   r-   V   r.   zSubmission.urlc                 C  r   r   r/   r   r   r   r   r1   Z   r&   zSubmission.textc                 C  r"   Nr   r%   r   r   r   r   r   ^   r&   zSubmission.titleNr4   r@   
r5   r6   r7   r8   r9   r$   r   r-   r1   r   r   r   r   r   rB   J      
 rB   c                   @  rA   )Upvoter   r   r!   r   c                 C  r"   r#   r%   r   r   r   r   r$   g   r&   z	Upvote.idr   c                 C  r(   r;   r=   r   r   r   r   r   k   r.   zUpvote.createdc                 C  r(   r)   r+   r   r   r   r   r-   o   r.   z
Upvote.urlc                 C  r   r   r/   r   r   r   r   r1   s   r&   zUpvote.textc                 C  r"   rC   r%   r   r   r   r   r   w   r&   zUpvote.titleNr4   r@   rD   r   r   r   r   rF   c   rE   rF   c                   @  s@   e Zd ZU ded< edddZedddZedd	d
ZdS )	Subredditr   r   r!   r   c                 C  r"   r#   r%   r   r   r   r   r$      r&   zSubreddit.idc                 C  r(   )Nr-   r+   r   r   r   r   r-      r.   zSubreddit.urlc                 C  r"   rC   r%   r   r   r   r   r      r&   zSubreddit.titleNr4   )r5   r6   r7   r8   r9   r$   r-   r   r   r   r   r   rG   |   s   
 rG   c                   @  s@   e Zd ZU ded< edddZedddZedd
dZdS )Multiredditr   r   r!   r   c                 C  r"   )Npathr%   r   r   r   r   rI      s   
zMultireddit.pathc                 C  r"   Nnamer%   r   r   r   r   rK      r&   zMultireddit.nameSequence[str]c                 C  s   t dd | jd D S )Nc                 s  s    | ]}|d  V  qdS )_pathNr   ).0rr   r   r   	<genexpr>   s    z)Multireddit.subreddits.<locals>.<genexpr>
subreddits)tupler   r   r   r   r   rQ      s   zMultireddit.subredditsNr4   )r!   rL   )r5   r6   r7   r8   r9   rI   rK   rQ   r   r   r   r   rH      s   
 rH   c                   @  sj   e Zd ZU ded< edddZedddZedd	d
ZedddZedddZ	edddZ
dS )Profiler   r   r!   r   c                 C  r"   r#   r%   r   r   r   r   r$      r&   z
Profile.idc                 C  s   t | jd d S )Nr2   r-   r+   r   r   r   r   r-      s   zProfile.urlc                 C  r"   rJ   r%   r   r   r   r   rK      r&   zProfile.nameintc                 C  r"   )Ncomment_karmar%   r   r   r   r   rU      r&   zProfile.comment_karmac                 C  r"   )N
link_karmar%   r   r   r   r   rV      r&   zProfile.link_karmac                 C  r"   )Ntotal_karmar%   r   r   r   r   rW      r&   zProfile.total_karmaNr4   )r!   rT   )r5   r6   r7   r8   r9   r$   r-   rK   rU   rV   rW   r   r   r   r   rS      s   
 rS   suffixr   r!   c                 C  s   d|  S )Nzhttps://reddit.comr   )rX   r   r   r   r,      s   r,   r   r   c                 C  sD   |  dd }|  dd }|d ur|d urtd| d| |p!|S )Nr?   selftextz*wtf, both body and selftext are not None: z; )getRuntimeError)r   bbstr   r   r   r0      s
   r0   tsfloatr   c                 C  s   t j| tjdS )N)tz)r   fromtimestampr   utc)r^   r   r   r   r>      s   r>   c                   @  s   e Zd Zddd,d	d
Zdd Zd-ddZddd.ddZd/ddZd0ddZd1ddZ	d2d!d"Z
d3d$d%Zd4d'd(Zd5d*d+ZdS )6DALN)cpu_poolsourcesSequence[PathIsh]rd   Executor | Noner!   Nonec                C  s$   t tt|| _|| _t | _d S r   )listmapr   re   rd   r   get_enlighten	enlighten)r   re   rd   r   r   r   __init__   s   zDAL.__init__c              	   c  sJ    | j D ]}| }|t|fV  W d    n1 sw   Y  qd S r   )re   openjsonload)r   ffor   r   r   r      s   

zDAL.rawwhatr   Iterator[Json]c          	      c  s    | j jt| jt d| ddd}| j}g }| jD ]!}td|  |d ur1|t	||}nt
t	||}|| q|D ]}| }|  t|E d H  q?d S )N[]files)totaldescunitzprocessing )rl   counterlenre   r5   rd   loggerinfosubmitr   r   appendresultupdatereversed)	r   rs   progress_barrd   futuresrI   futurerq   resr   r   r   	_raw_json   s   $
zDAL._raw_jsonr$   )keyr   c                c  s@    t  }| j|dD ]}|| }||v rq
|| |V  q
d S )Nrs   )setr   add)r   rs   r   emittedr   eidr   r   r   _accumulate   s   
zDAL._accumulateIterator[Save]c                 c  sV    | j ddD ]!}t|d }|d|d}|d us J |t|||dV  qd S )Nsavedr   r<   
link_titler   )r   r   r   )r   r>   rZ   r   )r   sr   r   r   r   r   r      s   
z	DAL.savedIterator[Comment]c                 c  "    | j ddD ]}t|V  qd S )Ncommentsr   )r   r:   r   r   r   r   r   r   	     zDAL.commentsIterator[Submission]c                 c  r   )Nsubmissionsr   )r   rB   r   r   r   r   r     r   zDAL.submissionsIterator[Upvote]c                 c  r   )Nupvotedr   )r   rF   r   r   r   r   r        zDAL.upvotedIterator[Subreddit]c                 c  r   )NrQ   r   )r   rG   r   r   r   r   rQ     r   zDAL.subredditsIterator[Multireddit]c                 c  s$    | j dddD ]}t|V  qd S )NmultiredditsrI   )rs   r   )r   rH   r   r   r   r   r     s   zDAL.multiredditsrS   c                 C  sL   t | j}| }t|}t|d W  d    S 1 sw   Y  d S )Nprofile)maxre   rn   ro   rp   rS   )r   lastrr   jr   r   r   r     s
   



$zDAL.profile)re   rf   rd   rg   r!   rh   )rs   r   r!   rt   )rs   r   r   r   r!   rt   )r!   r   )r!   r   )r!   r   )r!   r   )r!   r   )r!   r   )r!   rS   )r5   r6   r7   rm   r   r   r   r   r   r   r   rQ   r   r   r   r   r   r   rc      s    







rc   c                  #  s    t t jjjd  d fdd} t| dt| dd}d	d
lm} | }t |}|d }|t	| |gV  W d    d S 1 sIw   Y  d S )Ntestdatars   r   c                 3  s8      | \}t| d d D ]}|d V  qd S )Ndatachildren)rglobro   loads	read_text)rs   subreddits_filextdatar   r   rZ   +  s
   z_test_data.<locals>.getzsubreddit/list.jsonzuser/comments.json)rQ   r   r   )TemporaryDirectoryz	data.json)rs   r   )
r	   __file__absoluteparentri   tempfiler   
write_textro   dumps)rZ   r   r   tdtdirjfiler   r   r   
_test_data'  s   


"r   rh   c                  C  sl   t  )} t| }t|jdd}t|dksJ tt| dks$J W d    d S 1 s/w   Y  d S )NrQ   r      r   )r   rc   ri   r   r|   r   )rw   dalsubsr   r   r   test?  s   "r   r   c                 C  s   t d |  D ]}t |j|j d}|||j  }t | t   qddlm} |dd | 	 D }ddl
m
} t d ||d	 d S )
NzYour comments:z
 |  r   )Counterc                 S  s   g | ]}|j qS r   )r2   )rN   r   r   r   r   
<listcomp>U  s    zdemo.<locals>.<listcomp>)pprintzYour most saved subreddits:   )printr   r   r-   joinr1   
splitlinescollectionsr   r   r   most_common)r   r   sepr?   r   cr   r   r   r   demoI  s   r   __main__)rc   r   )rX   r   r!   r   )r   r   r!   r   )r^   r_   r!   r   )r!   rh   )r   rc   r!   rh   )/
__future__r   
contextlibro   collections.abcr   r   concurrent.futuresr   dataclassesr   r   r   pathlibr	   exporthelpersr   r   exporthelpers.dal_helperr   r   r   r   utilsr   r   make_loggerr5   r}   r   r'   r   r:   rB   rF   rG   rH   rS   r,   r0   r>   rc   contextmanagerr   r   r   mainr   r   r   r   <module>   sL    



Z



