HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/anaconda3/Lib/site-packages/binstar_client/utils/notebook/__init__.py
# pylint: disable=missing-module-docstring,missing-function-docstring

import nbformat
from six.moves.urllib.parse import urlparse

from ...errors import BinstarError


def parse(handle):
    """
    >>> parse("user/notebook")
    ('user', 'notebook')
    >>> parse("notebook")
    (None, 'notebook')

    :param handle: String
    :return: username, notebooks
    """

    components = handle.split('/', 1)
    if len(components) == 1:
        return None, components[0]
    if len(components) == 2:
        return components[0], components[1]
    raise BinstarError("{} can't be parsed".format(handle))


def notebook_url(upload_info):
    parsed = urlparse(upload_info['url'])
    if parsed.netloc == 'anaconda.org':
        url = '{}://notebooks.{}{}'.format(parsed.scheme, parsed.netloc, parsed.path)
    else:
        url = '{}://{}/notebooks{}'.format(parsed.scheme, parsed.netloc, parsed.path)
    return url


def has_environment(nb_file):
    if nbformat is None:
        return False

    try:
        with open(nb_file) as file:  # pylint: disable=unspecified-encoding
            data = file.read()
        notebook = nbformat.reader.reads(data)
        return 'environment' in notebook['metadata']
    except (ValueError, AttributeError, KeyError, IOError, nbformat.reader.NotJSONError):
        return False