kopia lustrzana https://github.com/simonw/datasette
Configured and applied isort, refs #516
rodzic
17ec309e14
commit
59a5d336bd
|
@ -1,3 +1,7 @@
|
||||||
[settings]
|
[settings]
|
||||||
multi_line_output=3
|
multi_line_output=3
|
||||||
|
include_trailing_comma=True
|
||||||
|
force_grid_wrap=0
|
||||||
|
use_parentheses=True
|
||||||
|
line_length=88
|
||||||
|
known_first_party=datasette
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from datasette.permissions import Permission # noqa
|
from datasette.permissions import Permission # noqa
|
||||||
from datasette.version import __version_info__, __version__ # noqa
|
|
||||||
from datasette.utils.asgi import Forbidden, NotFound, Request, Response # noqa
|
|
||||||
from datasette.utils import actor_matches_allow # noqa
|
from datasette.utils import actor_matches_allow # noqa
|
||||||
|
from datasette.utils.asgi import Forbidden, NotFound, Request, Response # noqa
|
||||||
|
from datasette.version import __version__, __version_info__ # noqa
|
||||||
from datasette.views import Context # noqa
|
from datasette.views import Context # noqa
|
||||||
|
|
||||||
from .hookspecs import hookimpl # noqa
|
from .hookspecs import hookimpl # noqa
|
||||||
from .hookspecs import hookspec # noqa
|
from .hookspecs import hookspec # noqa
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from datasette import hookimpl
|
|
||||||
from itsdangerous import BadSignature
|
|
||||||
from datasette.utils import baseconv
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from itsdangerous import BadSignature
|
||||||
|
|
||||||
|
from datasette import hookimpl
|
||||||
|
from datasette.utils import baseconv
|
||||||
|
|
||||||
|
|
||||||
@hookimpl
|
@hookimpl
|
||||||
def actor_from_request(datasette, request):
|
def actor_from_request(datasette, request):
|
||||||
|
|
|
@ -1,18 +1,13 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple, Union
|
|
||||||
import asgi_csrf
|
|
||||||
import collections
|
import collections
|
||||||
import dataclasses
|
import dataclasses
|
||||||
import datetime
|
import datetime
|
||||||
import functools
|
import functools
|
||||||
import glob
|
import glob
|
||||||
import hashlib
|
import hashlib
|
||||||
import httpx
|
|
||||||
import inspect
|
import inspect
|
||||||
from itsdangerous import BadSignature
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pkg_resources
|
|
||||||
import re
|
import re
|
||||||
import secrets
|
import secrets
|
||||||
import sys
|
import sys
|
||||||
|
@ -22,47 +17,25 @@ import types
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
from concurrent import futures
|
from concurrent import futures
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple, Union
|
||||||
|
|
||||||
from markupsafe import Markup, escape
|
import asgi_csrf
|
||||||
from itsdangerous import URLSafeSerializer
|
import httpx
|
||||||
from jinja2 import (
|
import pkg_resources
|
||||||
ChoiceLoader,
|
from itsdangerous import BadSignature, URLSafeSerializer
|
||||||
Environment,
|
from jinja2 import ChoiceLoader, Environment, FileSystemLoader, PrefixLoader
|
||||||
FileSystemLoader,
|
|
||||||
PrefixLoader,
|
|
||||||
)
|
|
||||||
from jinja2.environment import Template
|
from jinja2.environment import Template
|
||||||
from jinja2.exceptions import TemplateNotFound
|
from jinja2.exceptions import TemplateNotFound
|
||||||
|
from markupsafe import Markup, escape
|
||||||
|
|
||||||
from .views import Context
|
|
||||||
from .views.base import ureg
|
|
||||||
from .views.database import database_download, DatabaseView, TableCreateView
|
|
||||||
from .views.index import IndexView
|
|
||||||
from .views.special import (
|
|
||||||
JsonDataView,
|
|
||||||
PatternPortfolioView,
|
|
||||||
AuthTokenView,
|
|
||||||
ApiExplorerView,
|
|
||||||
CreateTokenView,
|
|
||||||
LogoutView,
|
|
||||||
AllowDebugView,
|
|
||||||
PermissionsDebugView,
|
|
||||||
MessagesDebugView,
|
|
||||||
)
|
|
||||||
from .views.table import (
|
|
||||||
TableInsertView,
|
|
||||||
TableUpsertView,
|
|
||||||
TableDropView,
|
|
||||||
table_view,
|
|
||||||
)
|
|
||||||
from .views.row import RowView, RowDeleteView, RowUpdateView
|
|
||||||
from .renderer import json_renderer
|
|
||||||
from .url_builder import Urls
|
|
||||||
from .database import Database, QueryInterrupted
|
from .database import Database, QueryInterrupted
|
||||||
|
from .plugins import DEFAULT_PLUGINS, get_plugins, pm
|
||||||
|
from .renderer import json_renderer
|
||||||
|
from .tracer import AsgiTracer
|
||||||
|
from .url_builder import Urls
|
||||||
from .utils import (
|
from .utils import (
|
||||||
PrefixedUrlString,
|
|
||||||
SPATIALITE_FUNCTIONS,
|
SPATIALITE_FUNCTIONS,
|
||||||
|
PrefixedUrlString,
|
||||||
StartupError,
|
StartupError,
|
||||||
async_call_with_supported_arguments,
|
async_call_with_supported_arguments,
|
||||||
await_me_maybe,
|
await_me_maybe,
|
||||||
|
@ -76,34 +49,46 @@ from .utils import (
|
||||||
parse_metadata,
|
parse_metadata,
|
||||||
resolve_env_secrets,
|
resolve_env_secrets,
|
||||||
resolve_routes,
|
resolve_routes,
|
||||||
|
row_sql_params_pks,
|
||||||
tilde_decode,
|
tilde_decode,
|
||||||
to_css_class,
|
to_css_class,
|
||||||
urlsafe_components,
|
urlsafe_components,
|
||||||
row_sql_params_pks,
|
|
||||||
)
|
)
|
||||||
from .utils.asgi import (
|
from .utils.asgi import (
|
||||||
AsgiLifespan,
|
AsgiLifespan,
|
||||||
|
AsgiRunOnFirstRequest,
|
||||||
|
DatabaseNotFound,
|
||||||
Forbidden,
|
Forbidden,
|
||||||
NotFound,
|
NotFound,
|
||||||
DatabaseNotFound,
|
|
||||||
TableNotFound,
|
|
||||||
RowNotFound,
|
|
||||||
Request,
|
Request,
|
||||||
Response,
|
Response,
|
||||||
AsgiRunOnFirstRequest,
|
RowNotFound,
|
||||||
asgi_static,
|
TableNotFound,
|
||||||
asgi_send,
|
asgi_send,
|
||||||
asgi_send_file,
|
asgi_send_file,
|
||||||
asgi_send_redirect,
|
asgi_send_redirect,
|
||||||
|
asgi_static,
|
||||||
)
|
)
|
||||||
from .utils.internal_db import init_internal_db, populate_schema_tables
|
from .utils.internal_db import init_internal_db, populate_schema_tables
|
||||||
from .utils.sqlite import (
|
from .utils.sqlite import sqlite3, using_pysqlite3
|
||||||
sqlite3,
|
|
||||||
using_pysqlite3,
|
|
||||||
)
|
|
||||||
from .tracer import AsgiTracer
|
|
||||||
from .plugins import pm, DEFAULT_PLUGINS, get_plugins
|
|
||||||
from .version import __version__
|
from .version import __version__
|
||||||
|
from .views import Context
|
||||||
|
from .views.base import ureg
|
||||||
|
from .views.database import DatabaseView, TableCreateView, database_download
|
||||||
|
from .views.index import IndexView
|
||||||
|
from .views.row import RowDeleteView, RowUpdateView, RowView
|
||||||
|
from .views.special import (
|
||||||
|
AllowDebugView,
|
||||||
|
ApiExplorerView,
|
||||||
|
AuthTokenView,
|
||||||
|
CreateTokenView,
|
||||||
|
JsonDataView,
|
||||||
|
LogoutView,
|
||||||
|
MessagesDebugView,
|
||||||
|
PatternPortfolioView,
|
||||||
|
PermissionsDebugView,
|
||||||
|
)
|
||||||
|
from .views.table import TableDropView, TableInsertView, TableUpsertView, table_view
|
||||||
|
|
||||||
app_root = Path(__file__).parent.parent
|
app_root = Path(__file__).parent.parent
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from datasette import hookimpl
|
|
||||||
from datasette.utils.asgi import Response, BadRequest
|
|
||||||
from datasette.utils import to_css_class
|
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
|
from datasette import hookimpl
|
||||||
|
from datasette.utils import to_css_class
|
||||||
|
from datasette.utils.asgi import BadRequest, Response
|
||||||
|
|
||||||
_BLOB_COLUMN = "_blob_column"
|
_BLOB_COLUMN = "_blob_column"
|
||||||
_BLOB_HASH = "_blob_hash"
|
_BLOB_HASH = "_blob_hash"
|
||||||
|
|
||||||
|
|
|
@ -1,41 +1,43 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import uvicorn
|
|
||||||
import click
|
|
||||||
from click import formatting
|
|
||||||
from click.types import CompositeParamType
|
|
||||||
from click_default_group import DefaultGroup
|
|
||||||
import functools
|
import functools
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
from runpy import run_module
|
|
||||||
import shutil
|
import shutil
|
||||||
from subprocess import call
|
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
from runpy import run_module
|
||||||
|
from subprocess import call
|
||||||
|
|
||||||
|
import click
|
||||||
|
import uvicorn
|
||||||
|
from click import formatting
|
||||||
|
from click.types import CompositeParamType
|
||||||
|
from click_default_group import DefaultGroup
|
||||||
|
|
||||||
from .app import (
|
from .app import (
|
||||||
OBSOLETE_SETTINGS,
|
|
||||||
Datasette,
|
|
||||||
DEFAULT_SETTINGS,
|
DEFAULT_SETTINGS,
|
||||||
|
OBSOLETE_SETTINGS,
|
||||||
SETTINGS,
|
SETTINGS,
|
||||||
SQLITE_LIMIT_ATTACHED,
|
SQLITE_LIMIT_ATTACHED,
|
||||||
|
Datasette,
|
||||||
pm,
|
pm,
|
||||||
)
|
)
|
||||||
from .utils import (
|
from .utils import (
|
||||||
LoadExtension,
|
|
||||||
StartupError,
|
|
||||||
check_connection,
|
|
||||||
find_spatialite,
|
|
||||||
parse_metadata,
|
|
||||||
ConnectionProblem,
|
ConnectionProblem,
|
||||||
|
LoadExtension,
|
||||||
SpatialiteConnectionProblem,
|
SpatialiteConnectionProblem,
|
||||||
initial_path_for_datasette,
|
|
||||||
temporary_docker_directory,
|
|
||||||
value_as_boolean,
|
|
||||||
SpatialiteNotFound,
|
SpatialiteNotFound,
|
||||||
|
StartupError,
|
||||||
StaticMount,
|
StaticMount,
|
||||||
ValueAsBooleanError,
|
ValueAsBooleanError,
|
||||||
|
check_connection,
|
||||||
|
find_spatialite,
|
||||||
|
initial_path_for_datasette,
|
||||||
|
parse_metadata,
|
||||||
|
temporary_docker_directory,
|
||||||
|
value_as_boolean,
|
||||||
)
|
)
|
||||||
from .utils.sqlite import sqlite3
|
from .utils.sqlite import sqlite3
|
||||||
from .utils.testing import TestClient
|
from .utils.testing import TestClient
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from collections import namedtuple
|
|
||||||
from pathlib import Path
|
|
||||||
import hashlib
|
import hashlib
|
||||||
import janus
|
|
||||||
import queue
|
import queue
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import uuid
|
import uuid
|
||||||
|
from collections import namedtuple
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import janus
|
||||||
|
|
||||||
|
from .inspect import inspect_hash
|
||||||
from .tracer import trace
|
from .tracer import trace
|
||||||
from .utils import (
|
from .utils import (
|
||||||
detect_fts,
|
detect_fts,
|
||||||
|
@ -15,12 +17,11 @@ from .utils import (
|
||||||
detect_spatialite,
|
detect_spatialite,
|
||||||
get_all_foreign_keys,
|
get_all_foreign_keys,
|
||||||
get_outbound_foreign_keys,
|
get_outbound_foreign_keys,
|
||||||
sqlite_timelimit,
|
|
||||||
sqlite3,
|
sqlite3,
|
||||||
table_columns,
|
sqlite_timelimit,
|
||||||
table_column_details,
|
table_column_details,
|
||||||
|
table_columns,
|
||||||
)
|
)
|
||||||
from .inspect import inspect_hash
|
|
||||||
|
|
||||||
connections = threading.local()
|
connections = threading.local()
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from datasette import hookimpl
|
|
||||||
import datetime
|
import datetime
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from datasette import hookimpl
|
||||||
|
|
||||||
|
|
||||||
def header(key, request):
|
def header(key, request):
|
||||||
key = key.replace("_", "-").encode("utf-8")
|
key = key.replace("_", "-").encode("utf-8")
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from datasette import hookimpl, Permission
|
|
||||||
from datasette.utils import actor_matches_allow
|
|
||||||
import itsdangerous
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
import itsdangerous
|
||||||
|
|
||||||
|
from datasette import Permission, hookimpl
|
||||||
|
from datasette.utils import actor_matches_allow
|
||||||
|
|
||||||
|
|
||||||
@hookimpl
|
@hookimpl
|
||||||
def register_permissions():
|
def register_permissions():
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import json
|
import json
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
from datasette import hookimpl
|
from datasette import hookimpl
|
||||||
from datasette.database import QueryInterrupted
|
from datasette.database import QueryInterrupted
|
||||||
from datasette.utils import (
|
from datasette.utils import (
|
||||||
|
detect_json1,
|
||||||
escape_sqlite,
|
escape_sqlite,
|
||||||
path_with_added_args,
|
path_with_added_args,
|
||||||
path_with_removed_args,
|
path_with_removed_args,
|
||||||
detect_json1,
|
|
||||||
sqlite3,
|
sqlite3,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from datasette import hookimpl
|
|
||||||
from datasette.views.base import DatasetteError
|
|
||||||
from datasette.utils.asgi import BadRequest
|
|
||||||
import json
|
import json
|
||||||
import numbers
|
import numbers
|
||||||
|
|
||||||
|
from datasette import hookimpl
|
||||||
|
from datasette.utils.asgi import BadRequest
|
||||||
|
from datasette.views.base import DatasetteError
|
||||||
|
|
||||||
from .utils import detect_json1, escape_sqlite, path_with_removed_args
|
from .utils import detect_json1, escape_sqlite, path_with_removed_args
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from os import stat
|
from os import stat
|
||||||
from datasette import hookimpl, Response
|
|
||||||
|
from datasette import Response, hookimpl
|
||||||
|
|
||||||
|
|
||||||
@hookimpl(trylast=True)
|
@hookimpl(trylast=True)
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
from datasette import hookimpl, Response
|
|
||||||
from .utils import await_me_maybe, add_cors_headers
|
|
||||||
from .utils.asgi import (
|
|
||||||
Base400,
|
|
||||||
Forbidden,
|
|
||||||
)
|
|
||||||
from .views.base import DatasetteError
|
|
||||||
from markupsafe import Markup
|
|
||||||
import pdb
|
import pdb
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
|
from markupsafe import Markup
|
||||||
|
|
||||||
|
from datasette import Response, hookimpl
|
||||||
|
|
||||||
from .plugins import pm
|
from .plugins import pm
|
||||||
|
from .utils import add_cors_headers, await_me_maybe
|
||||||
|
from .utils.asgi import Base400, Forbidden
|
||||||
|
from .views.base import DatasetteError
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import rich
|
import rich
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
from pluggy import HookimplMarker
|
from pluggy import HookimplMarker, HookspecMarker
|
||||||
from pluggy import HookspecMarker
|
|
||||||
|
|
||||||
hookspec = HookspecMarker("datasette")
|
hookspec = HookspecMarker("datasette")
|
||||||
hookimpl = HookimplMarker("datasette")
|
hookimpl = HookimplMarker("datasette")
|
||||||
|
|
|
@ -1,16 +1,15 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from .utils import (
|
from .utils import (
|
||||||
detect_spatialite,
|
|
||||||
detect_fts,
|
detect_fts,
|
||||||
detect_primary_keys,
|
detect_primary_keys,
|
||||||
|
detect_spatialite,
|
||||||
escape_sqlite,
|
escape_sqlite,
|
||||||
get_all_foreign_keys,
|
get_all_foreign_keys,
|
||||||
table_columns,
|
|
||||||
sqlite3,
|
sqlite3,
|
||||||
|
table_columns,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
HASH_BLOCK_SIZE = 1024 * 1024
|
HASH_BLOCK_SIZE = 1024 * 1024
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import importlib
|
import importlib
|
||||||
import pluggy
|
|
||||||
import pkg_resources
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import pkg_resources
|
||||||
|
import pluggy
|
||||||
|
|
||||||
from . import hookspecs
|
from . import hookspecs
|
||||||
|
|
||||||
DEFAULT_PLUGINS = (
|
DEFAULT_PLUGINS = (
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
from datasette import hookimpl
|
|
||||||
import click
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from subprocess import check_call, check_output
|
from subprocess import check_call, check_output
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
|
from datasette import hookimpl
|
||||||
|
|
||||||
|
from ..utils import temporary_docker_directory
|
||||||
from .common import (
|
from .common import (
|
||||||
add_common_publish_arguments_and_options,
|
add_common_publish_arguments_and_options,
|
||||||
fail_if_publish_binary_not_installed,
|
fail_if_publish_binary_not_installed,
|
||||||
)
|
)
|
||||||
from ..utils import temporary_docker_directory
|
|
||||||
|
|
||||||
|
|
||||||
@hookimpl
|
@hookimpl
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
from ..utils import StaticMount
|
|
||||||
import click
|
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
|
from ..utils import StaticMount
|
||||||
|
|
||||||
|
|
||||||
def add_common_publish_arguments_and_options(subcommand):
|
def add_common_publish_arguments_and_options(subcommand):
|
||||||
for decorator in reversed(
|
for decorator in reversed(
|
||||||
|
|
|
@ -1,19 +1,21 @@
|
||||||
from contextlib import contextmanager
|
|
||||||
from datasette import hookimpl
|
|
||||||
import click
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import shlex
|
import shlex
|
||||||
import shutil
|
import shutil
|
||||||
from subprocess import call, check_output
|
|
||||||
import tempfile
|
import tempfile
|
||||||
|
from contextlib import contextmanager
|
||||||
|
from subprocess import call, check_output
|
||||||
|
|
||||||
|
import click
|
||||||
|
|
||||||
|
from datasette import hookimpl
|
||||||
|
from datasette.utils import link_or_copy, link_or_copy_directory, parse_metadata
|
||||||
|
|
||||||
from .common import (
|
from .common import (
|
||||||
add_common_publish_arguments_and_options,
|
add_common_publish_arguments_and_options,
|
||||||
fail_if_publish_binary_not_installed,
|
fail_if_publish_binary_not_installed,
|
||||||
)
|
)
|
||||||
from datasette.utils import link_or_copy, link_or_copy_directory, parse_metadata
|
|
||||||
|
|
||||||
|
|
||||||
@hookimpl
|
@hookimpl
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from datasette.utils import (
|
from datasette.utils import (
|
||||||
value_as_boolean,
|
|
||||||
remove_infinites,
|
|
||||||
CustomJSONEncoder,
|
CustomJSONEncoder,
|
||||||
path_from_row_pks,
|
path_from_row_pks,
|
||||||
|
remove_infinites,
|
||||||
sqlite3,
|
sqlite3,
|
||||||
|
value_as_boolean,
|
||||||
)
|
)
|
||||||
from datasette.utils.asgi import Response
|
from datasette.utils.asgi import Response
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
import traceback
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from contextvars import ContextVar
|
from contextvars import ContextVar
|
||||||
|
|
||||||
from markupsafe import escape
|
from markupsafe import escape
|
||||||
import time
|
|
||||||
import json
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
tracers = {}
|
tracers = {}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from .utils import tilde_encode, path_with_format, HASH_LENGTH, PrefixedUrlString
|
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
|
from .utils import HASH_LENGTH, PrefixedUrlString, path_with_format, tilde_encode
|
||||||
|
|
||||||
|
|
||||||
class Urls:
|
class Urls:
|
||||||
def __init__(self, ds):
|
def __init__(self, ds):
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from contextlib import contextmanager
|
|
||||||
import click
|
|
||||||
from collections import OrderedDict, namedtuple, Counter
|
|
||||||
import base64
|
import base64
|
||||||
import hashlib
|
import hashlib
|
||||||
import inspect
|
import inspect
|
||||||
import json
|
import json
|
||||||
import markupsafe
|
|
||||||
import mergedeep
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import secrets
|
||||||
import shlex
|
import shlex
|
||||||
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import typing
|
|
||||||
import time
|
import time
|
||||||
import types
|
import types
|
||||||
import secrets
|
import typing
|
||||||
import shutil
|
|
||||||
import urllib
|
import urllib
|
||||||
|
from collections import Counter, OrderedDict, namedtuple
|
||||||
|
from contextlib import contextmanager
|
||||||
|
|
||||||
|
import click
|
||||||
|
import markupsafe
|
||||||
|
import mergedeep
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from .shutil_backport import copytree
|
from .shutil_backport import copytree
|
||||||
from .sqlite import sqlite3, supports_table_xinfo
|
from .sqlite import sqlite3, supports_table_xinfo
|
||||||
|
|
||||||
|
|
||||||
# From https://www.sqlite.org/lang_keywords.html
|
# From https://www.sqlite.org/lang_keywords.html
|
||||||
reserved_words = set(
|
reserved_words = set(
|
||||||
(
|
(
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
import json
|
import json
|
||||||
from datasette.utils import MultiParams
|
from http.cookies import Morsel, SimpleCookie
|
||||||
from mimetypes import guess_type
|
from mimetypes import guess_type
|
||||||
from urllib.parse import parse_qs, urlunparse, parse_qsl
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from http.cookies import SimpleCookie, Morsel
|
from urllib.parse import parse_qs, parse_qsl, urlunparse
|
||||||
|
|
||||||
import aiofiles
|
import aiofiles
|
||||||
import aiofiles.os
|
import aiofiles.os
|
||||||
|
|
||||||
|
from datasette.utils import MultiParams
|
||||||
|
|
||||||
# Workaround for adding samesite support to pre 3.8 python
|
# Workaround for adding samesite support to pre 3.8 python
|
||||||
Morsel._reserved["samesite"] = "SameSite"
|
Morsel._reserved["samesite"] = "SameSite"
|
||||||
# Thanks, Starlette:
|
# Thanks, Starlette:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import types
|
import types
|
||||||
from typing import NamedTuple, Any
|
from typing import Any, NamedTuple
|
||||||
|
|
||||||
|
|
||||||
class CallableStatus(NamedTuple):
|
class CallableStatus(NamedTuple):
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
from datasette.utils import table_column_details
|
from datasette.utils import table_column_details
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ This code is licensed under the Python License:
|
||||||
https://github.com/python/cpython/blob/v3.8.3/LICENSE
|
https://github.com/python/cpython/blob/v3.8.3/LICENSE
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
from shutil import copy, copy2, copystat, Error
|
from shutil import Error, copy, copy2, copystat
|
||||||
|
|
||||||
|
|
||||||
def _copytree(
|
def _copytree(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from asgiref.sync import async_to_sync
|
|
||||||
from urllib.parse import urlencode
|
|
||||||
import json
|
import json
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
|
from asgiref.sync import async_to_sync
|
||||||
|
|
||||||
# These wrapper classes pre-date the introduction of
|
# These wrapper classes pre-date the introduction of
|
||||||
# datasette.client and httpx to Datasette. They could
|
# datasette.client and httpx to Datasette. They could
|
||||||
|
|
|
@ -5,33 +5,26 @@ import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
import time
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
from markupsafe import escape
|
|
||||||
|
|
||||||
|
|
||||||
import pint
|
import pint
|
||||||
|
from markupsafe import escape
|
||||||
|
|
||||||
from datasette import __version__
|
from datasette import __version__
|
||||||
from datasette.database import QueryInterrupted
|
from datasette.database import QueryInterrupted
|
||||||
from datasette.utils.asgi import Request
|
|
||||||
from datasette.utils import (
|
from datasette.utils import (
|
||||||
add_cors_headers,
|
|
||||||
await_me_maybe,
|
|
||||||
EscapeHtmlWriter,
|
EscapeHtmlWriter,
|
||||||
InvalidSql,
|
InvalidSql,
|
||||||
LimitedWriter,
|
LimitedWriter,
|
||||||
|
add_cors_headers,
|
||||||
|
await_me_maybe,
|
||||||
call_with_supported_arguments,
|
call_with_supported_arguments,
|
||||||
path_from_row_pks,
|
path_from_row_pks,
|
||||||
path_with_added_args,
|
path_with_added_args,
|
||||||
path_with_removed_args,
|
|
||||||
path_with_format,
|
path_with_format,
|
||||||
|
path_with_removed_args,
|
||||||
sqlite3,
|
sqlite3,
|
||||||
)
|
)
|
||||||
from datasette.utils.asgi import (
|
from datasette.utils.asgi import AsgiStream, BadRequest, NotFound, Request, Response
|
||||||
AsgiStream,
|
|
||||||
NotFound,
|
|
||||||
Response,
|
|
||||||
BadRequest,
|
|
||||||
)
|
|
||||||
|
|
||||||
ureg = pint.UnitRegistry()
|
ureg = pint.UnitRegistry()
|
||||||
|
|
||||||
|
|
|
@ -1,36 +1,37 @@
|
||||||
from dataclasses import dataclass, field
|
|
||||||
from typing import Callable
|
|
||||||
from urllib.parse import parse_qsl, urlencode
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import hashlib
|
import hashlib
|
||||||
import itertools
|
import itertools
|
||||||
import json
|
import json
|
||||||
import markupsafe
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sqlite_utils
|
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from typing import Callable
|
||||||
|
from urllib.parse import parse_qsl, urlencode
|
||||||
|
|
||||||
|
import markupsafe
|
||||||
|
import sqlite_utils
|
||||||
|
|
||||||
from datasette.database import QueryInterrupted
|
from datasette.database import QueryInterrupted
|
||||||
|
from datasette.plugins import pm
|
||||||
from datasette.utils import (
|
from datasette.utils import (
|
||||||
|
InvalidSql,
|
||||||
add_cors_headers,
|
add_cors_headers,
|
||||||
await_me_maybe,
|
await_me_maybe,
|
||||||
call_with_supported_arguments,
|
call_with_supported_arguments,
|
||||||
derive_named_parameters,
|
derive_named_parameters,
|
||||||
format_bytes,
|
format_bytes,
|
||||||
tilde_decode,
|
|
||||||
to_css_class,
|
|
||||||
validate_sql_select,
|
|
||||||
is_url,
|
is_url,
|
||||||
path_with_added_args,
|
path_with_added_args,
|
||||||
path_with_format,
|
path_with_format,
|
||||||
path_with_removed_args,
|
path_with_removed_args,
|
||||||
sqlite3,
|
sqlite3,
|
||||||
|
tilde_decode,
|
||||||
|
to_css_class,
|
||||||
truncate_url,
|
truncate_url,
|
||||||
InvalidSql,
|
validate_sql_select,
|
||||||
)
|
)
|
||||||
from datasette.utils.asgi import AsgiFileDownload, NotFound, Response, Forbidden
|
from datasette.utils.asgi import AsgiFileDownload, Forbidden, NotFound, Response
|
||||||
from datasette.plugins import pm
|
|
||||||
|
|
||||||
from .base import BaseView, DatasetteError, View, _error, stream_csv
|
from .base import BaseView, DatasetteError, View, _error, stream_csv
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from datasette.utils import add_cors_headers, CustomJSONEncoder
|
from datasette.utils import CustomJSONEncoder, add_cors_headers
|
||||||
from datasette.utils.asgi import Response
|
from datasette.utils.asgi import Response
|
||||||
from datasette.version import __version__
|
from datasette.version import __version__
|
||||||
|
|
||||||
from .base import BaseView
|
from .base import BaseView
|
||||||
|
|
||||||
|
|
||||||
# Truncate table list on homepage at:
|
# Truncate table list on homepage at:
|
||||||
TRUNCATE_AT = 5
|
TRUNCATE_AT = 5
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
from datasette.utils.asgi import NotFound, Forbidden, Response
|
import json
|
||||||
|
|
||||||
|
import sqlite_utils
|
||||||
|
|
||||||
from datasette.database import QueryInterrupted
|
from datasette.database import QueryInterrupted
|
||||||
from .base import DataView, BaseView, _error
|
|
||||||
from datasette.utils import (
|
from datasette.utils import (
|
||||||
tilde_decode,
|
|
||||||
urlsafe_components,
|
|
||||||
to_css_class,
|
|
||||||
escape_sqlite,
|
escape_sqlite,
|
||||||
row_sql_params_pks,
|
row_sql_params_pks,
|
||||||
|
tilde_decode,
|
||||||
|
to_css_class,
|
||||||
|
urlsafe_components,
|
||||||
)
|
)
|
||||||
import json
|
from datasette.utils.asgi import Forbidden, NotFound, Response
|
||||||
import sqlite_utils
|
|
||||||
|
from .base import BaseView, DataView, _error
|
||||||
from .table import display_columns_and_rows
|
from .table import display_columns_and_rows
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,7 +155,7 @@ class RowError(Exception):
|
||||||
|
|
||||||
|
|
||||||
async def _resolve_row_and_check_permission(datasette, request, permission):
|
async def _resolve_row_and_check_permission(datasette, request, permission):
|
||||||
from datasette.app import DatabaseNotFound, TableNotFound, RowNotFound
|
from datasette.app import DatabaseNotFound, RowNotFound, TableNotFound
|
||||||
|
|
||||||
try:
|
try:
|
||||||
resolved = await datasette.resolve_row(request)
|
resolved = await datasette.resolve_row(request)
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
import json
|
import json
|
||||||
from datasette.utils.asgi import Response, Forbidden
|
import secrets
|
||||||
|
import urllib
|
||||||
|
|
||||||
from datasette.utils import (
|
from datasette.utils import (
|
||||||
actor_matches_allow,
|
actor_matches_allow,
|
||||||
add_cors_headers,
|
add_cors_headers,
|
||||||
tilde_encode,
|
|
||||||
tilde_decode,
|
tilde_decode,
|
||||||
|
tilde_encode,
|
||||||
)
|
)
|
||||||
|
from datasette.utils.asgi import Forbidden, Response
|
||||||
|
|
||||||
from .base import BaseView, View
|
from .base import BaseView, View
|
||||||
import secrets
|
|
||||||
import urllib
|
|
||||||
|
|
||||||
|
|
||||||
class JsonDataView(BaseView):
|
class JsonDataView(BaseView):
|
||||||
|
|
|
@ -3,40 +3,41 @@ import itertools
|
||||||
import json
|
import json
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
from asyncinject import Registry
|
|
||||||
import markupsafe
|
import markupsafe
|
||||||
|
import sqlite_utils
|
||||||
|
from asyncinject import Registry
|
||||||
|
|
||||||
from datasette.plugins import pm
|
|
||||||
from datasette.database import QueryInterrupted
|
|
||||||
from datasette import tracer
|
from datasette import tracer
|
||||||
|
from datasette.database import QueryInterrupted
|
||||||
|
from datasette.filters import Filters
|
||||||
|
from datasette.plugins import pm
|
||||||
from datasette.utils import (
|
from datasette.utils import (
|
||||||
|
CustomRow,
|
||||||
|
InvalidSql,
|
||||||
add_cors_headers,
|
add_cors_headers,
|
||||||
|
append_querystring,
|
||||||
await_me_maybe,
|
await_me_maybe,
|
||||||
call_with_supported_arguments,
|
call_with_supported_arguments,
|
||||||
CustomRow,
|
|
||||||
append_querystring,
|
|
||||||
compound_keys_after_sql,
|
compound_keys_after_sql,
|
||||||
format_bytes,
|
|
||||||
tilde_encode,
|
|
||||||
escape_sqlite,
|
escape_sqlite,
|
||||||
filters_should_redirect,
|
filters_should_redirect,
|
||||||
|
format_bytes,
|
||||||
is_url,
|
is_url,
|
||||||
path_from_row_pks,
|
path_from_row_pks,
|
||||||
path_with_added_args,
|
path_with_added_args,
|
||||||
path_with_format,
|
path_with_format,
|
||||||
path_with_removed_args,
|
path_with_removed_args,
|
||||||
path_with_replaced_args,
|
path_with_replaced_args,
|
||||||
|
sqlite3,
|
||||||
|
tilde_encode,
|
||||||
to_css_class,
|
to_css_class,
|
||||||
truncate_url,
|
truncate_url,
|
||||||
urlsafe_components,
|
urlsafe_components,
|
||||||
value_as_boolean,
|
value_as_boolean,
|
||||||
InvalidSql,
|
|
||||||
sqlite3,
|
|
||||||
)
|
)
|
||||||
from datasette.utils.asgi import BadRequest, Forbidden, NotFound, Response
|
from datasette.utils.asgi import BadRequest, Forbidden, NotFound, Response
|
||||||
from datasette.filters import Filters
|
|
||||||
import sqlite_utils
|
from .base import BaseView, DatasetteError, _error, stream_csv, ureg
|
||||||
from .base import BaseView, DatasetteError, ureg, _error, stream_csv
|
|
||||||
from .database import QueryView
|
from .database import QueryView
|
||||||
|
|
||||||
LINK_WITH_LABEL = (
|
LINK_WITH_LABEL = (
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import json
|
import json
|
||||||
import textwrap
|
import textwrap
|
||||||
from yaml import safe_dump
|
|
||||||
from ruamel.yaml import round_trip_load
|
from ruamel.yaml import round_trip_load
|
||||||
|
from yaml import safe_dump
|
||||||
|
|
||||||
|
|
||||||
def metadata_example(cog, data=None, yaml=None):
|
def metadata_example(cog, data=None, yaml=None):
|
||||||
|
|
3
setup.py
3
setup.py
|
@ -1,6 +1,7 @@
|
||||||
from setuptools import setup, find_packages
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from setuptools import find_packages, setup
|
||||||
|
|
||||||
|
|
||||||
def get_long_description():
|
def get_long_description():
|
||||||
with open(
|
with open(
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import httpx
|
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import pytest
|
|
||||||
import pytest_asyncio
|
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
import time
|
import time
|
||||||
import trustme
|
|
||||||
|
|
||||||
|
import httpx
|
||||||
|
import pytest
|
||||||
|
import pytest_asyncio
|
||||||
|
import trustme
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import pysqlite3 as sqlite3
|
import pysqlite3 as sqlite3
|
||||||
|
@ -41,6 +41,7 @@ def wait_until_responds(url, timeout=5.0, client=httpx, **kwargs):
|
||||||
@pytest_asyncio.fixture
|
@pytest_asyncio.fixture
|
||||||
async def ds_client():
|
async def ds_client():
|
||||||
from datasette.app import Datasette
|
from datasette.app import Datasette
|
||||||
|
|
||||||
from .fixtures import METADATA, PLUGINS_DIR
|
from .fixtures import METADATA, PLUGINS_DIR
|
||||||
|
|
||||||
global _ds_client
|
global _ds_client
|
||||||
|
@ -59,7 +60,7 @@ async def ds_client():
|
||||||
"num_sql_threads": 1,
|
"num_sql_threads": 1,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
from .fixtures import TABLES, TABLE_PARAMETERIZED_SQL
|
from .fixtures import TABLE_PARAMETERIZED_SQL, TABLES
|
||||||
|
|
||||||
db = ds.add_memory_database("fixtures")
|
db = ds.add_memory_database("fixtures")
|
||||||
ds.remove_database("_memory")
|
ds.remove_database("_memory")
|
||||||
|
|
|
@ -1,18 +1,19 @@
|
||||||
from datasette.app import Datasette
|
|
||||||
from datasette.utils.sqlite import sqlite3
|
|
||||||
from datasette.utils.testing import TestClient
|
|
||||||
import click
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import itertools
|
import itertools
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import pytest
|
|
||||||
import random
|
import random
|
||||||
import string
|
import string
|
||||||
import tempfile
|
import tempfile
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
|
import click
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from datasette.app import Datasette
|
||||||
|
from datasette.utils.sqlite import sqlite3
|
||||||
|
from datasette.utils.testing import TestClient
|
||||||
|
|
||||||
# This temp file is used by one of the plugin config tests
|
# This temp file is used by one of the plugin config tests
|
||||||
TEMP_PLUGIN_SECRET_FILE = os.path.join(tempfile.gettempdir(), "plugin-secret")
|
TEMP_PLUGIN_SECRET_FILE = os.path.join(tempfile.gettempdir(), "plugin-secret")
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
from datasette import hookimpl, Permission
|
|
||||||
from datasette.facets import Facet
|
|
||||||
from datasette import tracer
|
|
||||||
from datasette.utils import path_with_added_args
|
|
||||||
from datasette.utils.asgi import asgi_send_json, Response
|
|
||||||
import base64
|
import base64
|
||||||
import pint
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
import pint
|
||||||
|
|
||||||
|
from datasette import Permission, hookimpl, tracer
|
||||||
|
from datasette.facets import Facet
|
||||||
|
from datasette.utils import path_with_added_args
|
||||||
|
from datasette.utils.asgi import Response, asgi_send_json
|
||||||
|
|
||||||
ureg = pint.UnitRegistry()
|
ureg = pint.UnitRegistry()
|
||||||
|
|
||||||
|
|
||||||
|
@ -326,11 +327,7 @@ def startup(datasette):
|
||||||
datasette._startup_hook_fired = True
|
datasette._startup_hook_fired = True
|
||||||
|
|
||||||
# And test some import shortcuts too
|
# And test some import shortcuts too
|
||||||
from datasette import Response
|
from datasette import Forbidden, NotFound, Response, actor_matches_allow, hookimpl
|
||||||
from datasette import Forbidden
|
|
||||||
from datasette import NotFound
|
|
||||||
from datasette import hookimpl
|
|
||||||
from datasette import actor_matches_allow
|
|
||||||
|
|
||||||
_ = (Response, Forbidden, NotFound, hookimpl, actor_matches_allow)
|
_ = (Response, Forbidden, NotFound, hookimpl, actor_matches_allow)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
import json
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
import markupsafe
|
||||||
|
|
||||||
from datasette import hookimpl
|
from datasette import hookimpl
|
||||||
from datasette.utils.asgi import Response
|
from datasette.utils.asgi import Response
|
||||||
from functools import wraps
|
|
||||||
import markupsafe
|
|
||||||
import json
|
|
||||||
|
|
||||||
|
|
||||||
@hookimpl
|
@hookimpl
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
import json
|
||||||
|
|
||||||
from datasette import hookimpl
|
from datasette import hookimpl
|
||||||
from datasette.utils.asgi import Response
|
from datasette.utils.asgi import Response
|
||||||
import json
|
|
||||||
|
|
||||||
|
|
||||||
async def can_render(
|
async def can_render(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from datasette import hookimpl
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from datasette import hookimpl
|
||||||
|
|
||||||
|
|
||||||
@hookimpl
|
@hookimpl
|
||||||
def prepare_connection(conn):
|
def prepare_connection(conn):
|
||||||
|
|
|
@ -1,26 +1,29 @@
|
||||||
|
import pathlib
|
||||||
|
import sys
|
||||||
|
import urllib
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from datasette.app import Datasette
|
from datasette.app import Datasette
|
||||||
from datasette.plugins import DEFAULT_PLUGINS
|
from datasette.plugins import DEFAULT_PLUGINS
|
||||||
from datasette.utils.sqlite import supports_table_xinfo
|
from datasette.utils.sqlite import supports_table_xinfo
|
||||||
from datasette.version import __version__
|
from datasette.version import __version__
|
||||||
|
|
||||||
from .fixtures import ( # noqa
|
from .fixtures import ( # noqa
|
||||||
app_client,
|
|
||||||
app_client_no_files,
|
|
||||||
app_client_with_dot,
|
|
||||||
app_client_shorter_time_limit,
|
|
||||||
app_client_two_attached_databases_one_immutable,
|
|
||||||
app_client_larger_cache_size,
|
|
||||||
app_client_with_cors,
|
|
||||||
app_client_two_attached_databases,
|
|
||||||
app_client_conflicting_database_names,
|
|
||||||
app_client_immutable_and_inspect_file,
|
|
||||||
make_app_client,
|
|
||||||
EXPECTED_PLUGINS,
|
EXPECTED_PLUGINS,
|
||||||
METADATA,
|
METADATA,
|
||||||
|
app_client,
|
||||||
|
app_client_conflicting_database_names,
|
||||||
|
app_client_immutable_and_inspect_file,
|
||||||
|
app_client_larger_cache_size,
|
||||||
|
app_client_no_files,
|
||||||
|
app_client_shorter_time_limit,
|
||||||
|
app_client_two_attached_databases,
|
||||||
|
app_client_two_attached_databases_one_immutable,
|
||||||
|
app_client_with_cors,
|
||||||
|
app_client_with_dot,
|
||||||
|
make_app_client,
|
||||||
)
|
)
|
||||||
import pathlib
|
|
||||||
import pytest
|
|
||||||
import sys
|
|
||||||
import urllib
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from datasette.app import Datasette
|
from datasette.app import Datasette
|
||||||
from datasette.utils import sqlite3
|
from datasette.utils import sqlite3
|
||||||
import pytest
|
|
||||||
import time
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
import pytest
|
||||||
from bs4 import BeautifulSoup as Soup
|
from bs4 import BeautifulSoup as Soup
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from datasette.cli import cli
|
||||||
|
from datasette.utils import baseconv
|
||||||
|
|
||||||
from .fixtures import app_client
|
from .fixtures import app_client
|
||||||
from .utils import cookie_was_deleted
|
from .utils import cookie_was_deleted
|
||||||
from click.testing import CliRunner
|
|
||||||
from datasette.utils import baseconv
|
|
||||||
from datasette.cli import cli
|
|
||||||
import pytest
|
|
||||||
import time
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from datasette.views.base import View
|
import json
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from datasette import Request, Response
|
from datasette import Request, Response
|
||||||
from datasette.app import Datasette
|
from datasette.app import Datasette
|
||||||
import json
|
from datasette.views.base import View
|
||||||
import pytest
|
|
||||||
|
|
||||||
|
|
||||||
class GetView(View):
|
class GetView(View):
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
import black
|
|
||||||
from click.testing import CliRunner
|
|
||||||
from pathlib import Path
|
|
||||||
import pytest
|
|
||||||
import sys
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import black
|
||||||
|
import pytest
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
code_root = Path(__file__).parent.parent
|
code_root = Path(__file__).parent.parent
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from bs4 import BeautifulSoup as Soup
|
|
||||||
import json
|
import json
|
||||||
import pytest
|
|
||||||
import re
|
import re
|
||||||
from .fixtures import make_app_client, app_client
|
|
||||||
|
import pytest
|
||||||
|
from bs4 import BeautifulSoup as Soup
|
||||||
|
|
||||||
|
from .fixtures import app_client, make_app_client
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|
|
@ -1,25 +1,25 @@
|
||||||
from .fixtures import (
|
|
||||||
app_client,
|
|
||||||
make_app_client,
|
|
||||||
TestClient as _TestClient,
|
|
||||||
EXPECTED_PLUGINS,
|
|
||||||
)
|
|
||||||
import asyncio
|
import asyncio
|
||||||
from datasette.app import SETTINGS
|
|
||||||
from datasette.plugins import DEFAULT_PLUGINS
|
|
||||||
from datasette.cli import cli, serve
|
|
||||||
from datasette.version import __version__
|
|
||||||
from datasette.utils import tilde_encode
|
|
||||||
from datasette.utils.sqlite import sqlite3
|
|
||||||
from click.testing import CliRunner
|
|
||||||
import io
|
import io
|
||||||
import json
|
import json
|
||||||
import pathlib
|
import pathlib
|
||||||
import pytest
|
|
||||||
import sys
|
import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
from unittest import mock
|
|
||||||
import urllib
|
import urllib
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from datasette.app import SETTINGS
|
||||||
|
from datasette.cli import cli, serve
|
||||||
|
from datasette.plugins import DEFAULT_PLUGINS
|
||||||
|
from datasette.utils import tilde_encode
|
||||||
|
from datasette.utils.sqlite import sqlite3
|
||||||
|
from datasette.version import __version__
|
||||||
|
|
||||||
|
from .fixtures import EXPECTED_PLUGINS
|
||||||
|
from .fixtures import TestClient as _TestClient
|
||||||
|
from .fixtures import app_client, make_app_client
|
||||||
|
|
||||||
|
|
||||||
def test_inspect_cli(app_client):
|
def test_inspect_cli(app_client):
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
import json
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
from datasette.cli import cli, serve
|
from datasette.cli import cli, serve
|
||||||
from datasette.plugins import pm
|
from datasette.plugins import pm
|
||||||
from click.testing import CliRunner
|
|
||||||
import textwrap
|
|
||||||
import json
|
|
||||||
|
|
||||||
|
|
||||||
def test_serve_with_get(tmp_path_factory):
|
def test_serve_with_get(tmp_path_factory):
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
import socket
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
import pytest
|
import pytest
|
||||||
import socket
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.serial
|
@pytest.mark.serial
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
import json
|
import json
|
||||||
import pathlib
|
import pathlib
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
from datasette.app import Datasette
|
from datasette.app import Datasette
|
||||||
from datasette.cli import cli
|
from datasette.cli import cli
|
||||||
from datasette.utils.sqlite import sqlite3
|
|
||||||
from datasette.utils import StartupError
|
from datasette.utils import StartupError
|
||||||
|
from datasette.utils.sqlite import sqlite3
|
||||||
|
|
||||||
from .fixtures import TestClient as _TestClient
|
from .fixtures import TestClient as _TestClient
|
||||||
from click.testing import CliRunner
|
|
||||||
|
|
||||||
PLUGIN = """
|
PLUGIN = """
|
||||||
from datasette import hookimpl
|
from datasette import hookimpl
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
from datasette.cli import cli
|
|
||||||
from click.testing import CliRunner
|
|
||||||
import urllib
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
import urllib
|
||||||
|
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from datasette.cli import cli
|
||||||
|
|
||||||
from .fixtures import app_client_two_attached_databases_crossdb_enabled
|
from .fixtures import app_client_two_attached_databases_crossdb_enabled
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
from bs4 import BeautifulSoup as Soup
|
import urllib.parse
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from bs4 import BeautifulSoup as Soup
|
||||||
|
|
||||||
from .fixtures import ( # noqa
|
from .fixtures import ( # noqa
|
||||||
app_client,
|
app_client,
|
||||||
app_client_csv_max_mb_one,
|
app_client_csv_max_mb_one,
|
||||||
app_client_with_cors,
|
app_client_with_cors,
|
||||||
app_client_with_trace,
|
app_client_with_trace,
|
||||||
)
|
)
|
||||||
import urllib.parse
|
|
||||||
|
|
||||||
EXPECTED_TABLE_CSV = """id,content
|
EXPECTED_TABLE_CSV = """id,content
|
||||||
1,hello
|
1,hello
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import pathlib
|
import pathlib
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from .fixtures import make_app_client
|
from .fixtures import make_app_client
|
||||||
|
|
||||||
TEST_TEMPLATE_DIRS = str(pathlib.Path(__file__).parent / "test_templates")
|
TEST_TEMPLATE_DIRS = str(pathlib.Path(__file__).parent / "test_templates")
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
"""
|
"""
|
||||||
Tests to ensure certain things are documented.
|
Tests to ensure certain things are documented.
|
||||||
"""
|
"""
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import pytest
|
||||||
from click.testing import CliRunner
|
from click.testing import CliRunner
|
||||||
|
|
||||||
from datasette import app, utils
|
from datasette import app, utils
|
||||||
from datasette.cli import cli
|
from datasette.cli import cli
|
||||||
from datasette.filters import Filters
|
from datasette.filters import Filters
|
||||||
from pathlib import Path
|
|
||||||
import pytest
|
|
||||||
import re
|
|
||||||
|
|
||||||
docs_path = Path(__file__).parent.parent / "docs"
|
docs_path = Path(__file__).parent.parent / "docs"
|
||||||
label_re = re.compile(r"\.\. _([^\s:]+):")
|
label_re = re.compile(r"\.\. _([^\s:]+):")
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
|
import json
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from datasette.app import Datasette
|
from datasette.app import Datasette
|
||||||
from datasette.database import Database
|
from datasette.database import Database
|
||||||
from datasette.facets import ColumnFacet, ArrayFacet, DateFacet
|
from datasette.facets import ArrayFacet, ColumnFacet, DateFacet
|
||||||
from datasette.utils.asgi import Request
|
|
||||||
from datasette.utils import detect_json1
|
from datasette.utils import detect_json1
|
||||||
|
from datasette.utils.asgi import Request
|
||||||
|
|
||||||
from .fixtures import make_app_client
|
from .fixtures import make_app_client
|
||||||
import json
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
from datasette.filters import Filters, through_filters, where_filters, search_filters
|
|
||||||
from datasette.utils.asgi import Request
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from datasette.filters import Filters, search_filters, through_filters, where_filters
|
||||||
|
from datasette.utils.asgi import Request
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"args,expected_where,expected_params",
|
"args,expected_where,expected_params",
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
|
import json
|
||||||
|
import pathlib
|
||||||
|
import re
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
|
import pytest
|
||||||
from bs4 import BeautifulSoup as Soup
|
from bs4 import BeautifulSoup as Soup
|
||||||
|
|
||||||
from datasette.utils import allowed_pragmas
|
from datasette.utils import allowed_pragmas
|
||||||
|
|
||||||
from .fixtures import ( # noqa
|
from .fixtures import ( # noqa
|
||||||
|
METADATA,
|
||||||
app_client,
|
app_client,
|
||||||
app_client_base_url_prefix,
|
app_client_base_url_prefix,
|
||||||
app_client_shorter_time_limit,
|
app_client_shorter_time_limit,
|
||||||
app_client_two_attached_databases,
|
app_client_two_attached_databases,
|
||||||
make_app_client,
|
make_app_client,
|
||||||
METADATA,
|
|
||||||
)
|
)
|
||||||
from .utils import assert_footer_links, inner_html
|
from .utils import assert_footer_links, inner_html
|
||||||
import json
|
|
||||||
import pathlib
|
|
||||||
import pytest
|
|
||||||
import re
|
|
||||||
import urllib.parse
|
|
||||||
|
|
||||||
|
|
||||||
def test_homepage(app_client_two_attached_databases):
|
def test_homepage(app_client_two_attached_databases):
|
||||||
|
|
|
@ -1,14 +1,17 @@
|
||||||
"""
|
"""
|
||||||
Tests for the datasette.database.Database class
|
Tests for the datasette.database.Database class
|
||||||
"""
|
"""
|
||||||
from datasette.database import Database, Results, MultipleValues
|
|
||||||
from datasette.utils.sqlite import sqlite3
|
|
||||||
from datasette.utils import Column
|
|
||||||
from .fixtures import app_client, app_client_two_attached_databases_crossdb_enabled
|
|
||||||
import pytest
|
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from datasette.database import Database, MultipleValues, Results
|
||||||
|
from datasette.utils import Column
|
||||||
|
from datasette.utils.sqlite import sqlite3
|
||||||
|
|
||||||
|
from .fixtures import app_client, app_client_two_attached_databases_crossdb_enabled
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def db(app_client):
|
def db(app_client):
|
||||||
|
|
|
@ -2,12 +2,14 @@
|
||||||
Tests for the datasette.app.Datasette class
|
Tests for the datasette.app.Datasette class
|
||||||
"""
|
"""
|
||||||
import dataclasses
|
import dataclasses
|
||||||
from datasette import Forbidden, Context
|
|
||||||
from datasette.app import Datasette, Database
|
|
||||||
from itsdangerous import BadSignature
|
|
||||||
import pytest
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from itsdangerous import BadSignature
|
||||||
|
|
||||||
|
from datasette import Context, Forbidden
|
||||||
|
from datasette.app import Database, Datasette
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def datasette(ds_client):
|
def datasette(ds_client):
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
from datasette.utils.asgi import Request
|
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from datasette.utils.asgi import Request
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_request_post_vars():
|
async def test_request_post_vars():
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from datasette.utils.asgi import Response
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from datasette.utils.asgi import Response
|
||||||
|
|
||||||
|
|
||||||
def test_response_html():
|
def test_response_html():
|
||||||
response = Response.html("Hello from HTML")
|
response = Response.html("Hello from HTML")
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
from datasette.app import Datasette
|
from datasette.app import Datasette
|
||||||
from datasette.utils import PrefixedUrlString
|
from datasette.utils import PrefixedUrlString
|
||||||
import pytest
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
from datasette.app import Datasette
|
|
||||||
import pytest
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from datasette.app import Datasette
|
||||||
|
|
||||||
# not necessarily a full path - the full compiled path looks like "ext.dylib"
|
# not necessarily a full path - the full compiled path looks like "ext.dylib"
|
||||||
# or another suffix, but sqlite will, under the hood, decide which file
|
# or another suffix, but sqlite will, under the hood, decide which file
|
||||||
# extension to use based on the operating system (apple=dylib, windows=dll etc)
|
# extension to use based on the operating system (apple=dylib, windows=dll etc)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from .utils import cookie_was_deleted
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from .utils import cookie_was_deleted
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
from click.testing import CliRunner
|
|
||||||
from datasette import cli
|
|
||||||
from unittest import mock
|
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from datasette import cli
|
||||||
|
|
||||||
|
|
||||||
class CaptureDockerfile:
|
class CaptureDockerfile:
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
import collections
|
import collections
|
||||||
from datasette.app import Datasette
|
|
||||||
from datasette.cli import cli
|
|
||||||
from .fixtures import app_client, assert_permissions_checked, make_app_client
|
|
||||||
from click.testing import CliRunner
|
|
||||||
from bs4 import BeautifulSoup as Soup
|
|
||||||
import copy
|
import copy
|
||||||
import json
|
import json
|
||||||
from pprint import pprint
|
|
||||||
import pytest_asyncio
|
|
||||||
import pytest
|
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
import urllib
|
import urllib
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import pytest_asyncio
|
||||||
|
from bs4 import BeautifulSoup as Soup
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from datasette.app import Datasette
|
||||||
|
from datasette.cli import cli
|
||||||
|
|
||||||
|
from .fixtures import app_client, assert_permissions_checked, make_app_client
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
|
|
|
@ -1,21 +1,3 @@
|
||||||
from bs4 import BeautifulSoup as Soup
|
|
||||||
from .fixtures import (
|
|
||||||
app_client,
|
|
||||||
app_client,
|
|
||||||
make_app_client,
|
|
||||||
TABLES,
|
|
||||||
TEMP_PLUGIN_SECRET_FILE,
|
|
||||||
PLUGINS_DIR,
|
|
||||||
TestClient as _TestClient,
|
|
||||||
) # noqa
|
|
||||||
from click.testing import CliRunner
|
|
||||||
from datasette.app import Datasette
|
|
||||||
from datasette import cli, hookimpl, Permission
|
|
||||||
from datasette.filters import FilterArguments
|
|
||||||
from datasette.plugins import get_plugins, DEFAULT_PLUGINS, pm
|
|
||||||
from datasette.utils.sqlite import sqlite3
|
|
||||||
from datasette.utils import CustomRow, StartupError
|
|
||||||
from jinja2.environment import Template
|
|
||||||
import base64
|
import base64
|
||||||
import importlib
|
import importlib
|
||||||
import json
|
import json
|
||||||
|
@ -23,9 +5,24 @@ import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import re
|
import re
|
||||||
import textwrap
|
import textwrap
|
||||||
import pytest
|
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from bs4 import BeautifulSoup as Soup
|
||||||
|
from click.testing import CliRunner
|
||||||
|
from jinja2.environment import Template
|
||||||
|
|
||||||
|
from datasette import Permission, cli, hookimpl
|
||||||
|
from datasette.app import Datasette
|
||||||
|
from datasette.filters import FilterArguments
|
||||||
|
from datasette.plugins import DEFAULT_PLUGINS, get_plugins, pm
|
||||||
|
from datasette.utils import CustomRow, StartupError
|
||||||
|
from datasette.utils.sqlite import sqlite3
|
||||||
|
|
||||||
|
from .fixtures import PLUGINS_DIR, TABLES, TEMP_PLUGIN_SECRET_FILE
|
||||||
|
from .fixtures import TestClient as _TestClient # noqa
|
||||||
|
from .fixtures import app_client, make_app_client
|
||||||
|
|
||||||
at_memory_re = re.compile(r" at 0x\w+")
|
at_memory_re = re.compile(r" at 0x\w+")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
from click.testing import CliRunner
|
|
||||||
from datasette import cli
|
|
||||||
from unittest import mock
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pytest
|
|
||||||
import textwrap
|
import textwrap
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from datasette import cli
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.serial
|
@pytest.mark.serial
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
from click.testing import CliRunner
|
|
||||||
from datasette import cli
|
|
||||||
from unittest import mock
|
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from datasette import cli
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.serial
|
@pytest.mark.serial
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from datasette.app import Datasette, Database
|
|
||||||
from datasette.utils import resolve_routes
|
|
||||||
import pytest
|
import pytest
|
||||||
import pytest_asyncio
|
import pytest_asyncio
|
||||||
|
|
||||||
|
from datasette.app import Database, Datasette
|
||||||
|
from datasette.utils import resolve_routes
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session")
|
@pytest.fixture(scope="session")
|
||||||
def routes():
|
def routes():
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
from datasette.app import Datasette
|
|
||||||
from datasette.utils import find_spatialite, SpatialiteNotFound, SPATIALITE_FUNCTIONS
|
|
||||||
from .utils import has_load_extension
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from datasette.app import Datasette
|
||||||
|
from datasette.utils import SPATIALITE_FUNCTIONS, SpatialiteNotFound, find_spatialite
|
||||||
|
|
||||||
|
from .utils import has_load_extension
|
||||||
|
|
||||||
|
|
||||||
def has_spatialite():
|
def has_spatialite():
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,16 +1,19 @@
|
||||||
|
import json
|
||||||
|
import urllib
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from datasette.utils import detect_json1
|
from datasette.utils import detect_json1
|
||||||
from datasette.utils.sqlite import sqlite_version
|
from datasette.utils.sqlite import sqlite_version
|
||||||
|
|
||||||
from .fixtures import ( # noqa
|
from .fixtures import ( # noqa
|
||||||
app_client,
|
app_client,
|
||||||
app_client_with_trace,
|
|
||||||
app_client_returned_rows_matches_page_size,
|
app_client_returned_rows_matches_page_size,
|
||||||
|
app_client_with_trace,
|
||||||
generate_compound_rows,
|
generate_compound_rows,
|
||||||
generate_sortable_rows,
|
generate_sortable_rows,
|
||||||
make_app_client,
|
make_app_client,
|
||||||
)
|
)
|
||||||
import json
|
|
||||||
import pytest
|
|
||||||
import urllib
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
from datasette.app import Datasette, Database
|
|
||||||
from bs4 import BeautifulSoup as Soup
|
|
||||||
from .fixtures import ( # noqa
|
|
||||||
app_client,
|
|
||||||
make_app_client,
|
|
||||||
)
|
|
||||||
import pathlib
|
import pathlib
|
||||||
import pytest
|
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from bs4 import BeautifulSoup as Soup
|
||||||
|
|
||||||
|
from datasette.app import Database, Datasette
|
||||||
|
|
||||||
|
from .fixtures import app_client, make_app_client # noqa
|
||||||
from .utils import assert_footer_links, inner_html
|
from .utils import assert_footer_links, inner_html
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from .fixtures import make_app_client
|
from .fixtures import make_app_client
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
"""
|
"""
|
||||||
Tests for various datasette helper functions.
|
Tests for various datasette helper functions.
|
||||||
"""
|
"""
|
||||||
from datasette.app import Datasette
|
|
||||||
from datasette import utils
|
|
||||||
from datasette.utils.asgi import Request
|
|
||||||
from datasette.utils.sqlite import sqlite3
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
import pytest
|
|
||||||
import tempfile
|
import tempfile
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from datasette import utils
|
||||||
|
from datasette.app import Datasette
|
||||||
|
from datasette.utils.asgi import Request
|
||||||
|
from datasette.utils.sqlite import sqlite3
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"path,expected",
|
"path,expected",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from datasette.utils.check_callable import check_callable
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from datasette.utils.check_callable import check_callable
|
||||||
|
|
||||||
|
|
||||||
class AsyncClass:
|
class AsyncClass:
|
||||||
async def __call__(self):
|
async def __call__(self):
|
||||||
|
|
Ładowanie…
Reference in New Issue