2019-02-06 22:41:35 +00:00
from . import ClientAPI
from . import ClientConstants as CC
from . import ClientData
from . import ClientGUICommon
from . import ClientGUIControls
from . import ClientGUIDialogs
from . import ClientGUIDialogsQuick
2019-06-26 21:27:18 +00:00
from . import ClientGUIFunctions
2019-02-06 22:41:35 +00:00
from . import ClientGUIListCtrl
from . import ClientGUIScrolledPanels
from . import ClientGUITags
from . import ClientGUITopLevelWindows
from . import HydrusConstants as HC
from . import HydrusData
from . import HydrusExceptions
from . import HydrusGlobals as HG
import os
import time
import traceback
2019-11-14 03:56:30 +00:00
from qtpy import QtCore as QC
from qtpy import QtWidgets as QW
from qtpy import QtGui as QG
from . import QtPorting as QP
2019-02-06 22:41:35 +00:00
class CaptureAPIAccessPermissionsRequestPanel ( ClientGUIScrolledPanels . ReviewPanel ) :
def __init__ ( self , parent ) :
ClientGUIScrolledPanels . ReviewPanel . __init__ ( self , parent )
self . _time_started = HydrusData . GetNow ( )
self . _api_permissions = None
self . _st = ClientGUICommon . BetterStaticText ( self , label = ' waiting for request \u2026 ' )
2019-11-14 03:56:30 +00:00
vbox = QP . VBoxLayout ( )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
QP . AddToLayout ( vbox , self . _st , CC . FLAGS_EXPAND_BOTH_WAYS )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
self . widget ( ) . setLayout ( vbox )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
self . _repeating_job = HG . client_controller . CallRepeatingQtSafe ( self , 0.0 , 0.5 , self . REPEATINGUpdate )
2019-02-06 22:41:35 +00:00
def GetAPIAccessPermissions ( self ) :
return self . _api_permissions
def REPEATINGUpdate ( self ) :
api_permissions_request = ClientAPI . last_api_permissions_request
if api_permissions_request is not None :
self . _api_permissions = api_permissions_request
2019-11-14 03:56:30 +00:00
QW . QMessageBox . information ( self , ' Information ' , ' Got request! ' )
2019-02-06 22:41:35 +00:00
ClientAPI . last_api_permissions_request = None
self . _repeating_job . Cancel ( )
2019-11-14 03:56:30 +00:00
parent = self . parentWidget ( )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
if parent . isModal ( ) : # event sometimes fires after modal done
2019-02-06 22:41:35 +00:00
parent . DoOK ( )
class EditAPIPermissionsPanel ( ClientGUIScrolledPanels . EditPanel ) :
def __init__ ( self , parent , api_permissions ) :
ClientGUIScrolledPanels . EditPanel . __init__ ( self , parent )
self . _original_api_permissions = api_permissions
2019-11-14 03:56:30 +00:00
self . _access_key = QW . QLineEdit ( )
self . _access_key . setReadOnly ( True )
2019-02-06 22:41:35 +00:00
2019-06-26 21:27:18 +00:00
width = ClientGUIFunctions . ConvertTextToPixelWidth ( self . _access_key , 66 )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
self . setMinimumWidth ( width )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
self . _name = QW . QLineEdit ( self )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
self . _basic_permissions = QP . CheckListBox ( self )
2019-02-06 22:41:35 +00:00
for permission in ClientAPI . ALLOWED_PERMISSIONS :
self . _basic_permissions . Append ( ClientAPI . basic_permission_to_str_lookup [ permission ] , permission )
search_tag_filter = api_permissions . GetSearchTagFilter ( )
message = ' The API will only permit searching for tags that pass through this filter. '
message + = os . linesep * 2
message + = ' If you want to allow all tags, just leave it as is, permitting everything. If you want to limit it to just one tag, such as " do waifu2x on this " , set up a whitelist with only that tag allowed. '
self . _search_tag_filter = ClientGUITags . TagFilterButton ( self , message , search_tag_filter )
#
access_key = api_permissions . GetAccessKey ( )
2019-11-14 03:56:30 +00:00
self . _access_key . setText ( access_key . hex ( ) )
2019-02-06 22:41:35 +00:00
name = api_permissions . GetName ( )
2019-11-14 03:56:30 +00:00
self . _name . setText ( name )
2019-02-06 22:41:35 +00:00
basic_permissions = api_permissions . GetBasicPermissions ( )
self . _basic_permissions . SetCheckedData ( basic_permissions )
#
rows = [ ]
rows . append ( ( ' access key: ' , self . _access_key ) )
rows . append ( ( ' name: ' , self . _name ) )
rows . append ( ( ' permissions: ' , self . _basic_permissions ) )
rows . append ( ( ' tag search permissions: ' , self . _search_tag_filter ) )
gridbox = ClientGUICommon . WrapInGrid ( self , rows )
2019-11-14 03:56:30 +00:00
vbox = QP . VBoxLayout ( )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
QP . AddToLayout ( vbox , gridbox , CC . FLAGS_EXPAND_SIZER_PERPENDICULAR )
2019-02-06 22:41:35 +00:00
2019-11-14 03:56:30 +00:00
self . widget ( ) . setLayout ( vbox )
2019-02-06 22:41:35 +00:00
#
self . _UpdateEnabled ( )
2019-11-14 03:56:30 +00:00
self . _basic_permissions . checkListBoxChanged . connect ( self . _UpdateEnabled )
2019-02-06 22:41:35 +00:00
def _UpdateEnabled ( self ) :
can_search = ClientAPI . CLIENT_API_PERMISSION_SEARCH_FILES in self . _basic_permissions . GetChecked ( )
2019-11-14 03:56:30 +00:00
self . _search_tag_filter . setEnabled ( can_search )
2019-02-06 22:41:35 +00:00
def _GetValue ( self ) :
2019-11-14 03:56:30 +00:00
name = self . _name . text ( )
access_key = bytes . fromhex ( self . _access_key . text ( ) )
2019-02-06 22:41:35 +00:00
basic_permissions = self . _basic_permissions . GetChecked ( )
search_tag_filter = self . _search_tag_filter . GetValue ( )
api_permissions = ClientAPI . APIPermissions ( name = name , access_key = access_key , basic_permissions = basic_permissions , search_tag_filter = search_tag_filter )
return api_permissions
def GetValue ( self ) :
api_permissions = self . _GetValue ( )
return api_permissions