{"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 267769431, "label": "Refactor to use class based views "}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 323658641, "label": "Add ?_extra= mechanism for requesting extra properties in JSON"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 443040665, "label": "Move \"no such module: VirtualSpatialIndex\" code elsewhere"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 448664792, "label": "Refactor database methods off Datasette class"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 448668204, "label": "Move detect_primary_keys to Database class method"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 448978907, "label": "Rename InterruptedError exception class"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 459509126, "label": "Enforce import sort order with isort"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 459622390, "label": "Handle case-insensitive headers in a nicer way"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 460540321, "label": "Extract codemirror SQL editor out into a plugin"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 502355384, "label": "Testing utilities should be available to plugins"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 519613116, "label": "Refactor TableView.data() method"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 531755959, "label": "Move hashed URL mode out to a plugin"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 593006814, "label": "Refactor duplicate cell display logic"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 626078521, "label": "Consolidate request.raw_args and request.args"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 626131309, "label": "Move test plugins into datasette/tests/plugins/ directory"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 629459637, "label": "Replace response.body.decode(\"utf8\") with response.text in tests"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 629541395, "label": "response.set_cookie() method"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 633066114, "label": "Refactor permission check for canned query"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 634651079, "label": "Remove --debug option from datasette serve"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 634844634, "label": "Drop resource_type from permission_allowed system"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 646737558, "label": "Refactor default views to use register_routes"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 648435885, "label": "New pattern for views that return either JSON or HTML, available for plugins"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 648659536, "label": "Figure out why restore_working_directory is needed in some places"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 663228985, "label": "datasette.urls.table() / .instance() / .database() methods for constructing URLs, also exposed to templates"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 671763164, "label": "Refactor TableView class so things like datasette-graphql can reuse the logic"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 687694947, "label": "Remove old register_output_renderer dict mechanism in Datasette 1.0"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 688622148, "label": "Simplify imports of common classes"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 691475400, "label": "Upgrade to latest Black (20.8b1)"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 718255803, "label": "Replace MockRequest with Request.fake()"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 725743755, "label": "datasette.urls.table(..., format=\"json\") argument"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 730210880, "label": "query.html and table.html should share the same table implementation"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 732674148, "label": "Refactor .csv to be an output renderer - and teach register_output_renderer to stream all rows"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 733560417, "label": "Remove load_template plugin hook"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 735644513, "label": "Fixtures should use FTS4 or FTS5, not FTS3"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 749982022, "label": "Rebrand config as settings"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 750079085, "label": "Rename datasette.config() method to datasette.setting()"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 772438273, "label": "Use time.perf_counter() instead of time.time() to measure performance"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 779691739, "label": "Policy on documenting \"public\" datasette.utils functions"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 782708469, "label": "Take advantage of sqlite-utils cached table counts, if available"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 789336592, "label": "view_name = \"query\" for the query page"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 903902495, "label": "Improve `path_with_replaced_args()` and friends and document them"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 913017577, "label": "pathlib.Path breaks internal schema"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 913809802, "label": "Get rid of this `restore_working_directory` hack entirely"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 957302085, "label": "Review places in codebase that use os.chdir(), in particularly relating to tests"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 957315684, "label": "Rename settings to `default_allow_facet` and `default_allow_download` and `default_allow_csv_stream`"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 969855774, "label": "Rename Datasette.__init__(config=) parameter to settings="}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 994390593, "label": "Faceting for custom SQL queries"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1058072543, "label": "Complete refactor of TableView and table.html template"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1059209412, "label": "Come up with a more elegant solution for base_url than ds.urls.path()"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1077893013, "label": "`keep_blank_values=True` when parsing `request.args`"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1079129258, "label": "TableView refactor"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1082743068, "label": "filters_from_request plugin hook, now used in TableView"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1083573206, "label": "Datasette(... files=) should not be a required argument"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1083718998, "label": "Remove undocumented sqlite_functions mechanism"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1161584460, "label": "Get rid of the no-longer necessary ?_format=json hack for tables called x.json"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1169840669, "label": "Revert main to version that passes tests"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1170144879, "label": "Refactor and simplify Datasette routing and views"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1170355774, "label": "Remove Hashed URL mode"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1174162781, "label": "Refactor URL routing to enable testing"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1174302994, "label": "Make route matched pattern groups more consistent"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1174697144, "label": "Refactor CSV handling code out of DataView"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1175648453, "label": "Extract out `check_permissions()` from `BaseView"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1175694248, "label": "Remove `check_permission()` from `BaseView`"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1175715988, "label": "Make `check_visibility()` a documented API"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1200650491, "label": "Template context powered entirely by the JSON API format"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1212823665, "label": "Refactor TableView to use asyncinject"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1214859703, "label": "Refactor `RowView` and remove `RowTableShared`"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1219385669, "label": "Implement ?_extra and new API design for TableView"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1223241647, "label": "Remove python-baseconv dependency"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1223263540, "label": "Datasette setting to disable threading (for Pyodide)"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1386854246, "label": "Switch to keyword-only arguments for a bunch of internal methods"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1386917344, "label": "Keyword-only arguments for a bunch of internal methods"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1396948693, "label": "Table/database that is private due to inherited permissions does not show padlock"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1406860394, "label": "Drop format_bytes for Jinja filesizeformat filter"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1432012302, "label": "Refactor and tidy up final write API code"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1452364777, "label": "Extract logic for resolving a URL to a database / table / row"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1455928469, "label": "Refactor all error classes into a datasette.exceptions module"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1456013930, "label": "Extract publish Heroku support to a plugin"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1500636982, "label": "Alternative, async-friendly pattern for `make_app_client()` and similar - fully retire `TestClient`"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1551694938, "label": "?_extra= support (draft)"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1573424830, "label": "Refactor out the keyset pagination code"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1633077183, "label": "Remove obsolete table POST code"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1646734246, "label": "Custom SQL queries should use new JSON ?_extra= format"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1662951875, "label": "DeprecationWarning: pkg_resources is deprecated as an API"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1665510265, "label": "Clean up a bunch of warnings from ruff"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1726236847, "label": "Resolve the difference between `wrap_view()` and `BaseView`"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1726603778, "label": "New View base class"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1781005740, "label": "Adopt ruff for linting"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1822936521, "label": "Merge database index page and query view"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1822937426, "label": "Implement new /content.json?sql=..."}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1822938661, "label": "Build HTML version of /content?sql=..."}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1822940263, "label": "Implement canned queries against new query JSON work"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1822940964, "label": "Ensure all tests pass against new query view JSON"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1822949756, "label": "Turn DatabaseDownload into an async view function"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1822982933, "label": "Figure out what to do about `DatabaseView.name`"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1823352380, "label": "New JSON design for query views"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1823428714, "label": "Add __all__ to datasette/__init__.py"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1838469176, "label": "Context base class to support documenting the context"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1840417903, "label": "Refactor code that supports templates_considered comment"}} {"labels_id": {"value": 1379448359, "label": "refactor"}, "issues_id": {"value": 1872043170, "label": "Rename core_X to catalog_X in the internals"}}