# Path: pytablereader/_constant.py
# class Default:
#     ENCODING = "utf-8"
# 
# Path: pytablereader/error.py
# class InvalidFilePathError(PathError):
#     """
#     Exception raised when invalid file path used.
# 
#     TODO: rename the error class
#     """


import os.path
import posixpath
import pathvalidate
import typepy
    import simplejson as json
    import json  # type: ignore # noqa
from urllib.parse import urlparse
from ._constant import Default
from .error import InvalidFilePathError
    from mbstrdecoder import detect_file_encoding
        return encoding

    encoding = detect_file_encoding(file_path)
    if not encoding:
        return Default.ENCODING

    return encoding


def get_extension(file_path):
    if typepy.is_null_string(file_path):
        raise InvalidFilePathError("file path is empty")

    return os.path.splitext(file_path)[1].lstrip(".")


def make_temp_file_path_from_url(temp_dir_path, url):
    try:
        url_path = urlparse(url).path
    except AttributeError:
        raise InvalidFilePathError("url must be a string")

    if typepy.is_null_string(url_path):
        raise InvalidFilePathError(f"invalid URL path: {url_path}")

    temp_name = os.path.basename(url_path.rstrip("/"))
    if typepy.is_null_string(temp_name):
        temp_name = pathvalidate.replace_symbol(temp_name, replacement_text="_")

    if typepy.is_null_string(temp_name):

# Path: pytablereader/_constant.py
# class Default:
#     ENCODING = "utf-8"
# 
# Path: pytablereader/error.py
# class InvalidFilePathError(PathError):
#     """
#     Exception raised when invalid file path used.
# 
#     TODO: rename the error class
#     """


# Path: pytablereader/_common.py
import os.path
import posixpath
import pathvalidate
import typepy
    import simplejson as json
    import json  # type: ignore # noqa
from urllib.parse import urlparse
from ._constant import Default
from .error import InvalidFilePathError
    from mbstrdecoder import detect_file_encoding

        return encoding

    encoding = detect_file_encoding(file_path)
    if not encoding:
        return Default.ENCODING

    return encoding


def get_extension(file_path):
    if typepy.is_null_string(file_path):
        raise InvalidFilePathError("file path is empty")

    return os.path.splitext(file_path)[1].lstrip(".")


def make_temp_file_path_from_url(temp_dir_path, url):
    try:
        url_path = urlparse(url).path
    except AttributeError:
        raise InvalidFilePathError("url must be a string")

    if typepy.is_null_string(url_path):
        raise InvalidFilePathError(f"invalid URL path: {url_path}")

    temp_name = os.path.basename(url_path.rstrip("/"))
    if typepy.is_null_string(temp_name):
        temp_name = pathvalidate.replace_symbol(temp_name, replacement_text="_")

    if typepy.is_null_string(temp_name):

        raise InvalidFilePathError(f"invalid URL: {url}")