
    Oii                        S SK Jr  S SKJrJrJrJr  SSKJrJ	r	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 S5      r " S S5      r " S S5      r " S S5      rg)    )JSONDecodeError)AsyncClientAsyncHTTPTransportRequestErrorTimeout   )MYJDApiExceptionMYJDConnectionExceptionMYJDDecodeExceptionc                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)System   c                     Xl         SU l        g )Nz/systemdeviceurlselfr   s     /app/myjd/myjdapi.py__init__System.__init__           c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/exitJDr   actionr   r   s    r   exit_jdSystem.exit_jd   s+     [[''488*G(<====   ,535c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz
/restartJDr   r   s    r   
restart_jdSystem.restart_jd   +     [[''488*J(?@@@@r    c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/hibernateOSr   r   s    r   hibernate_osSystem.hibernate_os   s+     [[''488*L(ABBBBr    c                 t   #    UnU R                   R                  U R                   S3U5      I S h  vN $  N7f)Nz/shutdownOSr   )r   forceparamss      r   shutdown_osSystem.shutdown_os   s2     [[''488*K(@&IIIIs   /868c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz
/standbyOSr   r   s    r   
standby_osSystem.standby_os   r$   r    c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/getStorageInfos?pathr   r   s    r   get_storage_infoSystem.get_storage_info    s,     [[''488*4I(JKKKKr    r   N)__name__
__module____qualname____firstlineno__r   r   r"   r&   r+   r.   r1   __static_attributes__ r   r   r   r      s*    >ACJALr   r   c                   &    \ rS rSrS rS rS rSrg)Jd$   c                     Xl         SU l        g )Nz/jdr   r   s     r   r   Jd.__init__%   s    r   c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/getCoreRevisionr   r   s    r   get_core_revisionJd.get_core_revision)   ,     [[''488*4D(EFFFFr    c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/versionr   r   s    r   version
Jd.version,   s+     [[''488*H(=>>>>r    r   N)r3   r4   r5   r6   r   r?   rC   r7   r8   r   r   r:   r:   $   s    G?r   r:   c                   L    \ rS rSrS rSS jrS rS rS rSS jr	S	 r
S
 rSrg)Config0   c                     Xl         SU l        g )Nz/configr   r   s     r   r   Config.__init__2   r   r   Nc                    #    Uc1  U R                   R                  U R                   S3U5      I Sh  vN $ U R                   R                  U R                   S35      I Sh  vN $  N4 N7f)z(
:return:  List<AdvancedConfigAPIEntry>
N/listr   r   r*   s     r   listConfig.list6   s]      >++txxj,>GGG++txxj,>??? H?s!   0A+A'/A+"A)#A+)A+c                 n   #    U R                   R                  U R                   S3U/S9I Sh  vN $  N7f)z
:return:  List<EnumOption>
z	/listEnumr*   Nr   )r   types     r   listEnumConfig.listEnum?   s4      [[''488*I(>v'NNNNr    c                 x   #    XU/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z
:param interfaceName: a valid interface name from List<AdvancedConfigAPIEntry>
:type: str:
:param storage: 'null' to use default or 'cfg/' + interfaceName
:type: str:
:param key: a valid key from from List<AdvancedConfigAPIEntry>
:type: str:
/getNr   )r   interface_namestoragekeyr*   s        r   get
Config.getE   s9      !3/[[''488*D(96BBBB   1:8:c                 x   #    XU/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)
:param interfaceName:  a valid interface name from List<AdvancedConfigAPIEntry>
:type: str:
:param storage: 'null' to use default or 'cfg/' + interfaceName
:type: str:
:param key: a valid key from from List<AdvancedConfigAPIEntry>
:type: str:
z/getDefaultNr   r   interfaceNamerW   rX   r*   s        r   
getDefaultConfig.getDefaultQ   s9       #.[[''488*K(@&IIIIr[   c                    #    Uc  SSSSSSSS./nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)a  
:param params: A dictionary with options. The default dictionary is
configured so it returns you all config API entries with all details, but you
can put your own with your options. All the options available are this
ones:
{
"configInterface"  : "",
"defaultValues"    : True,
"description"      : True,
"enumInfo"         : True,
"includeExtensions": True,
"pattern"          : "",
"values"           : ""
}
:type: Dictionary
:rtype: List of dictionaries of this style, with more or less detail based on your options.
N T)configInterfacedefaultValuesdescriptionenumInfoincludeExtensionspatternvaluesz/queryr   rL   s     r   queryConfig.query]   sY     $ > (*%)#' $)-!"
F [[''488*F(;VDDDD   ;AAAc                 x   #    XU/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)r]   z/resetNr   r^   s        r   resetConfig.reset}   s9       #.[[''488*F(;VDDDDr[   c                 x   #    XX4/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)ad  
:param interfaceName:  a valid interface name from List<AdvancedConfigAPIEntry>
:type: str:
:param storage: 'null' to use default or 'cfg/' + interfaceName
:type: str:
:param key: a valid key from from List<AdvancedConfigAPIEntry>
:type: str:
:param value: a valid value for the given key (see type value from List<AdvancedConfigAPIEntry>)
:type: Object:
z/setNr   )r   rV   rW   rX   valuer*   s         r   set
Config.set   s9      !36[[''488*D(96BBBBr[   r   N)r3   r4   r5   r6   r   rM   rR   rY   r`   rk   ro   rs   r7   r8   r   r   rF   rF   0   s2    @O
C
JE@
ECr   rF   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)DownloadController   c                     Xl         SU l        g )Nz/downloadcontrollerr   r   s     r   r   DownloadController.__init__   s    (r   c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/startr   r   s    r   start_downloads"DownloadController.start_downloads   s+     [[''488*F(;<<<<r    c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/stopr   r   s    r   stop_downloads!DownloadController.stop_downloads   s+     [[''488*E(:;;;;r    c                 v   #    U/nU R                   R                  U R                   S3U5      I S h  vN $  N7f)Nz/pauser   )r   rr   r*   s      r   pause_downloads"DownloadController.pause_downloads   s4     [[''488*F(;VDDDD   0979c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/getSpeedInBpsr   r   s    r   get_speed_in_bytes%DownloadController.get_speed_in_bytes   s+     [[''488*N(CDDDDr    c                 v   #    X/nU R                   R                  U R                   S3U5      I S h  vN $  N7fNz/forceDownloadr   r   link_idspackage_idsr*   s       r   force_download!DownloadController.force_download   s5     ([[''488*N(CVLLLLr   c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/getCurrentStater   r   s    r   get_current_state$DownloadController.get_current_state   rA   r    r   N)r3   r4   r5   r6   r   r|   r   r   r   r   r   r7   r8   r   r   rw   rw      s)    )=<EEMGr   rw   c                   <    \ rS rSrS rS
S jrS rS rS rS r	S	r
g)	Extension   c                     Xl         SU l        g )Nz/extensionsr   r   s     r   r   Extension.__init__   s     r   Nc                    #    Uc  SSSSSSSS./nU R                   R                  U R                   S3US9I Sh  vN $  N7f)a  
:param params: A dictionary with options. The default dictionary is
configured so it returns you all available extensions, but you
can put your own with your options. All the options available are this
ones:
{
"configInterface"  : True,
"description"      : True,
"enabled"          : True,
"iconKey"          : True,
"name"             : True,
"pattern"          : "",
"installed"        : True
}
:type: Dictionary
:rtype: List of dictionaries of this style, with more or less detail based on your options.
NTrc   )rd   rf   enablediconKeynameri   	installedrK   rP   r   rL   s     r   rM   Extension.list   s\     $ > (,#'## !!%
F [[''488*E(:6'JJJJs   9AA Ac                 n   #    U R                   R                  U R                   S3U/S9I S h  vN $  N7f)Nz/installrP   r   r   ids     r   installExtension.install   s2     [[''488*H(=rd'KKKKr    c                 n   #    U R                   R                  U R                   S3U/S9I S h  vN $  N7f)Nz/isInstalledrP   r   r   s     r   isInstalledExtension.isInstalled   s2     [[''488*L(A2$'OOOOr    c                 n   #    U R                   R                  U R                   S3U/S9I S h  vN $  N7f)Nz
/isEnabledrP   r   r   s     r   	isEnabledExtension.isEnabled   s2     [[''488*J(?'MMMMr    c                 n   #    U R                   R                  U R                   S3X/S9I S h  vN $  N7f)N/setEnabledrP   r   )r   r   r   s      r   
setEnabledExtension.setEnabled   s2     [[''488*K(@"'WWWWr    r   ru   )r3   r4   r5   r6   r   rM   r   r   r   r   r7   r8   r   r   r   r      s&    !K@LPNXr   r   c            	           \ rS rSrS rS rSS jrSS jr SS jrS r	S	 r
S
 rS rS rSS jrS rS\S\4S jr SS\S\S\S\4S jjrSS jrS rS rS rSS jrSrg)Linkgrabber   c                     Xl         SU l        g )Nz/linkgrabberv2r   r   s     r   r   Linkgrabber.__init__   s    #r   c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz
/clearListr   r   s    r   
clear_listLinkgrabber.clear_list   r$   r    Nc                    #    Uc  / nUc  / nX/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z
Moves packages and/or links to download list.

:param package_ids: Package UUID's.
:type: list of strings.
:param link_ids: Link UUID's.
Nz/moveToDownloadlistr   r   s       r   move_to_downloadlist Linkgrabber.move_to_downloadlist   sN      HK([[''488*4G(H&QQQQ   :AAAc                    #    Uc  SSSSSSSSSSSSSSS./nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)a  

Get the links in the linkcollector/linkgrabber

:param params: A dictionary with options. The default dictionary is
configured so it returns you all the downloads with all details, but you
can put your own with your options. All the options available are this
ones:
{
"bytesTotal"    : false,
"comment"       : false,
"status"        : false,
"enabled"       : false,
"maxResults"    : -1,
"startAt"       : 0,
"packageUUIDs"  : null,
"hosts"         : false,
"url"           : false,
"availability"  : false,
"variantIcon"   : false,
"variantName"   : false,
"variantID"     : false,
"variants"      : false,
"priority"      : false
}
:type: Dictionary
:rtype: List of dictionaries of this style, with more or less detail based on your options.

[   {   'availability': 'ONLINE',
    'bytesTotal': 68548274,
    'enabled': True,
    'name': 'The Rick And Morty Theory - The Original        Morty_ - '
            'Cartoon Conspiracy (Ep. 74) @ChannelFred (192kbit).m4a',
    'packageUUID': 1450430888524,
    'url': 'youtubev2://DEMUX_M4A_192_720P_V4/d1NZf1w2BxQ/',
    'uuid': 1450430889576,
    'variant': {   'id': 'DEMUX_M4A_192_720P_V4',
                'name': '192kbit/s M4A-Audio'},
    'variants': True
    }, ... ]
NTr   )
bytesTotalcommentstatusr   
maxResultsstartAthostsr   availabilityvariantIconvariantName	variantIDvariantspriority/queryLinksr   rL   s     r   query_linksLinkgrabber.query_links   so     T > #'#"#"$ !$(#'#'!% $ $F$ [[''488*K(@&IIIIs   AAA	Ac                    #    Uc  / nUc  / nXE/nXaX#/-  nU R                   R                  U R                   S3U5      I Sh  vN $  N7fab  
Clean packages and/or links of the linkgrabber list.
Requires at least a package_ids or link_ids list, or both.

:param package_ids: Package UUID's.
:type: list of strings.
:param link_ids: link UUID's.
:type: list of strings
:param action: Action to be done. Actions: DELETE_ALL, DELETE_DISABLED, DELETE_FAILED, DELETE_FINISHED, DELETE_OFFLINE, DELETE_DUPE, DELETE_MODE
:type: str:
:param mode: Mode to use. Modes: REMOVE_LINKS_AND_DELETE_FILES, REMOVE_LINKS_AND_RECYCLE_FILES, REMOVE_LINKS_ONLY
:type: str:
:param selection_type: Type of selection to use. Types: SELECTED, UNSELECTED, ALL, NONE
:type: str:
Nz/cleanupr   r   r   modeselection_typer   r   r*   s          r   cleanupLinkgrabber.cleanup<  Z     $ HK(400[[''488*H(=vFFFF   A A	AA	c                 v   #    X/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z
Adds a container to Linkgrabber.

:param type_: Type of container.
:type: string.
:param content: The container.
:type: string.

z/addContainerNr   )r   type_contentr*   s       r   add_containerLinkgrabber.add_containerV  s7      ![[''488*M(BFKKKKr   c                 x   #    X!U/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z
Gets download urls from Linkgrabber.

:param package_ids: Package UUID's.
:type: List of strings.
:param link_ids: link UUID's.
:type: List of strings
:param url_display_type: No clue. Not documented
:type: Dictionary
z/getDownloadUrlsNr   )r   r   r   url_display_typer*   s        r   get_download_urlsLinkgrabber.get_download_urlsc  s;      )9:[[''488*4D(EvNNNNr[   c                 x   #    XU/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z
Sets the priority of links or packages.

:param package_ids: Package UUID's.
:type: list of strings.
:param link_ids: link UUID's.
:type: list of strings
:param priority: Priority to set. Priorities: HIGHEST, HIGHER, HIGH, DEFAULT, LOWER;
:type: str:
z/setPriorityNr   )r   r   r   r   r*   s        r   set_priorityLinkgrabber.set_priorityq  s9      k2[[''488*L(A6JJJJr[   c                 x   #    XU/nU R                   R                  U R                   S3U5      I Sh  vN $  N7fz
Enable or disable packages.

:param enable: Enable or disable package.
:type: boolean
:param link_ids: Links UUID.
:type: list of strings
:param package_ids: Packages UUID.
:type: list of strings.
r   Nr   r   enabler   r   r*   s        r   set_enabledLinkgrabber.set_enabled  9      K0[[''488*K(@&IIIIr[   c                 p   #    U R                   R                  U R                   S3U5      I Sh  vN $  N7f)a  
Gets the variants of a url/download (not package), for example a youtube
link gives you a package with three downloads, the audio, the video and
a picture, and each of those downloads have different variants (audio
quality, video quality, and picture quality).

:param params: List with the UUID of the download you want the variants. Ex: [232434]
:type: List
:rtype: Variants in a list with dictionaries like this one: [{'id':
'M4A_256', 'name': '256kbit/s M4A-Audio'}, {'id': 'AAC_256', 'name':
'256kbit/s AAC-Audio'},.......]
z/getVariantsNr   rL   s     r   get_variantsLinkgrabber.get_variants  s/      [[''488*L(A6JJJJ   -646c           	         #    Uc  SSSSSSSSS./nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z
Add links to the linkcollector

{
"autostart" : false,
"links" : null,
"packageName" : null,
"extractPassword" : null,
"priority" : "DEFAULT",
"downloadPassword" : null,
"destinationFolder" : null
}
NFDEFAULT)	autostartlinkspackageNameextractPasswordr   downloadPassworddestinationFolderoverwritePackagizerRulesz	/addLinksr   rL   s     r   	add_linksLinkgrabber.add_links  s\      > "'!#''+ )(,)-05	F [[''488*I(>GGGGs   <AAAc                 n   #    U R                   R                  U R                   S35      I Sh  vN $  N7f)z3
Boolean status query about the collecting process
z/isCollectingNr   r   s    r   is_collectingLinkgrabber.is_collecting  s-      [[''488*M(BCCCCr    dirr   c                 v   #    X/nU R                   R                  U R                   S3U5      I S h  vN $  N7fNz/setDownloadDirectoryr   )r   r   r   r*   s       r   set_download_directory"Linkgrabber.set_download_directory  s6     #[[''488*4I(JFSSSSr   r   pathr   c                    #    Uc  / nUc  / nX4X/nU R                   R                  U R                   S3U5      I S h  vN $  N7fNz/movetoNewPackager   )r   r   r   r   r   r*   s         r   move_to_new_packageLinkgrabber.move_to_new_package  sP      HK4[[''488*4E(FOOOOrm   c                    #    Uc  / nUc  / nX/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z
Remove packages and/or links of the linkgrabber list.
Requires at least a link_ids or package_ids list, or both.

:param link_ids: link UUID's.
:type: list of strings
:param package_ids: Package UUID's.
:type: list of strings.
N/removeLinksr   r   s       r   remove_linksLinkgrabber.remove_links  sM      HK([[''488*L(A6JJJJr   c                 v   #    X/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z$
Renames files related with link_id
/renameLinkNr   r   link_idnew_namer*   s       r   rename_linkLinkgrabber.rename_link  s7      $[[''488*K(@&IIIIr   c                 n   #    U R                   R                  U R                   S35      I S h  vN $  N7f)Nz/getPackageCountr   r   s    r   get_package_countLinkgrabber.get_package_count  rA   r    c                 v   #    X/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z%
Rename package name with package_id
z/renamePackageNr   )r   
package_idr	  r*   s       r   rename_packageLinkgrabber.rename_package  s7      '[[''488*N(CVLLLLr   c                    #    Uc  SSSSSSSSSS/ SSSSS./nU R                   R                  U R                   S3U5      I S h  vN $  N7f)NTr   r   )availableOfflineCountavailableOnlineCountavailableTempUnknownCountavailableUnknownCountr   
childCountr   r   r   r   packageUUIDsr   saveTor   r   /queryPackagesr   rL   s     r   query_packagesLinkgrabber.query_packages  so     > .2,015-1"&"&##!"$$& $" "F& [[''488*N(CVLLLLs   AAA
Ar   NNru   )r3   r4   r5   r6   r   r   r   r   r   r   r   r   r   r   r   r   strrM   r   r   r  r
  r  r  r  r7   r8   r   r   r   r      s    $AR=J@ HLG4LOKJKH:DT T$ T
 PT	P	P"	P.2	PHL	PK"JGMMr   r   c                   |    \ rS rSrS rSS jrSS jr SS jrS rSS jr	SS	 jr
SS
 jrS rS rS\S\4S jrSrg)	Downloadsi  c                     Xl         SU l        g )Nz/downloadsV2r   r   s     r   r   Downloads.__init__
  s    !r   Nc                    #    Uc=  0 SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_S/ _SS_S/ _SS_SS_SS_SS_SSSSS.E/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)z$
Get the links in the download list
N	addedDateTbytesLoadedr   r   r   etaextractionStatusfinishedfinishedDatehostjobUUIDsr   r   r  passwordr   runningskippedr   )speedr   r   r   r   r   rL   s     r   r   Downloads.query_links  s     >!4 !$ t	
 t 4 '  #D D  !" #B    t!" t#$ " "+F2 [[''488*K(@&IIIIs   A-A6/A40A6c                    #    Uc3  0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_S/ _SS_SS_SS_SS_SS_SS_/nU R                   R                  U R                   S3U5      I S h  vN $  N7f)Nr&  Tr   r  r   r   r'  r)  r   r   r   r  r   r.  r  r0  r   r   r   r  r   rL   s     r   r  Downloads.query_packages.  s     >!4 $ !$ t	
 t 4  T !" #B  t d T q  d!F( [[''488*N(CVLLLLs   A#A,%A*&A,c                    #    Uc  / nUc  / nXE/nXaX#/-  nU R                   R                  U R                   S3U5      I Sh  vN $  N7fr   r   r   s          r   r   Downloads.cleanupF  r   r   c                 x   #    XU/nU R                   R                  U R                   S3U5      I Sh  vN $  N7fr   r   r   s        r   r   Downloads.set_enabled`  r   r[   c                    #    Uc  / nUc  / nX/nU R                   R                  U R                   S3U5      I S h  vN $  N7fr   r   r   s       r   r   Downloads.force_downloadn  sK     HK([[''488*N(CVLLLLr   c                    #    Uc  / nX/nU R                   R                  U R                   S3U5      I S h  vN $  N7fr   r   )r   	directoryr   r*   s       r   set_dl_locationDownloads.set_dl_locationv  sA     K)[[''488*4I(JFSSSSs   5><>c                    #    Uc  / nUc  / nX/nU R                   R                  U R                   S3U5      I Sh  vN $  N7f)a6  
Remove packages and/or links of the downloads list.
NOTE: For more specific removal, like deleting the files etc, use the /cleanup api.
Requires at least a link_ids or package_ids list, or both.

:param link_ids: link UUID's.
:type: list of strings
:param package_ids: Package UUID's.
:type: list of strings.
Nr  r   r   s       r   r  Downloads.remove_links|  sM      HK([[''488*L(A6JJJJr   c                 v   #    X/nU R                   R                  U R                   S3U5      I S h  vN $  N7f)Nz/resetLinksr   r   s       r   reset_linksDownloads.reset_links  s5     ([[''488*K(@&IIIIr   c                 x   #    XX4/nU R                   R                  U R                   S3U5      I S h  vN $  N7fr   r   )r   r   r   new_pkg_namedownload_pathr*   s         r   r   Downloads.move_to_new_package  s:      E[[''488*4E(FOOOOr[   r  r	  c                 v   #    X/nU R                   R                  U R                   S3U5      I S h  vN $  N7f)Nr  r   r  s       r   r
  Downloads.rename_link  s5     $[[''488*K(@&IIIIr   r   ru   r  )r3   r4   r5   r6   r   r   r  r   r   r   r<  r  rA  r   rM   r  r
  r7   r8   r   r   r!  r!    s[    "J@M2 HLG4JMTK$JPJ J Jr   r!  c                   ,    \ rS rSrS rS rS rS rSrg)Captchai  c                     Xl         SU l        g )Nz/captchar   r   s     r   r   Captcha.__init__  s    r   c                 p   #    U R                   R                  U R                   S3/ 5      I S h  vN $  N7f)NrK   r   r   s    r   rM   Captcha.list  s-     [[''488*E(:B????r   c                 r   #    U R                   R                  U R                   S3U45      I S h  vN $  N7f)NrU   r   )r   
captcha_ids     r   rY   Captcha.get  s/     [[''488*D(9J=IIII   .757c                 r   #    U R                   R                  U R                   S3X45      I S h  vN $  N7f)Nz/solver   )r   rP  solutions      r   solveCaptcha.solve  s0     [[''488*F(;j=STTTTrR  r   N)	r3   r4   r5   r6   r   rM   rY   rU  r7   r8   r   r   rJ  rJ    s    @JUr   rJ  c                   *    \ rS rSrS rS rSS jrSrg)Jddevicei  c                    Xl         [        U 5      U l        [        U 5      U l        [        U 5      U l        [        U 5      U l        [        U 5      U l
        [        U 5      U l        [        U 5      U l        [        U 5      U l        g)zThis functions initializes the device instance.
It uses the provided dictionary to create the device.

:param device_dict: Device dictionary
N)myjdrF   configr   linkgrabberrJ  captchar!  	downloadsrw   downloadcontrollerr   
extensionsr:   jdr   system)r   ra  s     r   r   Jddevice.__init__  se     	Tl&t,t}"4"4T":#D/T(Tlr   c                 @   #    U R                  S5      I S h  vN $  N7f)Nz/device/ping)r   r   s    r   pingJddevice.ping  s     [[0000s   c                 z   #    U R                   R                  X5      I S h  vN nUc  [        S5      eUS   $  N7f)NzNo connection established
data)rZ  request_apir
   )r   r   r*   responses       r   r   Jddevice.action  s>     ..t<<*+HIJ =s   ;9;)	r]  r[  r_  r^  r`  ra  r\  rZ  rb  N)r8   )r3   r4   r5   r6   r   re  r   r7   r8   r   r   rX  rX    s    # 1 r   rX  c                   0    \ rS rSrS rS rS rSS jrSrg)	MyJdApii  c                 @    SU l         S U l        [        U 5      U l        g )Nzhttp://127.0.0.1:3128)_MyJdApi__api_url_http_sessionrX  r   r   s    r   r   MyJdApi.__init__  s    0!tnr   c                     U R                   b  U R                   $ [        SSS9n[        U R                  USS0[	        SSSS S9SSS	9U l         U R                   $ )
N
   F)retriesverifyzContent-Typezapplication/json; charset=utf-8<   )connectreadwritepoolT)base_url	transportheaderstimeoutfollow_redirectsru  )rp  r   r   ro  r   )r   r|  s     r   _sessionMyJdApi._session  sh    )%%%&r%@	(^^#%FGBRrE!
 !!!r   c                 ~   #    U R                   b*  U R                   R                  5       I S h  vN   S U l         g g  N7fru   )rp  acloser   s    r   closeMyJdApi.close  s9     )$$++---!%D *-s   +=;=Nc                 &  #    U R                  5       nUb  UO/ nSU0n UR                  UUS9I S h  vN n UR                  5       nUR                  S:w  a  SUR                  SS5      -   S-   UR                  S	S
5      -   S-   U R                  -   U-   nUS-  nUb  USU-   -  n[        R                  " UR                  SS5      UR                  S	S
5      U5      eU$  N! [         a     g f = f! [         a  n[        SW5      UeS nAff = f7f)Nr*   )jsonzFailed to decode response: {}   z

	SOURCE: srcUNKNOWN_SOURCEz
	TYPE: rQ   UNKNOWN_TYPEz
------
REQUEST_URL: 
zDATA:
)r  postr   r  r   r   status_coderY   ro  r	   get_exception)	r   r   r*   sessionparams_requestresrj  excmsgs	            r   ri  MyJdApi.request_api  s]    --/#)#52n
	# %  C	xxzH
 ??c!,,u&678 ,,v~67 ,	,
 ..!   4KC)y>11 ..LL(89LL8 A  		  	%/	sV   DC" C C" C2 BD C" "
C/,D.C//D2
D<D		DD)	__api_urlrp  r   ru   )	r3   r4   r5   r6   r   r  r  ri  r7   r8   r   r   rm  rm    s    %
""&
'r   rm  N)r  r   httpxr   r   r   r   	exceptionr	   r
   r   r   r:   rF   rw   r   r   r!  rJ  rX  rm  r8   r   r   <module>r     s      H H L L2	? 	?eC eCPG G6/X /Xd`M `MF	RJ RJjU U    8D Dr   