
    MgN                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJrJ	r	  S SK
Jr    " S S5      r " S	 S
5      r " S S\5      r " S S\5      r " S S5      r " S S5      r\" S5       " S S\5      5       r\" S5       " S S\5      5       r\" S5       " S S\5      5       r\" S5       " S S\5      5       r\" S5       " S  S!\5      5       r\" S"5       " S# S$\5      5       r\" S%5       " S& S'\5      5       r\" S(5       " S) S*\5      5       r\" S+5       " S, S-\5      5       r\	" S.S/5      \" S05       " S1 S2\5      5       5       r\" S35       " S4 S5\5      5       r\" S65       " S7 S8\5      5       r\" S95       " S: S;\5      5       r\" S<5       " S= S>\5      5       r\" S?5       " S@ SA\5      5       r g)B    N)pick)Fore)	timeparse)pluginalias)
parse_datec                   X    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)TagBase"   reminder_tagsreminder_tags_next_idc                 ~    UR                  U R                  5      nUc  / nUR                  U R                  / 5        U$ N)get_datasave_keyadd_dataselfjarvistagss      >/Users/admin/workspace/ai/Jarvis/jarviscli/plugins/reminder.py	load_tagsTagBase.load_tags&   s5    t}}-<DOODMM2.    c                 <    UR                  U R                  U5        g r   )update_datar   r   s      r   	save_tagsTagBase.save_tags.   s    4==$/r   c                     U R                  U5      nU R                  U5      US.nUR                  U5        U R                  X5        g )N)idname)r   get_next_idappendr   )r   r   r!   datanew_tags        r   add_tagTagBase.add_tag1   sB    ~~f%""6*
 	Gv$r   c                 X    U R                  U5      nS nU H  nUS   U:X  d  M  UnM     U$ Nr    )r   )r   r   r    r   	final_tagtags         r   get_tag_by_idTagBase.get_tag_by_id:   s7    ~~f%	C4yB	  r   c                     UR                  U R                  5      nUc  SnUR                  U R                  U5        UR                  U R                  US-   5        U$ Nr      )r   next_id_keyr   r   r   r   next_ids      r   r"   TagBase.get_next_idC   sS    //$"2"23?GOOD,,g64++Wq[9r   c                     US   n[        5       R                  U5      nU H-  n/ nUS    H  nXs:w  d  M
  UR                  U5        M     XeS'   M/     [        5       R                  X5        g Nr    r   )TodoBaser   r#   	save_data)r   r   entryr    todostodonew_tagstag_ids           r   clean_up_entryTagBase.clean_up_entryL   sf    4[
##F+DHv,<OOF+ ' $L  	
V+r   c                     US   $ )Nr!    )r   r   r+   s      r   formatTagBase.formatW   s    6{r   c                 x    U R                  U5      nU H#  nUR                  U R                  X5      5        M%     g r   )r   sayrB   )r   r   r   r+   s       r   do_printTagBase.do_printZ   s/    ~~f%CJJt{{6/0 r   c                     U R                  U5      n/ nU H#  nUR                  U R                  X5      5        M%     [        U5      S:X  a  g Sn[	        X55      u  pgX'   $ )Nr   KPlease choose from tag list (j and k to move up and down, enter to select):)r   r#   rB   lenr   r   r   r$   ask_strr9   title_indexs           r   select_one_tagTagBase.select_one_tag_   s^    ~~f%ENN4;;v56  w<1]'{r   c                    U R                  U5      n[        U5      S:X  a  UR                  S5        g UR                  S5      (       d  UR                  S5      (       a?  U H  nU R	                  X5        M     / nU R                  X5        UR                  S5        g / nU H#  nUR                  U R                  X5      5        M%     Sn[        XVSS9nU Vs/ s H  oDS	   PM	     nn/ n[        U5       H2  u  pX9   nX;  a  UR                  U5        M!  U R	                  X5        M4     U R                  X5        g s  snf )
Nr   Nothing to remove!
everythingallokzLPlease choose tag to remove (select with space, j and k to move up and down)Tmulti_selectr0   )r   rJ   rE   
startswithr>   r8   r#   rB   r   	enumerater   
r   r   sr$   r9   rL   rM   selectednew_datarO   s
             r   removeTagBase.removem   s!   ~~f%t9>JJ+,<<%%e)<)<##F2  DNN6(JJt ENN4;;v56  _T:*23(!H(3%dOLEKE$&##F2 , 	v( 4   D>rA   N)__name__
__module____qualname____firstlineno__r   r1   r   r   r&   r,   r"   r>   rB   rF   rP   r_   __static_attributes__rA   r   r   r
   r
   "   s>    H)K0%	,1
!)r   r
   c                   @    \ rS rSrS rS rS rS rS rS 4S jr	S	r
g
)RemindTodoBase   c                    UR                  U R                  5       5      nUc"  SnUR                  U R                  5       U5         [        R                  " U5      nU R                  U5      nU$ ! [        R
                  R                   a[    UR                  S[        R                  5        SnUR                  U R                  5       U5        [        R                  " U5      n Nf = f)Nz[]zaCould not read Remind / Todo List. Sorry,                         that should not have happend...)r   get_keyr   jsonloadsdecoderJSONDecodeErrorrE   r   REDr   sort)r   r   remind_todo_jsonremind_todo_lists       r   r   RemindTodoBase.get_data   s    !??4<<>:##OODLLN,<=	<#zz*:;  99%56 ||++ 	<JJ9:>((D  $t||~/?@#zz*:;	<s   A/ /A6C('C(c                 l    UR                  U R                  5       [        R                  " U5      5        g r   )r   rk   rl   dumps)r   r   rs   s      r   r8   RemindTodoBase.save_data   s"    4<<>4::6F+GHr   c                     UR                  U R                  5       5      nUc"  SnUR                  U R                  5       U5        UR                  U R                  5       US-   5        U$ r/   )r   get_key_next_idr   r   r2   s      r   r"   RemindTodoBase.get_next_id   s\    //$"6"6"89?GOOD002G<4//17Q;?r   c                    U R                  U5      n[        U5      S:X  a  UR                  S5        g UR                  S5      (       d  UR                  S5      (       a?  U H  nU R	                  X5        M     / nU R                  X5        UR                  S5        g / nU H#  nUR                  U R                  X5      5        M%     Sn[        XVSS9nU Vs/ s H  oDS	   PM	     nn/ n[        U5       H2  u  pX9   nX;  a  UR                  U5        M!  U R	                  X5        M4     U R                  X5        g s  snf )
Nr   rS   rT   rU   rV   zMPlease choose task to remove (select with space, j and k to move up and down)TrW   r0   )
r   rJ   rE   rY   r>   r8   r#   rB   r   rZ   r[   s
             r   r_   RemindTodoBase.remove   s!   }}V$t9>JJ+,<<%%e)<)<##F2  DNN6(JJt ENN4;;v56  `T:*23(!H(3%dOLEKE$&##F2 , 	v( 4ra   c                     US   nU R                  U5      nU Vs/ s H  oUS   U:w  d  M  UPM     nnUR                  U5        U R                  X5        g s  snf r)   )r   r#   r8   )r   r   modified_entrymodified_idr$   r9   s         r   modifyRemindTodoBase.modify   sU    $T*}}V$#'F4%;++E4FN#v$ Gs
   AAc                     g)NTrA   )xs    r   <lambda>RemindTodoBase.<lambda>   s    dr   c                     U R                  U5      n[        U5      S:X  a  UR                  S5        U H2  nU" U5      (       d  M  UR                  U R                  X5      5        M4     g )Nr   z	No entry!)r   rJ   rE   rB   )r   r   should_print	todo_listr9   s        r   rF   RemindTodoBase.do_print   sR    MM&)	y>QJJ{#EE""

4;;v56 r   rA   N)rb   rc   rd   re   r   r8   r"   r_   r   rF   rf   rA   r   r   rh   rh      s'     &I!)F% -; 7r   rh   c                   d    \ rS rSrS rS rS rSS/ 4S jrS rS	S
/4S jr	S r
S rS rS rSrg)r7      c                     [        5       $ r   )RemindTodoInteract_Todor   s    r   interactTodoBase.interact   s    &((r   c                     g)Nr;   rA   r   s    r   rk   TodoBase.get_key   s    r   c                     gNtodo_next_idrA   r   s    r   ry   TodoBase.get_key_next_id       r    c                     U R                  U5      nU R                  U5      nUUUU/ S.nUR                  U5        U R                  X5        g )N)messageprogresspriorityr    r   )r   r"   r#   r8   )	r   r   r   r   r   r   r$   r3   	new_entrys	            r   addTodoBase.add   sP    }}V$""6*  
	 	Iv$r   c                 B    U R                  5       R                  X5        g r   )r   r>   r   r   r9   s      r   r>   TodoBase.clean_up_entry   s    &&v5r   r   r   c                    US   nU R                  5       R                  X5      nSnU H  nUS:X  a  US   nUS:w  a	  USU S3-  nUS:X  d  M%   US   n	[        U	5      S:  aU  [	        5       n
U	 Vs/ s H#  nU
R                  XR                  X5      5      PM%     nnSR                  U5      nUS	U 3-  nM  US
-  nM     XF-   $ ! [         a    / n	 Nf = fs  snf )Nr   r   r   z | z
% completer   r   , z | Tagged with: z
 | No tags)r   format_interactKeyErrorrJ   r
   rB   r,   join)r   r   r9   addonsr   schedulepostaddonr   r   tag_baser=   tag_strstag_strs                 r   rB   TodoBase.format   s   	"==?226AE
" ,r>c(:66D =D t9q=&yH $( )#' %+ !)8N8Nv8^ _#'   ) #ii1G.wi88DL(D) , ~   D
 )s   C1*CCCc                     [        US S9$ )Nc                     U S   $ )Nr   rA   r9   s    r   r   TodoBase.sort.<locals>.<lambda>  s	    53Dr   keysorted)r   r   s     r   rq   TodoBase.sort  s    i%DEEr   c           	          U R                  U5      n/ nU H"  nUR                  U R                  X/ S95        M$     [        U5      S:X  a  g Sn[	        X55      u  pgX'   $ )N)r   r   zLPlease choose from todo list (j and k to move up and down, enter to select):)r   r#   rB   rJ   r   rK   s           r   select_one_remindTodoBase.select_one_remind  sb    }}V$ENN4;;vR;@A  w<1^'{r   c                     U R                  U5      nU H	  n US     M     U R                  X5        g ! [         a	    / US'    M1  f = f)Nr   )r   r   r8   )r   r   r$   r9   s       r   update_to_tagsTodoBase.update_to_tags,  sN    }}V$E#f  	v$  # "f#s   3AAc                    [        5       nUR                  U5      nU R                  U5      n/ n/ nU HE  nUS   US   ;   d  M  UR                  UR	                  X5      5        UR                  US   5        MG     [        U5      S:X  a  UR                  S5        g Sn	[        Xi5      u  pUS   R                  US   R                  X{   5      5        U R                  X5        g )Nr    r   r   zThere are no tags to delete!rI   )r
   r   r   r#   rB   rJ   rE   r   poprO   r   )r   r   r\   tbr   r9   rL   id_mapr+   rM   rN   rO   s               r   
remove_tagTodoBase.remove_tag6  s    Y||F#&&v.C4yE&M)ryy56c$i( 
 w<1JJ56]'f%---fm<=F"r   rA   N)rb   rc   rd   re   r   rk   ry   r   r>   rB   rq   r   r   r   rf   rA   r   r   r7   r7      sH    ) -/" %6 -7+? 8F%#r   r7   c                   x    \ rS rSrS rS rS rS rS rS r	S r
   SS
 jrS rS rS rS rS rS rS rSrg	)
RemindBaseiM  c                     [        5       $ r   )RemindTodoInteract_Remindr   s    r   r   RemindBase.interactN  s    (**r   c                     g)NremindrA   r   s    r   rk   RemindBase.get_keyQ  s    r   c                     gr   rA   r   s    r   ry   RemindBase.get_key_next_idT  r   r   c                     g r   rA   r   s    r   requireRemindBase.requireW      r   c                     g r   rA   r   s    r   r   RemindBase.aliasZ  r   r   c                     g r   rA   r   s    r   completeRemindBase.complete]  r   r   c                 r   / nU R                  U5       H  nUS   nU[        R                  " 5       :  aF  U R                  U5      nUR                  SR	                  US   U5      [
        R                  5        Mg  UR                  X@R                  US   5      nXcS'   X#/-  nM     U R                  X5        g )N	timestampzReminder: {} missed ({})r   schedule_id)
r   timetimestamp_to_stringrE   rB   r   MAGENTAr   reminder_execr8   )r   r   remind_still_activeitemr   time_formatr   s          r   first_time_initRemindBase.first_time_init`  s     MM&)D[)I499;&"66yA

.55Y67;||E  //)5G5G*.y/;K"-6) * 	v3r   Nc                     U R                  U5      nU R                  U5      nUUUUUS.nXh/-   n	U R                  X5        g )N)r   r   r   todo_refere_idr    )r   r"   r8   )
r   r   r   r   r   r   r$   r3   r   r^   s
             r   r   RemindBase.addq  sP     }}V$""6*"&,
	 +%v(r   c                 ,    UR                  US   5        g Nr   )cancelr   s      r   r>   RemindBase.clean_up_entry  s    eM*+r   c                     U R                  US   5      nU R                  5       R                  X5      nSR                  X2S   U5      $ )Nr   z
{} => {}{}r   )r   r   r   rB   )r   r   r9   r   
additionals        r   rB   RemindBase.format  sE    ''k(:;]]_44VC
""4y)9:FFr   c                     [        US S9$ )Nc                     U S   $ )Nr   rA   r   s    r   r   !RemindBase.sort.<locals>.<lambda>  s	    U;5Gr   r   r   )r   remind_lists     r   rq   RemindBase.sort  s    k'GHHr   c                     UR                  U5        U R                  U5      nU Vs/ s H  oUS   U:w  d  M  UPM     nnU R                  X5        g s  snf r   )notificationr   r8   )r   r   r   r   r$   r9   s         r   r   RemindBase.reminder_exec  sN    G$}}V$#'O4%+?;+N4Ov$ Ps
   AAc                 ^    [         R                   R                  U5      R                  S5      $ )Nz%H:%M:%S)datetimefromtimestampstrftime)r   r   s     r   r   RemindBase.timestamp_to_string  s$      ..y9BB:NNr   c                     [        U5      nUS   S:X  a  g [        R                  " US   R                  5       5      nU[        R                  " 5       -
  $ r/   )r   r   mktime	timetuple)r   dater   s      r   parse_date_timestampRemindBase.parse_date_timestamp  sF    $7a<KKQ 1 1 34	499;&&r   c                    UR                  S5      n[        U5      S:w  aP  UR                  S[        R                  5        UR                  SR                  U5      [        R                  5        g U" US   5      nUc<  UR                  S[        R                  5        U" UR                  S5      5      nUc  M<  [        R                  " 5       U-   nUS   nUnS n	US	:X  a`  S
nU R                  5       R                  U5      n
U
c!  UR                  S[        R                  5        g U
S   nSR                  U5      nU
S   n	UR                  XPR                  U5      nU R                  XXkU	S9  g )Nz to    z!Sorry, please say something like:z > {}r   z Sorry, when should I remind you?zTime: r0   r;   r   zNothing selectedr   zTODO: {}r    )r   r   r   )splitrJ   rE   r   r   rB   inputr   r   r   r   r   r   )r   r   r\   time_in_parserexampletime_inr   r   notification_messager   todo_refere_entryr   s               r   
remind_addRemindBase.remind_add  sK   GGFOq6Q;JJ:DLLIJJw~~g.= 1&oJJ94<<H$V\\(%;<G o IIK')	A$&fG $ A A& I (

-t||<#4Y#? #-#4#45I#J .t4N oog/A/A&:<I . 	 	0r   rA   )NNN)rb   rc   rd   re   r   rk   ry   r   r   r   r   r   r>   rB   rq   r   r   r   r  rf   rA   r   r   r   r   M  s[    +4* )&,G
I%O'0r   r   c                   &    \ rS rSrS rS rS rSrg)r   i  c                 "    [        5       U l        g r   )r   r   r   s    r   __init__ RemindTodoInteract_Todo.__init__  s     lr   c                    US   nU R                   R                  U5      n/ nSnU H@  nUS   nUb$  Xs:X  a  U R                   R                  X5        SnM/  UR                  U5        MB     U(       a  U R                   R	                  X5        g g )Nr    Fr   T)r   r   r>   r#   r8   )r   r   r9   todo_idr   remind_list_newr   referes           r   r>   &RemindTodoInteract_Todo.clean_up_entry  s    +kk**62 E+,F!f&7**69&&u- ! KK!!&: r   c                 L   US   nU R                   R                  U5      nU Vs/ s H  nUS   U:X  d  M  UPM     nn[        U5      S:w  aN  U Vs/ s H!  nU R                   R                  US   5      PM#     nnSR	                  SR                  U5      5      $ gs  snf s  snf )Nr    r   r   r   z -- remind -- ({})r   r   )r   r   rJ   r   rB   r   )r   r   r9   r  r   r   s         r   r   'RemindTodoInteract_Todo.format_interact  s    +kk**62,7 ?K& !12g= K ?{q )46)4v  ;;::6+;NO)4  6'..tyy/EFF?6s   BB(B!)r   N)rb   rc   rd   re   r  r>   r   rf   rA   r   r   r   r     s    #; 	r   r   c                   ,    \ rS rSrS rS rS rS rSrg)r   i  c                 "    [        5       U l        g r   )r7   r;   r   s    r   r  "RemindTodoInteract_Remind.__init__  s    J	r   c                     g r   rA   r   s      r   r>   (RemindTodoInteract_Remind.clean_up_entry  r   r   c                     US   nUba  U R                   R                  U5      nU Vs/ s H  oUS   U:X  d  M  UPM     snn[        U5      S:w  a  gUS   nSR                  US   5      $ gs  snf )	Nr   r    r0   ERRORr   zToDo ->-> {}r   r   )r;   r   rJ   rB   )r   r   r9   r   r   r;   s         r   r   )RemindTodoInteract_Remind.format_interact  sy    /0%		**62I%.OYTt*2NDYOD4yA~Aw!((i99 Ps
   A+A+c                 8    U R                   R                  U5      $ r   )r;   r   r   r   s     r   r   +RemindTodoInteract_Remind.select_one_remind  s    yy**622r   )r;   N)	rb   rc   rd   re   r  r>   r   r   rf   rA   r   r   r   r     s    3r   r   r;   c                   $    \ rS rSrSrS rS rSrg)Todoi  z1
List todo list
Usage:
    - todo add make lunch
c                 &    U R                  U5        g r   )r   r!  s     r   init	Todo.init  s    F#r   c                 &    U R                  U5        g r   rF   r   r   r\   s      r   __call__Todo.__call__      fr   rA   Nrb   rc   rd   re   __doc__r&  r+  rf   rA   r   r   r$  r$    s    $r   r$  ztodo incompletec                       \ rS rSrSrS rSrg)Todo_Incompletei
  z
Lists incomplete todo items.
c                 *    U R                  US 5        g )Nc                     U S   S:  $ )Nr   d   rA   r   s    r   r   *Todo_Incomplete.__call__.<locals>.<lambda>  s    E*,=,Cr   r)  r*  s      r   r+  Todo_Incomplete.__call__  s    fCDr   rA   Nrb   rc   rd   re   r/  r+  rf   rA   r   r   r1  r1  
  s    Er   r1  ztodo addc                       \ rS rSrSrS rSrg)Todo_Addi  zAdd new todo entryc                 &    U R                  X5        g r   )r   r*  s      r   r+  Todo_Add.__call__  s    r   rA   Nr7  rA   r   r   r9  r9    s
    r   r9  ztodo removec                       \ rS rSrSrS rSrg)Todo_Removei  zM
Remove todo item
-- Example:
    - todo remove
    - todo remove everything
c                 &    U R                  X5        g r   r_   r*  s      r   r+  Todo_Remove.__call__$      Fr   rA   Nr7  rA   r   r   r=  r=    s    r   r=  ztodo progressc                       \ rS rSrSrS rSrg)Todo_Progressi(  z
Set progress info
c                 @   U R                  U5      nUR                  S5      R                  SS5      nUR                  5       (       a(  S[	        U5      s=::  a  S::  a  O  O[	        U5      US'   OUR                  S[        R                  S9  U R                  X5        g )	Nz9Set a progress level between 0 and 100, as a percentage: %r   r   r4  r   z8The progress level must be an integer between 0 and 100.)color)	r   r  replace	isnumericintrE   r   r   r   )r   r   r\   r9   inps        r   r+  Todo_Progress.__call__.  s}    &&v.llVW__`cegh==??qCH33 #CE*JJQY]YeYeJfF"r   rA   Nr7  rA   r   r   rC  rC  (  s    #r   rC  ztodo tagc                       \ rS rSrSrS rSrg)Todo_Tagi9  z3
Add a tag to an item which lets you filter later.
c                    U R                  U5      n[        5       nUR                  U5      nUc  UR                  S5         US   R	                  US   5        U R                  X5        g ! [
         a    US   /US'    N'f = f)NzNo tags available to select.r   r    )r   r
   rP   rE   r#   r   r   )r   r   r\   r9   r   selected_tags         r   r+  Todo_Tag.__call__>  s    &&v.y**62JJ56	1&M  d!34 	F"  	1)$/0E&M	1s   A+ +B BrA   Nr7  rA   r   r   rM  rM  9  s    #r   rM  ztodo del tagc                       \ rS rSrSrS rSrg)Todo_Del_TagiM  z 
Remove a tag from a todo item.
c                 &    U R                  X5        g r   )r   r*  s      r   r+  Todo_Del_Tag.__call__R  s    "r   rA   Nr7  rA   r   r   rR  rR  M  s    #r   rR  ztodo filterc                       \ rS rSrSrS rSrg)Todo_FilteriV  z(
Filter items on your todo list by tag.
c                 d   ^ [        5       nUR                  U5      mU R                  UU4S jS9  g )Nc                    > TS   U S   ;   $ r6   rA   )r9   rO  s    r   r   &Todo_Filter.__call__.<locals>.<lambda>^  s    d9KuU[}9\r   )r   )r
   rP   rF   )r   r   r\   r   rO  s       @r   r+  Todo_Filter.__call__[  s+    y**62f+\]r   rA   Nr7  rA   r   r   rV  rV  V  s    ^r   rV  r   c                       \ rS rSrSrS rSrg)Tagsia  z
List currently created tags.
c                 &    U R                  U5        g r   r)  r*  s      r   r+  Tags.__call__f  r-  r   rA   Nr7  rA   r   r   r\  r\  a  s    r   r\  ztags createztags addztags newc                       \ rS rSrSrS rSrg)Tags_Newij  z
Create a new tag.
c                 R    UR                  5       (       d  U R                  X5        g g r   )isalnumr&   r*  s      r   r+  Tags_New.__call__p  s    yy{{LL# r   rA   Nr7  rA   r   r   r`  r`  j  s    $r   r`  ztags removec                       \ rS rSrSrS rSrg)Tags_Removeiu  z
Remove a pre-existing tag.
c                 &    U R                  X5        g r   r?  r*  s      r   r+  Tags_Remove.__call__z  rA  r   rA   Nr7  rA   r   r   re  re  u  s    r   re  r   c                   $    \ rS rSrSrS rS rSrg)Remindi~  zList all scheduled reminders
Note: Use
- remind in 5 minutes to todo
- remind at 12:30 to todo
To select todo-entry and receive notification.
c                 &    U R                  U5        g r   )r   r!  s     r   r&  Remind.init  s    V$r   c                     UR                  SR                  U R                  [        R                  " 5       5      5      5        U R	                  U5        g )Nz	## {} ##
)rE   rB   r   r   rF   r*  s      r   r+  Remind.__call__  s6    

<&&t'?'?		'LMNfr   rA   Nr.  rA   r   r   ri  ri  ~  s    %r   ri  z	remind atc                       \ rS rSrSrS rSrg)	Remind_Ati  zZ
Add reminder
-- Example:
    Remind at 12:30 to buy tomatoes
    Remind at 12:30 to todo
c                 >    U R                  XU R                  S5        g )Nzremind at 12:30 to XXX)r  r   r*  s      r   r+  Remind_At.__call__  s    4#<#<0	2r   rA   Nr7  rA   r   r   ro  ro    s    2r   ro  z	remind inc                       \ rS rSrSrS rSrg)	Remind_Ini  zz
Add reminder
-- Example:
    remind in 30 minutes 10 seconds to buy tomatoes
    remind in 30 minutes 10 seconds to todo
c                 2    U R                  X[        S5        g )Nzremind in 30m 10s to XXX)r  r   r*  s      r   r+  Remind_In.__call__  s    9.HIr   rA   Nr7  rA   r   r   rs  rs    s    Jr   rs  zremind removec                       \ rS rSrSrS rSrg)Remind_Removei  z.
-- Example:
    remove
    remove everything
c                 &    U R                  X5        g r   r?  r*  s      r   r+  Remind_Remove.__call__  rA  r   rA   Nr7  rA   r   r   rw  rw    s    r   rw  )!rl   r   r   r   coloramar   pytimeparse.timeparser   r   r   utilities.textParserr   r
   rh   r7   r   r   r   r$  r1  r9  r=  rC  rM  rR  rV  r\  r`  re  ri  ro  rs  rw  rA   r   r   <module>r}     sf        +   +*l) l)^Q7 Q7he#~ e#Pr0 r0j @3 32 8   Eh E E 
x   	( 	 	 #H # #  
#x # #& #8 # # ^( ^ ^ 7   }j!
$w $  "$ '   Z    
2
 
2 
2 	J
 	J 	J J  r   