示例#1
0
    def __init__(self, username=None, password=None, token=None, headers=None):
        self.username = username
        self.password = password
        self.token = token

        self.urls = 'https://plex.tv'
        self.timeout = plexpy.CONFIG.PMS_TIMEOUT
        self.ssl_verify = plexpy.CONFIG.VERIFY_SSL_CERT

        if self.username is None and self.password is None:
            if not self.token:
                # Check if we should use the admin token, or the guest server token
                if session.get_session_user_id():
                    user_data = users.Users()
                    user_tokens = user_data.get_tokens(user_id=session.get_session_user_id())
                    self.token = user_tokens['server_token']
                else:
                    self.token = plexpy.CONFIG.PMS_TOKEN

            if not self.token:
                logger.error("Tautulli PlexTV :: PlexTV called, but no token provided.")
                return

        self.request_handler = http_handler.HTTPHandler(urls=self.urls,
                                                        token=self.token,
                                                        timeout=self.timeout,
                                                        ssl_verify=self.ssl_verify,
                                                        headers=headers)
示例#2
0
 def __init__(self):
     QtGui.QWidget.__init__(self)
     self.httpHandler = http_handler.HTTPHandler()
     self.dataRetrievingManager = data_retrieving_manager.DataRetrievingManager(
         self)
     self.waterHeaterModule = water_heater_module.WaterHeaterModule(self)
     self.generalConfigWindow = general_config_window.GeneralConfigWindow(
         self)
     self.modulesDict = {}
     self.pagesList = []
     self.pageTitleConsumers = []
     self.currentPageIndex = 0
 def __init__(self, _parent):
     QtCore.QObject.__init__(self, parent=_parent)
     self.autoControlWindow = auto_control_window.AutoControlWindow(
         _parent, self)
     self.httpHandler = http_handler.HTTPHandler()
     self.onTime = None
     self.offTime = None
     self.durationTime = None
     self.autoCtrlEnabled = True
     self.onRequestParam = (None, None)
     self.offRequestParam = (None, None)
     self.updateTimer = QtCore.QTimer()
     self.consumers = {}
     self.queue = _parent.getDataRetrievingManager().getQueue()
示例#4
0
    def __init__(self, username=None, password=None, token=None):
        self.protocol = 'HTTPS'
        self.username = username
        self.password = password
        self.ssl_verify = plexpy.CONFIG.VERIFY_SSL_CERT

        if not token:
            # Check if we should use the admin token, or the guest server token
            if session.get_session_user_id():
                user_data = users.Users()
                user_tokens = user_data.get_tokens(user_id=session.get_session_user_id())
                self.token = user_tokens['server_token']
            else:
                self.token = plexpy.CONFIG.PMS_TOKEN
        else:
            self.token = token

        self.request_handler = http_handler.HTTPHandler(host='plex.tv',
                                                        port=443,
                                                        token=self.token,
                                                        ssl_verify=self.ssl_verify)
示例#5
0
    def discover(self, include_cloud=True, all_servers=False):
        """ Query plex for all servers online. Returns the ones you own in a selectize format """

        # Try to discover localhost server
        local_machine_identifier = None
        request_handler = http_handler.HTTPHandler(
            urls='http://127.0.0.1:32400',
            timeout=1,
            ssl_verify=False,
            silent=True)
        request = request_handler.make_request(uri='/identity',
                                               request_type='GET',
                                               output_format='xml')
        if request:
            xml_head = request.getElementsByTagName('MediaContainer')[0]
            local_machine_identifier = xml_head.getAttribute(
                'machineIdentifier')

        local_server = {
            'httpsRequired': '0',
            'clientIdentifier': local_machine_identifier,
            'label': 'Local',
            'ip': '127.0.0.1',
            'port': '32400',
            'uri': 'http://127.0.0.1:32400',
            'local': '1',
            'value': '127.0.0.1:32400',
            'is_cloud': False
        }

        servers = self.get_plextv_resources(include_https=True,
                                            output_format='xml')
        clean_servers = []

        try:
            xml_head = servers.getElementsByTagName('MediaContainer')
        except Exception as e:
            logger.warn(
                "Tautulli PlexTV :: Failed to get servers from plex: %s." % e)
            return []

        for a in xml_head:
            if a.getAttribute('size'):
                if a.getAttribute('size') == '0':
                    return []

            if a.getElementsByTagName('Device'):
                devices = a.getElementsByTagName('Device')

                for d in devices:
                    if helpers.get_xml_attr(d, 'presence') == '1' and \
                            helpers.get_xml_attr(d, 'owned') == '1' and \
                            helpers.get_xml_attr(d, 'provides') == 'server':

                        is_cloud = (helpers.get_xml_attr(
                            d, 'platform').lower() == 'cloud')
                        if not include_cloud and is_cloud:
                            continue

                        connections = d.getElementsByTagName('Connection')

                        for c in connections:
                            if not all_servers:
                                # If this is a remote server don't show any local IPs.
                                if helpers.get_xml_attr(d, 'publicAddressMatches') == '0' and \
                                        helpers.get_xml_attr(c, 'local') == '1':
                                    continue

                                # If this is a local server don't show any remote IPs.
                                if helpers.get_xml_attr(d, 'publicAddressMatches') == '1' and \
                                        helpers.get_xml_attr(c, 'local') == '0':
                                    continue

                            if helpers.get_xml_attr(
                                    d, 'clientIdentifier'
                            ) == local_machine_identifier:
                                local_server[
                                    'httpsRequired'] = helpers.get_xml_attr(
                                        d, 'httpsRequired')
                                local_server['label'] = helpers.get_xml_attr(
                                    d, 'name')
                                clean_servers.append(local_server)
                                local_machine_identifier = None

                            server = {
                                'httpsRequired':
                                '1' if is_cloud else helpers.get_xml_attr(
                                    d, 'httpsRequired'),
                                'clientIdentifier':
                                helpers.get_xml_attr(d, 'clientIdentifier'),
                                'label':
                                helpers.get_xml_attr(d, 'name'),
                                'ip':
                                helpers.get_xml_attr(c, 'address'),
                                'port':
                                helpers.get_xml_attr(c, 'port'),
                                'uri':
                                helpers.get_xml_attr(c, 'uri'),
                                'local':
                                helpers.get_xml_attr(c, 'local'),
                                'value':
                                helpers.get_xml_attr(c, 'address') + ':' +
                                helpers.get_xml_attr(c, 'port'),
                                'is_cloud':
                                is_cloud
                            }
                            clean_servers.append(server)

            if local_machine_identifier:
                clean_servers.append(local_server)

        clean_servers.sort(
            key=lambda s: (s['label'], -int(s['local']), s['ip']))

        return clean_servers