issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
issue >30
- Port Datasette to ASGI 42
- Authentication (and permissions) as a core concept 40
- Ability to sort (and paginate) by column 31
- link_or_copy_directory() error - Invalid cross-device link 28
- Export to CSV 27
- base_url configuration setting 27
- Documentation with recommendations on running Datasette in production without using Docker 26
- Ability for a canned query to write to the database 26
- Redesign register_output_renderer callback 24
- Proof of concept for Datasette on AWS Lambda with EFS 24
- Datasette Plugins 22
- "flash messages" mechanism 20
- Handle spatialite geometry columns better 19
- Facets 16
- Support "allow" block on root, databases and tables, not just queries 16
- Bug: Sort by column with NULL in next_page URL 15
- Support cross-database joins 15
- The ".upsert()" method is misnamed 15
- --dirs option for scanning directories for SQLite databases 15
- Document (and reconsider design of) Database.execute() and Database.execute_against_connection_in_thread() 15
- latest.datasette.io is no longer updating 15
- Ability to customize presentation of specific columns in HTML view 14
- Allow plugins to define additional URL routes and views 14
- Mechanism for customizing the SQL used to select specific columns in the table view 14
- .execute_write() and .execute_write_fn() methods on Database 14
- Upload all my photos to a secure S3 bucket 14
- Canned query permissions mechanism 14
- Dockerfile should build more recent SQLite with FTS5 and spatialite support 13
- Fix all the places that currently use .inspect() data 13
- Mechanism for adding arbitrary pages like /about 13
- …
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
645067611 | https://github.com/simonw/datasette/issues/236#issuecomment-645067611 | https://api.github.com/repos/simonw/datasette/issues/236 | MDEyOklzc3VlQ29tbWVudDY0NTA2NzYxMQ== | simonw 9599 | 2020-06-16T23:50:12Z | 2020-06-16T23:50:59Z | OWNER | As for your other questions:
Yes, exactly. I know this will limit the size of database that can be deployed (since Lambda has a 50MB total package limit as far as I can tell) but there are plenty of interesting databases that are small enough to fit there. The new EFS support for Lambda means that theoretically the size of database is now unlimited, which is really interesting. That's what got me inspired to take a look at a proof of concept in #850.
I personally like scale-to-zero because many of my projects are likely to receive very little traffic. So API GW first, and maybe ALB as an option later on for people operating at scale?
As you've found, the only native component is uvloop which is only needed if uvicorn is being used to serve requests.
For the eventual "datasette publish lambda" command I want whatever results in the smallest amount of inconvenience for users. I've been trying out Amazon SAM in #850 and it requires users to run Docker on their machines, which is a pretty huge barrier to entry! I don't have much experience with CloudFormation but it's probably a better bet, especially if you can "pip install" the dependencies needed to deploy with it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette publish lambda plugin 317001500 | |
645066486 | https://github.com/simonw/datasette/issues/236#issuecomment-645066486 | https://api.github.com/repos/simonw/datasette/issues/236 | MDEyOklzc3VlQ29tbWVudDY0NTA2NjQ4Ng== | simonw 9599 | 2020-06-16T23:45:45Z | 2020-06-16T23:45:45Z | OWNER | Hi Colin, Sorry I didn't see this sooner! I've just started digging into this myself, to try and play with the new EFS Lambda support: #850. Yes, uvloop is only needed because of uvicorn. I have a branch here that removes that dependency just for trying out Lambda: https://github.com/simonw/datasette/tree/no-uvicorn - so you can run I'm going to try out your |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette publish lambda plugin 317001500 | |
645064332 | https://github.com/simonw/datasette/issues/850#issuecomment-645064332 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA2NDMzMg== | simonw 9599 | 2020-06-16T23:37:34Z | 2020-06-16T23:37:34Z | OWNER | Just realized Colin Dellow reported an issue with Datasette and Mangum back in April - #719 - and has in fact been working on https://github.com/code402/datasette-lambda for a while! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645063386 | https://github.com/simonw/datasette/issues/850#issuecomment-645063386 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA2MzM4Ng== | simonw 9599 | 2020-06-16T23:34:07Z | 2020-06-16T23:34:07Z | OWNER | Tried Fetching lambci/lambda:python3.8 Docker container image...... Mounting /private/tmp/datasette-proof-of-concept/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container START RequestId: 7c04480b-5d42-168e-dec0-4e8bf34fa596 Version: $LATEST [INFO] 2020-06-16T23:33:27.24Z 7c04480b-5d42-168e-dec0-4e8bf34fa596 Waiting for application startup. [INFO] 2020-06-16T23:33:27.24Z 7c04480b-5d42-168e-dec0-4e8bf34fa596 LifespanCycleState.STARTUP: 'lifespan.startup.complete' event received from application. [INFO] 2020-06-16T23:33:27.24Z 7c04480b-5d42-168e-dec0-4e8bf34fa596 Application startup complete. [INFO] 2020-06-16T23:33:27.24Z 7c04480b-5d42-168e-dec0-4e8bf34fa596 Waiting for application shutdown. [INFO] 2020-06-16T23:33:27.24Z 7c04480b-5d42-168e-dec0-4e8bf34fa596 LifespanCycleState.SHUTDOWN: 'lifespan.shutdown.complete' event received from application. [ERROR] KeyError: 'requestContext' Traceback (most recent call last): File "/var/task/mangum/adapter.py", line 110, in call return self.handler(event, context) File "/var/task/mangum/adapter.py", line 130, in handler if "eventType" in event["requestContext"]: END RequestId: 7c04480b-5d42-168e-dec0-4e8bf34fa596 REPORT RequestId: 7c04480b-5d42-168e-dec0-4e8bf34fa596 Init Duration: 1120.76 ms Duration: 7.08 ms Billed Duration: 100 ms Memory Size: 128 MBMax Memory Used: 47 MB {"errorType":"KeyError","errorMessage":"'requestContext'","stackTrace":[" File \"/var/task/mangum/adapter.py\", line 110, in call\n return self.handler(event, context)\n"," File \"/var/task/mangum/adapter.py\", line 130, in handler\n if \"eventType\" in event[\"requestContext\"]:\n"]} ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645062266 | https://github.com/simonw/datasette/issues/850#issuecomment-645062266 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA2MjI2Ng== | simonw 9599 | 2020-06-16T23:30:12Z | 2020-06-16T23:33:12Z | OWNER | OK, changed |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645063058 | https://github.com/simonw/datasette/issues/850#issuecomment-645063058 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA2MzA1OA== | simonw 9599 | 2020-06-16T23:32:57Z | 2020-06-16T23:32:57Z | OWNER | https://q7lymja3sj.execute-api.us-east-1.amazonaws.com/Prod/hello/ is now giving me a 500 internal server error. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645061088 | https://github.com/simonw/datasette/issues/850#issuecomment-645061088 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA2MTA4OA== | simonw 9599 | 2020-06-16T23:25:41Z | 2020-06-16T23:25:41Z | OWNER | Someone else ran into this problem: https://github.com/iwpnd/fastapi-aws-lambda-example/issues/1 So I need to be able to pip install MOST of Datasette, but skip |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645060598 | https://github.com/simonw/datasette/issues/850#issuecomment-645060598 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA2MDU5OA== | simonw 9599 | 2020-06-16T23:24:01Z | 2020-06-16T23:24:01Z | OWNER | I changed datasette = Datasette([], memory=True)
lambda_handler = Mangum(datasette.app())
Fetching lambci/lambda:build-python3.8 Docker container image...... Mounting /private/tmp/datasette-proof-of-concept/hello_world as /tmp/samcli/source:ro,delegated inside runtime container Build Failed
Running PythonPipBuilder:ResolveDependencies
Error: PythonPipBuilder:ResolveDependencies - {uvloop==0.14.0(wheel)}
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645059663 | https://github.com/simonw/datasette/issues/850#issuecomment-645059663 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1OTY2Mw== | simonw 9599 | 2020-06-16T23:20:46Z | 2020-06-16T23:20:46Z | OWNER | I added an exclamation mark to hello world and ran Running |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645058947 | https://github.com/simonw/datasette/issues/850#issuecomment-645058947 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1ODk0Nw== | simonw 9599 | 2020-06-16T23:18:18Z | 2020-06-16T23:18:18Z | OWNER | https://q7lymja3sj.execute-api.us-east-1.amazonaws.com/Prod/hello/ That's a pretty ugly URL. I'm not sure how to get rid of the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645058617 | https://github.com/simonw/datasette/issues/850#issuecomment-645058617 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1ODYxNw== | simonw 9599 | 2020-06-16T23:17:09Z | 2020-06-16T23:17:09Z | OWNER | OK, Configuring SAM deploy
Initiating deploymentUploading to datasette-proof-of-concept/0c208b5656a7aeb6186d49bebc595237 535344 / 535344.0 (100.00%) HelloWorldFunction may not have authorization defined. Uploading to datasette-proof-of-concept/14bd9ce3e21f9c88634d13c0c9b377e4.template 1147 / 1147.0 (100.00%) Waiting for changeset to be created.. CloudFormation stack changesetOperation LogicalResourceId ResourceType
Changeset created successfully. arn:aws:cloudformation:us-east-1:462092780466:changeSet/samcli-deploy1592349262/d685f2de-87c1-4b8e-b13a-67b94f8fc928 2020-06-16 16:14:29 - Waiting for stack create/update to complete CloudFormation events from changesetResourceStatus ResourceType LogicalResourceId ResourceStatusReasonCREATE_IN_PROGRESS AWS::IAM::Role HelloWorldFunctionRole - CloudFormation outputs from deployed stackOutputsKey HelloWorldFunctionIamRole Key HelloWorldApi Key HelloWorldFunction Successfully created/updated stack - datasette-proof-of-concept in us-east-1 ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645056636 | https://github.com/simonw/datasette/issues/850#issuecomment-645056636 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1NjYzNg== | simonw 9599 | 2020-06-16T23:10:22Z | 2020-06-16T23:10:22Z | OWNER | Clicking that button generated me an access key ID / access key secret pair. Dropping those into |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645055200 | https://github.com/simonw/datasette/issues/850#issuecomment-645055200 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1NTIwMA== | simonw 9599 | 2020-06-16T23:05:48Z | 2020-06-16T23:05:48Z | OWNER | Logged in as |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645054206 | https://github.com/simonw/datasette/issues/850#issuecomment-645054206 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1NDIwNg== | simonw 9599 | 2020-06-16T23:02:54Z | 2020-06-16T23:04:59Z | OWNER | I think I need to sign in to the AWS console with this new ... for which I needed my root "account ID" - a 12 digit number - to use on the IAM login form. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645053923 | https://github.com/simonw/datasette/issues/850#issuecomment-645053923 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1MzkyMw== | simonw 9599 | 2020-06-16T23:01:49Z | 2020-06-16T23:01:49Z | OWNER | I used https://console.aws.amazon.com/billing/home?#/account and activated "IAM user/role access to billing information" - what a puzzling first step! I created a new user with AWS console access (which means access to the web UI) called |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645051972 | https://github.com/simonw/datasette/issues/850#issuecomment-645051972 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1MTk3Mg== | simonw 9599 | 2020-06-16T22:55:04Z | 2020-06-16T22:55:04Z | OWNER | ``` simon@Simons-MacBook-Pro datasette-proof-of-concept % sam deploy --guided Configuring SAM deploy
Error: Failed to create managed resources: Unable to locate credentials ``` I need to get my AWS credentials sorted. I'm going to follow https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html and https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-set-up-credentials.html |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645051370 | https://github.com/simonw/datasette/issues/850#issuecomment-645051370 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1MTM3MA== | simonw 9599 | 2020-06-16T22:53:05Z | 2020-06-16T22:53:05Z | OWNER | ``` simon@Simons-MacBook-Pro datasette-proof-of-concept % sam local invoke Invoking app.lambda_handler (python3.8) Fetching lambci/lambda:python3.8 Docker container image.................................................................................................................................................................................................................................... Mounting /private/tmp/datasette-proof-of-concept/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container START RequestId: 4616ab43-6882-1627-e5e3-5a29730d52f9 Version: $LATEST END RequestId: 4616ab43-6882-1627-e5e3-5a29730d52f9 REPORT RequestId: 4616ab43-6882-1627-e5e3-5a29730d52f9 Init Duration: 140.84 ms Duration: 2.49 ms Billed Duration: 100 ms Memory Size: 128 MBMax Memory Used: 25 MB {"statusCode":200,"body":"{\"message\": \"hello world\"}"} simon@Simons-MacBook-Pro datasette-proof-of-concept % sam local invoke Invoking app.lambda_handler (python3.8) Fetching lambci/lambda:python3.8 Docker container image...... Mounting /private/tmp/datasette-proof-of-concept/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container START RequestId: 3189df2f-e9c0-1be4-b9ac-f329c5fcd067 Version: $LATEST END RequestId: 3189df2f-e9c0-1be4-b9ac-f329c5fcd067 REPORT RequestId: 3189df2f-e9c0-1be4-b9ac-f329c5fcd067 Init Duration: 87.22 ms Duration: 2.34 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 25 MB {"statusCode":200,"body":"{\"message\": \"hello world\"}"} ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645050948 | https://github.com/simonw/datasette/issues/850#issuecomment-645050948 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA1MDk0OA== | simonw 9599 | 2020-06-16T22:51:30Z | 2020-06-16T22:52:30Z | OWNER | ``` simon@Simons-MacBook-Pro datasette-proof-of-concept % sam build --use-container Starting Build inside a container Building function 'HelloWorldFunction' Fetching lambci/lambda:build-python3.8 Docker container image.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Mounting /private/tmp/datasette-proof-of-concept/hello_world as /tmp/samcli/source:ro,delegated inside runtime container Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next[] Invoke Function: sam local invoke [] Deploy: sam deploy --guided Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645048062 | https://github.com/simonw/datasette/issues/850#issuecomment-645048062 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA0ODA2Mg== | simonw 9599 | 2020-06-16T22:41:33Z | 2020-06-16T22:41:33Z | OWNER | ``` simon@Simons-MacBook-Pro /tmp % sam init
Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice: 1 Which runtime would you like to use? 1 - nodejs12.x 2 - python3.8 3 - ruby2.7 4 - go1.x 5 - java11 6 - dotnetcore3.1 7 - nodejs10.x 8 - python3.7 9 - python3.6 10 - python2.7 11 - ruby2.5 12 - java8 13 - dotnetcore2.1 Runtime: 2 Project name [sam-app]: datasette-proof-of-concept Cloning app templates from https://github.com/awslabs/aws-sam-cli-app-templates.git AWS quick start application templates: 1 - Hello World Example 2 - EventBridge Hello World 3 - EventBridge App from scratch (100+ Event Schemas) 4 - Step Functions Sample App (Stock Trader) Template selection: 1 Generating application:Name: datasette-proof-of-concept Runtime: python3.8 Dependency Manager: pip Application Template: hello-world Output Directory: . Next steps can be found in the README file at ./datasette-proof-of-concept/README.md ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645047703 | https://github.com/simonw/datasette/issues/850#issuecomment-645047703 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA0NzcwMw== | simonw 9599 | 2020-06-16T22:40:19Z | 2020-06-16T22:40:19Z | OWNER | Installed SAM:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645045055 | https://github.com/simonw/datasette/issues/850#issuecomment-645045055 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA0NTA1NQ== | simonw 9599 | 2020-06-16T22:31:49Z | 2020-06-16T22:31:49Z | OWNER | It looks like SAM - AWS Serverless Application Model - is the currently recommended way to deploy Python apps to Lambda from the command-line: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645042625 | https://github.com/simonw/datasette/issues/850#issuecomment-645042625 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA0MjYyNQ== | simonw 9599 | 2020-06-16T22:24:26Z | 2020-06-16T22:24:26Z | OWNER | From https://mangum.io/adapter/
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645041663 | https://github.com/simonw/datasette/issues/850#issuecomment-645041663 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTA0MTY2Mw== | simonw 9599 | 2020-06-16T22:21:44Z | 2020-06-16T22:21:44Z | OWNER | https://github.com/jordaneremieff/mangum looks like the best way to run an ASGI app on Lambda at the moment. ```python from mangum import Mangum async def app(scope, receive, send): await send( { "type": "http.response.start", "status": 200, "headers": [[b"content-type", b"text/plain; charset=utf-8"]], } ) await send({"type": "http.response.body", "body": b"Hello, world!"}) handler = Mangum(app) ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645032643 | https://github.com/simonw/datasette/issues/850#issuecomment-645032643 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTAzMjY0Mw== | simonw 9599 | 2020-06-16T21:57:10Z | 2020-06-16T21:57:10Z | OWNER | https://docs.aws.amazon.com/efs/latest/ug/wt1-getting-started.html is an EFS walk-through using the AWS CLI tool instead of clicking around in their web interface. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645031225 | https://github.com/simonw/datasette/issues/850#issuecomment-645031225 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTAzMTIyNQ== | simonw 9599 | 2020-06-16T21:53:25Z | 2020-06-16T21:53:25Z | OWNER | Easier solution to this might be to have two functions - a "read-only" one which is allowed to scale as much as it likes, and a "write-only" one which can write to the database files but is limited to running a maximum of one Lambda instance. https://docs.aws.amazon.com/lambda/latest/dg/invocation-scaling.html |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
645030262 | https://github.com/simonw/datasette/issues/850#issuecomment-645030262 | https://api.github.com/repos/simonw/datasette/issues/850 | MDEyOklzc3VlQ29tbWVudDY0NTAzMDI2Mg== | simonw 9599 | 2020-06-16T21:51:01Z | 2020-06-16T21:51:39Z | OWNER | File locking is interesting here. https://docs.aws.amazon.com/lambda/latest/dg/services-efs.html
SQLite can apparently work on NFS v4.1. I think I'd rather set things up so there's only ever one writer - so a Datasette instance could scale reads by running lots more lambda functions but only one function ever writes to a file at a time. Not sure if that's feasible with Lambda though - maybe by adding some additional shared state mechanism like Redis? |
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 } |
Proof of concept for Datasette on AWS Lambda with EFS 639993467 | |
644987083 | https://github.com/simonw/datasette/issues/690#issuecomment-644987083 | https://api.github.com/repos/simonw/datasette/issues/690 | MDEyOklzc3VlQ29tbWVudDY0NDk4NzA4Mw== | simonw 9599 | 2020-06-16T20:11:35Z | 2020-06-16T20:11:35Z | OWNER | Twitter conversation about drop-down menu solutions that are accessible, fast loading and use minimal JavaScript: https://twitter.com/simonw/status/1272974294545395712 I really like the approach taken by GitHub Primer, which builds on top of HTML |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for plugins to add action menu items for various things 573755726 | |
644584075 | https://github.com/simonw/datasette/issues/849#issuecomment-644584075 | https://api.github.com/repos/simonw/datasette/issues/849 | MDEyOklzc3VlQ29tbWVudDY0NDU4NDA3NQ== | simonw 9599 | 2020-06-16T07:24:08Z | 2020-06-16T07:24:08Z | OWNER | This guide is fantastic - I'll be following it closely: https://github.com/chancancode/branch-rename/blob/main/README.md - in particular the Action to mirror master and main for a while. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Rename master branch to main 639072811 | |
644384787 | https://github.com/simonw/datasette/issues/849#issuecomment-644384787 | https://api.github.com/repos/simonw/datasette/issues/849 | MDEyOklzc3VlQ29tbWVudDY0NDM4NDc4Nw== | simonw 9599 | 2020-06-15T20:56:07Z | 2020-06-15T20:56:19Z | OWNER | The big question is how this impacts existing CI configuration. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Rename master branch to main 639072811 | |
644384417 | https://github.com/simonw/datasette/issues/849#issuecomment-644384417 | https://api.github.com/repos/simonw/datasette/issues/849 | MDEyOklzc3VlQ29tbWVudDY0NDM4NDQxNw== | simonw 9599 | 2020-06-15T20:55:23Z | 2020-06-15T20:55:23Z | OWNER | I'm doing https://github.com/simonw/datasette-psutil first. In my local checkout:
Then in https://github.com/simonw/datasette-psutil/settings/branches I changed the default branch to Links to these docs: https://help.github.com/en/github/administering-a-repository/setting-the-default-branch That worked! https://github.com/simonw/datasette-psutil One catch, which I think will impact my most widely used repos the most (like datasette) - linking to a specific file now looks like this: https://github.com/simonw/datasette-psutil/blob/main/datasette_psutil/init.py The old https://github.com/simonw/datasette-psutil/blob/master/datasette_psutil/init.py link is presumably frozen in time? I've definitely got links spread around the web to my "most recent version of this code" that would use the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Rename master branch to main 639072811 | |
644322234 | https://github.com/simonw/datasette/issues/849#issuecomment-644322234 | https://api.github.com/repos/simonw/datasette/issues/849 | MDEyOklzc3VlQ29tbWVudDY0NDMyMjIzNA== | simonw 9599 | 2020-06-15T19:06:16Z | 2020-06-15T19:06:16Z | OWNER | I'll make this change on a few of my other repos first to make sure I haven't missed any tricky edge-cases. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Rename master branch to main 639072811 | |
643709037 | https://github.com/simonw/datasette/issues/691#issuecomment-643709037 | https://api.github.com/repos/simonw/datasette/issues/691 | MDEyOklzc3VlQ29tbWVudDY0MzcwOTAzNw== | amjith 49260 | 2020-06-14T02:35:16Z | 2020-06-14T02:35:16Z | CONTRIBUTOR | The server should reload in the Ref: #848 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--reload sould reload server if code in --plugins-dir changes 574021194 | |
643704730 | https://github.com/simonw/datasette/issues/847#issuecomment-643704730 | https://api.github.com/repos/simonw/datasette/issues/847 | MDEyOklzc3VlQ29tbWVudDY0MzcwNDczMA== | simonw 9599 | 2020-06-14T01:28:34Z | 2020-06-14T01:28:34Z | OWNER | Here's the plugin that adds those custom SQLite functions: ```python from datasette import hookimpl from coverage.numbits import register_sqlite_functions @hookimpl def prepare_connection(conn): register_sqlite_functions(conn) ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Take advantage of .coverage being a SQLite database 638259643 | |
643704565 | https://github.com/simonw/datasette/issues/847#issuecomment-643704565 | https://api.github.com/repos/simonw/datasette/issues/847 | MDEyOklzc3VlQ29tbWVudDY0MzcwNDU2NQ== | simonw 9599 | 2020-06-14T01:26:56Z | 2020-06-14T01:26:56Z | OWNER | On closer inspection, I don't know if there's that much useful stuff you can do with the data from Consider the following query against a
It looks like this tells me which lines of which files were executed during the test run. But... without the actual source code, I don't think I can calculate the coverage percentage for each file. I don't want to count comment lines or whitespace as untested for example, and I don't know how many lines were in the file. If I'm right that it's not possible to calculate percentage coverage from just the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Take advantage of .coverage being a SQLite database 638259643 | |
643702715 | https://github.com/simonw/datasette/issues/847#issuecomment-643702715 | https://api.github.com/repos/simonw/datasette/issues/847 | MDEyOklzc3VlQ29tbWVudDY0MzcwMjcxNQ== | simonw 9599 | 2020-06-14T01:03:30Z | 2020-06-14T01:03:40Z | OWNER | Filed a related issue with some ideas against |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Take advantage of .coverage being a SQLite database 638259643 | |
643699583 | https://github.com/simonw/datasette/issues/846#issuecomment-643699583 | https://api.github.com/repos/simonw/datasette/issues/846 | MDEyOklzc3VlQ29tbWVudDY0MzY5OTU4Mw== | simonw 9599 | 2020-06-14T00:26:31Z | 2020-06-14T00:26:31Z | OWNER | That seems to have fixed the problem, at least for the moment. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Too many open files" error running tests 638241779 | |
643699063 | https://github.com/simonw/datasette/issues/846#issuecomment-643699063 | https://api.github.com/repos/simonw/datasette/issues/846 | MDEyOklzc3VlQ29tbWVudDY0MzY5OTA2Mw== | simonw 9599 | 2020-06-14T00:22:32Z | 2020-06-14T00:22:32Z | OWNER | Idea: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Too many open files" error running tests 638241779 | |
643698790 | https://github.com/simonw/datasette/issues/846#issuecomment-643698790 | https://api.github.com/repos/simonw/datasette/issues/846 | MDEyOklzc3VlQ29tbWVudDY0MzY5ODc5MA== | simonw 9599 | 2020-06-14T00:20:42Z | 2020-06-14T00:20:42Z | OWNER | Released a new plugin, |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Too many open files" error running tests 638241779 | |
643685669 | https://github.com/simonw/datasette/issues/846#issuecomment-643685669 | https://api.github.com/repos/simonw/datasette/issues/846 | MDEyOklzc3VlQ29tbWVudDY0MzY4NTY2OQ== | simonw 9599 | 2020-06-13T22:24:22Z | 2020-06-13T22:24:22Z | OWNER | I tried this experiment:
Likewise: ``` In [11]: conn = sqlite3.connect("fixtures.db") In [12]: psutil.Process().open_files() In [13]: del conn In [14]: psutil.Process().open_files() |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Too many open files" error running tests 638241779 | |
643685333 | https://github.com/simonw/datasette/issues/846#issuecomment-643685333 | https://api.github.com/repos/simonw/datasette/issues/846 | MDEyOklzc3VlQ29tbWVudDY0MzY4NTMzMw== | simonw 9599 | 2020-06-13T22:19:38Z | 2020-06-13T22:19:38Z | OWNER | That's 91 open files but only 29 unique filenames. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Too many open files" error running tests 638241779 | |
643685207 | https://github.com/simonw/datasette/issues/846#issuecomment-643685207 | https://api.github.com/repos/simonw/datasette/issues/846 | MDEyOklzc3VlQ29tbWVudDY0MzY4NTIwNw== | simonw 9599 | 2020-06-13T22:18:01Z | 2020-06-13T22:18:01Z | OWNER | This shows currently open files (after I ran it inside
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Too many open files" error running tests 638241779 | |
643681747 | https://github.com/simonw/datasette/issues/841#issuecomment-643681747 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY4MTc0Nw== | simonw 9599 | 2020-06-13T21:38:46Z | 2020-06-13T21:38:46Z | OWNER | Closing this because I've researched feasibility. I may start a milestone in the future to help me get to 100%. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643681517 | https://github.com/simonw/datasette/pull/844#issuecomment-643681517 | https://api.github.com/repos/simonw/datasette/issues/844 | MDEyOklzc3VlQ29tbWVudDY0MzY4MTUxNw== | simonw 9599 | 2020-06-13T21:36:15Z | 2020-06-13T21:36:15Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Action to run tests and upload coverage report 638230433 | ||
643676314 | https://github.com/simonw/datasette/issues/843#issuecomment-643676314 | https://api.github.com/repos/simonw/datasette/issues/843 | MDEyOklzc3VlQ29tbWVudDY0MzY3NjMxNA== | simonw 9599 | 2020-06-13T20:47:37Z | 2020-06-13T20:47:37Z | OWNER | I can use this action: https://github.com/codecov/codecov-action |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Configure codecov.io 638229448 | |
643676069 | https://github.com/simonw/datasette/issues/843#issuecomment-643676069 | https://api.github.com/repos/simonw/datasette/issues/843 | MDEyOklzc3VlQ29tbWVudDY0MzY3NjA2OQ== | simonw 9599 | 2020-06-13T20:45:29Z | 2020-06-13T20:45:29Z | OWNER | I set up https://codecov.io/gh/simonw/datasette/settings and added a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Configure codecov.io 638229448 | |
643663005 | https://github.com/simonw/datasette/issues/842#issuecomment-643663005 | https://api.github.com/repos/simonw/datasette/issues/842 | MDEyOklzc3VlQ29tbWVudDY0MzY2MzAwNQ== | simonw 9599 | 2020-06-13T18:51:57Z | 2020-06-13T18:51:57Z | OWNER | Two potential designs:
I fee the first would be easier to implement. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Magic parameters for canned queries 638212085 | |
643661125 | https://github.com/simonw/datasette/issues/841#issuecomment-643661125 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY2MTEyNQ== | simonw 9599 | 2020-06-13T18:35:30Z | 2020-06-13T18:36:50Z | OWNER | I ran export CODECOV_TOKEN="f7935cad...", then ran this:
x> No CI provider detected. Testing inside Docker? http://docs.codecov.io/docs/testing-with-docker Testing with Tox? https://docs.codecov.io/docs/python#section-testing-with-tox project root: . --> token set from env Yaml not found, that's ok! Learn more at http://docs.codecov.io/docs/codecov-yaml ==> Running gcov in . (disable via -X gcov) ==> Searching for coverage reports in: + . -> Found 1 reports ==> Detecting git/mercurial file structure ==> Reading reports + ./coverage.xml bytes=139174 ==> Appending adjustments https://docs.codecov.io/docs/fixing-reports -> No adjustments found ==> Gzipping contents ==> Uploading reports url: https://codecov.io query: branch=master&commit=0e49842e227a0f1f69d48108c87d17fe0379e548&build=&build_url=&name=&tag=&slug=simonw%2Fdatasette&service=&flags=&pr=&job= -> Pinging Codecov https://codecov.io/upload/v4?package=bash-20200602-f809a24&token=secret&branch=master&commit=0e49842e227a0f1f69d48108c87d17fe0379e548&build=&build_url=&name=&tag=&slug=simonw%2Fdatasette&service=&flags=&pr=&job= -> Uploading -> View reports at https://codecov.io/github/simonw/datasette/commit/0e49842e227a0f1f69d48108c87d17fe0379e548 ``` But https://codecov.io/github/simonw/datasette/commit/0e49842e227a0f1f69d48108c87d17fe0379e548 is a 404, so it doesn't seem to have worked? UPDATE: It works now, took about 30 seconds before the report showed up at that URL. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643660757 | https://github.com/simonw/datasette/issues/841#issuecomment-643660757 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY2MDc1Nw== | simonw 9599 | 2020-06-13T18:32:20Z | 2020-06-13T18:32:20Z | OWNER | Looking at options for publishing coverage reports: I'm going to try https://codecov.io/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643660427 | https://github.com/simonw/datasette/issues/841#issuecomment-643660427 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY2MDQyNw== | simonw 9599 | 2020-06-13T18:29:30Z | 2020-06-13T18:29:36Z | OWNER | This one looks easy enough to fix: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643658036 | https://github.com/simonw/datasette/issues/841#issuecomment-643658036 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY1ODAzNg== | simonw 9599 | 2020-06-13T18:08:13Z | 2020-06-13T18:08:13Z | OWNER | From digging through that report it looks like the majority stuff that isn't fully covered is corner-cases... which are the kind of things I really do want the tests to catch. I'm not entirely ready to commit to 100%, but I'm going to start digging through and seeing how close I can get. If I can get to 98% (I'm on 91% already) I may as well push all the way to 100. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643657287 | https://github.com/simonw/datasette/issues/841#issuecomment-643657287 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY1NzI4Nw== | simonw 9599 | 2020-06-13T18:01:39Z | 2020-06-13T18:01:39Z | OWNER | Added |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643656053 | https://github.com/simonw/datasette/issues/841#issuecomment-643656053 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY1NjA1Mw== | simonw 9599 | 2020-06-13T17:50:34Z | 2020-06-13T17:50:34Z | OWNER | Added a datasette/init.py 3 0 100% datasette/main.py 3 3 0% datasette/actor_auth_cookie.py 19 3 84% datasette/app.py 499 27 95% datasette/cli.py 157 45 71% datasette/database.py 233 17 93% datasette/default_permissions.py 39 0 100% datasette/facets.py 209 24 89% datasette/filters.py 122 7 94% datasette/hookspecs.py 19 0 100% datasette/inspect.py 37 23 38% datasette/plugins.py 34 6 82% datasette/publish/init.py 0 0 100% datasette/publish/cloudrun.py 55 2 96% datasette/publish/common.py 19 1 95% datasette/publish/heroku.py 95 13 86% datasette/renderer.py 63 4 94% datasette/sql_functions.py 4 0 100% datasette/tracer.py 85 16 81% datasette/utils/init.py 503 31 94% datasette/utils/asgi.py 253 25 90% datasette/version.py 4 0 100% datasette/views/init.py 0 0 100% datasette/views/base.py 288 19 93% datasette/views/database.py 120 2 98% datasette/views/index.py 57 2 96% datasette/views/special.py 72 16 78% datasette/views/table.py 418 18 96% TOTAL 3410 304 91% ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643655108 | https://github.com/simonw/datasette/issues/841#issuecomment-643655108 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzY1NTEwOA== | simonw 9599 | 2020-06-13T17:43:15Z | 2020-06-13T17:43:15Z | OWNER | Using https://pypi.org/project/pytest-cov/ and running datasette/init.py 3 0 100% datasette/main.py 3 3 0% datasette/_version.py 277 152 45% datasette/actor_auth_cookie.py 19 3 84% datasette/app.py 499 27 95% datasette/cli.py 157 45 71% datasette/database.py 233 17 93% datasette/default_permissions.py 39 0 100% datasette/facets.py 209 24 89% datasette/filters.py 122 7 94% datasette/hookspecs.py 19 0 100% datasette/inspect.py 37 23 38% datasette/plugins.py 34 6 82% datasette/publish/init.py 0 0 100% datasette/publish/cloudrun.py 55 2 96% datasette/publish/common.py 19 1 95% datasette/publish/heroku.py 95 13 86% datasette/renderer.py 63 4 94% datasette/sql_functions.py 4 0 100% datasette/tracer.py 85 16 81% datasette/utils/init.py 503 31 94% datasette/utils/asgi.py 253 25 90% datasette/utils/shutil_backport.py 44 40 9% datasette/version.py 4 0 100% datasette/views/init.py 0 0 100% datasette/views/base.py 288 19 93% datasette/views/database.py 120 2 98% datasette/views/index.py 57 2 96% datasette/views/special.py 72 16 78% datasette/views/table.py 418 18 96% TOTAL 3731 496 87% ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643648359 | https://github.com/simonw/datasette/issues/834#issuecomment-643648359 | https://api.github.com/repos/simonw/datasette/issues/834 | MDEyOklzc3VlQ29tbWVudDY0MzY0ODM1OQ== | simonw 9599 | 2020-06-13T16:47:29Z | 2020-06-13T16:47:29Z | OWNER | Implementing this is proving surprisingly tricky, because of the need to be able to optionally I could switch to using |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
startup() plugin hook 637342551 | |
643576372 | https://github.com/simonw/datasette/issues/841#issuecomment-643576372 | https://api.github.com/repos/simonw/datasette/issues/841 | MDEyOklzc3VlQ29tbWVudDY0MzU3NjM3Mg== | simonw 9599 | 2020-06-13T06:08:34Z | 2020-06-13T06:08:34Z | OWNER | Starlette achieves this. https://github.com/encode/starlette |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research feasibility of 100% test coverage 638104520 | |
643510240 | https://github.com/simonw/datasette/issues/834#issuecomment-643510240 | https://api.github.com/repos/simonw/datasette/issues/834 | MDEyOklzc3VlQ29tbWVudDY0MzUxMDI0MA== | simonw 9599 | 2020-06-12T22:40:26Z | 2020-06-12T22:40:26Z | OWNER | Another use-case: plugins that need their own database with the correct tables. They can write to the database on startup to create their tables. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
startup() plugin hook 637342551 | |
643509358 | https://github.com/simonw/datasette/issues/834#issuecomment-643509358 | https://api.github.com/repos/simonw/datasette/issues/834 | MDEyOklzc3VlQ29tbWVudDY0MzUwOTM1OA== | simonw 9599 | 2020-06-12T22:36:37Z | 2020-06-12T22:36:37Z | OWNER | This should be able to optionally return an async function which is then awaited. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
startup() plugin hook 637342551 | |
643501428 | https://github.com/simonw/datasette/issues/805#issuecomment-643501428 | https://api.github.com/repos/simonw/datasette/issues/805 | MDEyOklzc3VlQ29tbWVudDY0MzUwMTQyOA== | simonw 9599 | 2020-06-12T22:06:08Z | 2020-06-12T22:06:08Z | OWNER | This needs the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries live demo on Glitch 632724154 | |
643501064 | https://github.com/simonw/datasette/issues/834#issuecomment-643501064 | https://api.github.com/repos/simonw/datasette/issues/834 | MDEyOklzc3VlQ29tbWVudDY0MzUwMTA2NA== | simonw 9599 | 2020-06-12T22:04:43Z | 2020-06-12T22:04:43Z | OWNER | Another use-case for this: I want to use the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
startup() plugin hook 637342551 | |
643454625 | https://github.com/simonw/datasette/issues/840#issuecomment-643454625 | https://api.github.com/repos/simonw/datasette/issues/840 | MDEyOklzc3VlQ29tbWVudDY0MzQ1NDYyNQ== | simonw 9599 | 2020-06-12T19:47:38Z | 2020-06-12T19:47:53Z | OWNER | Another problem: what to display in the "you are logged in as", since we don't dictate an actor design. I'm going to use a includes template for this that can easily be over-ridden by administrators or by plugins. The default will look for the first available of the following keys:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Log out mechanism for clearing ds_actor cookie 637966833 | |
643453128 | https://github.com/simonw/datasette/issues/840#issuecomment-643453128 | https://api.github.com/repos/simonw/datasette/issues/840 | MDEyOklzc3VlQ29tbWVudDY0MzQ1MzEyOA== | simonw 9599 | 2020-06-12T19:43:15Z | 2020-06-12T19:43:15Z | OWNER | I don't like how this often involves a logout link that can be maliciously activated. I'm going to use a CSRF protected form button styled to look like a link instead. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Log out mechanism for clearing ds_actor cookie 637966833 | |
643414646 | https://github.com/dogsheep/github-to-sqlite/issues/40#issuecomment-643414646 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/40 | MDEyOklzc3VlQ29tbWVudDY0MzQxNDY0Ng== | simonw 9599 | 2020-06-12T18:06:48Z | 2020-06-12T18:06:48Z | MEMBER | That fixed it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Demo deploy is broken 637899539 | |
643406939 | https://github.com/simonw/sqlite-utils/issues/115#issuecomment-643406939 | https://api.github.com/repos/simonw/sqlite-utils/issues/115 | MDEyOklzc3VlQ29tbWVudDY0MzQwNjkzOQ== | simonw 9599 | 2020-06-12T17:51:11Z | 2020-06-12T17:51:11Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to execute insert/update statements with the CLI 637889964 | ||
643393506 | https://github.com/dogsheep/github-to-sqlite/issues/40#issuecomment-643393506 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/40 | MDEyOklzc3VlQ29tbWVudDY0MzM5MzUwNg== | simonw 9599 | 2020-06-12T17:21:14Z | 2020-06-12T17:21:14Z | MEMBER | I only install SQLite for this: I'm going to remove the need to install sqlite3 by making this possible with sqlite-utils: https://github.com/simonw/sqlite-utils/issues/115 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Demo deploy is broken 637899539 | |
643083451 | https://github.com/simonw/datasette/issues/838#issuecomment-643083451 | https://api.github.com/repos/simonw/datasette/issues/838 | MDEyOklzc3VlQ29tbWVudDY0MzA4MzQ1MQ== | tsibley 79913 | 2020-06-12T06:04:14Z | 2020-06-12T06:04:14Z | NONE | Hmm, I haven't tried removing Looking a little more at the code, I think the issue here is that the behaviour of In a mount situation, it is perfectly fine to construct URLs reusing the domain and path from the request. In a proxy situation, it never is, as the domain and path in the request are not the domain and path that the non-proxy client actually needs to use. That is, links which include the Apache → Datasette request origin, The tests you pointed to also reflect this in two ways:
Apps that support being proxied automatically support being mounted, but apps that only support being mounted don't automatically support being proxied. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Incorrect URLs when served behind a proxy with base_url set 637395097 | |
643010591 | https://github.com/simonw/datasette/issues/806#issuecomment-643010591 | https://api.github.com/repos/simonw/datasette/issues/806 | MDEyOklzc3VlQ29tbWVudDY0MzAxMDU5MQ== | simonw 9599 | 2020-06-12T01:13:06Z | 2020-06-12T01:13:06Z | OWNER | Tests are passing again: https://github.com/simonw/datasette/commit/9ae0d483ead93c0832142e5dc85959ae3c8f73ea |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 0.44 632753851 | |
643000948 | https://github.com/simonw/datasette/issues/806#issuecomment-643000948 | https://api.github.com/repos/simonw/datasette/issues/806 | MDEyOklzc3VlQ29tbWVudDY0MzAwMDk0OA== | simonw 9599 | 2020-06-12T00:34:21Z | 2020-06-12T00:34:21Z | OWNER | I'm going to add https://github.com/simonw/datasette-auth-tokens and https://github.com/simonw/datasette-permissions-sql to the documentation and release notes in a few places. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 0.44 632753851 | |
642998097 | https://github.com/simonw/datasette/issues/806#issuecomment-642998097 | https://api.github.com/repos/simonw/datasette/issues/806 | MDEyOklzc3VlQ29tbWVudDY0Mjk5ODA5Nw== | simonw 9599 | 2020-06-12T00:26:00Z | 2020-06-12T00:26:00Z | OWNER | OK, I'm ready to ship. Last check of the release notes, then I'll update the news section in the README and release 0.44! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 0.44 632753851 | |
642993277 | https://github.com/simonw/datasette/issues/838#issuecomment-642993277 | https://api.github.com/repos/simonw/datasette/issues/838 | MDEyOklzc3VlQ29tbWVudDY0Mjk5MzI3Nw== | simonw 9599 | 2020-06-12T00:18:26Z | 2020-06-12T00:18:50Z | OWNER | Have you tried this without the This is the test I used to ensure this feature works - it scrapes all of the links on a bunch of different pages. Could it be missing something here? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Incorrect URLs when served behind a proxy with base_url set 637395097 | |
642991513 | https://github.com/simonw/datasette/issues/824#issuecomment-642991513 | https://api.github.com/repos/simonw/datasette/issues/824 | MDEyOklzc3VlQ29tbWVudDY0Mjk5MTUxMw== | simonw 9599 | 2020-06-12T00:11:50Z | 2020-06-12T00:11:50Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example authentication plugin 635108074 | ||
642958225 | https://github.com/simonw/datasette/issues/833#issuecomment-642958225 | https://api.github.com/repos/simonw/datasette/issues/833 | MDEyOklzc3VlQ29tbWVudDY0Mjk1ODIyNQ== | simonw 9599 | 2020-06-11T22:15:32Z | 2020-06-11T22:15:32Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/-/metadata and so on should respect view-instance permission 637253789 | ||
642953605 | https://github.com/simonw/datasette/issues/824#issuecomment-642953605 | https://api.github.com/repos/simonw/datasette/issues/824 | MDEyOklzc3VlQ29tbWVudDY0Mjk1MzYwNQ== | simonw 9599 | 2020-06-11T22:02:32Z | 2020-06-11T22:02:32Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example authentication plugin 635108074 | |
642952962 | https://github.com/simonw/datasette/issues/824#issuecomment-642952962 | https://api.github.com/repos/simonw/datasette/issues/824 | MDEyOklzc3VlQ29tbWVudDY0Mjk1Mjk2Mg== | simonw 9599 | 2020-06-11T22:01:58Z | 2020-06-11T22:01:58Z | OWNER | Alternative idea: a plugin that handles Bearer token authentication. Uses |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example authentication plugin 635108074 | |
642951150 | https://github.com/simonw/datasette/issues/824#issuecomment-642951150 | https://api.github.com/repos/simonw/datasette/issues/824 | MDEyOklzc3VlQ29tbWVudDY0Mjk1MTE1MA== | simonw 9599 | 2020-06-11T22:00:17Z | 2020-06-11T22:00:17Z | OWNER | I got this working: https://github.com/simonw/datasette-auth-github/pull/64 Just one problem: it uses the existing It does use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example authentication plugin 635108074 | |
642944645 | https://github.com/simonw/datasette/issues/220#issuecomment-642944645 | https://api.github.com/repos/simonw/datasette/issues/220 | MDEyOklzc3VlQ29tbWVudDY0Mjk0NDY0NQ== | simonw 9599 | 2020-06-11T21:49:55Z | 2020-06-11T21:49:55Z | OWNER | I'm OK with not implementing this - I've got used to the existing mechanism, and it doesn't frustrate me enough to work on this more. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Investigate syntactic sugar for plugins 314847571 | |
642907021 | https://github.com/simonw/datasette/issues/832#issuecomment-642907021 | https://api.github.com/repos/simonw/datasette/issues/832 | MDEyOklzc3VlQ29tbWVudDY0MjkwNzAyMQ== | simonw 9599 | 2020-06-11T20:20:35Z | 2020-06-11T20:20:35Z | OWNER | I think the new |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Having view-table permission but NOT view-database should still grant access to /db/table 636722501 | |
642906681 | https://github.com/simonw/datasette/issues/832#issuecomment-642906681 | https://api.github.com/repos/simonw/datasette/issues/832 | MDEyOklzc3VlQ29tbWVudDY0MjkwNjY4MQ== | simonw 9599 | 2020-06-11T20:19:47Z | 2020-06-11T20:20:02Z | OWNER | So for the following:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Having view-table permission but NOT view-database should still grant access to /db/table 636722501 | |
642905424 | https://github.com/simonw/datasette/issues/833#issuecomment-642905424 | https://api.github.com/repos/simonw/datasette/issues/833 | MDEyOklzc3VlQ29tbWVudDY0MjkwNTQyNA== | simonw 9599 | 2020-06-11T20:16:41Z | 2020-06-11T20:16:41Z | OWNER | I'll add a new test in |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/-/metadata and so on should respect view-instance permission 637253789 | |
642902208 | https://github.com/simonw/datasette/issues/833#issuecomment-642902208 | https://api.github.com/repos/simonw/datasette/issues/833 | MDEyOklzc3VlQ29tbWVudDY0MjkwMjIwOA== | simonw 9599 | 2020-06-11T20:08:57Z | 2020-06-11T20:08:57Z | OWNER | I'm tempted to add a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/-/metadata and so on should respect view-instance permission 637253789 | |
642874724 | https://github.com/simonw/datasette/issues/833#issuecomment-642874724 | https://api.github.com/repos/simonw/datasette/issues/833 | MDEyOklzc3VlQ29tbWVudDY0Mjg3NDcyNA== | simonw 9599 | 2020-06-11T19:07:49Z | 2020-06-11T19:07:49Z | OWNER | A live demo running the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/-/metadata and so on should respect view-instance permission 637253789 | |
642870553 | https://github.com/simonw/datasette/issues/801#issuecomment-642870553 | https://api.github.com/repos/simonw/datasette/issues/801 | MDEyOklzc3VlQ29tbWVudDY0Mjg3MDU1Mw== | simonw 9599 | 2020-06-11T18:58:49Z | 2020-06-11T18:58:49Z | OWNER | I've implemented this in a plugin instead: https://github.com/simonw/datasette-permissions-sql |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
allow_by_query setting for configuring permissions with a SQL statement 631932926 | |
642795966 | https://github.com/simonw/datasette/issues/832#issuecomment-642795966 | https://api.github.com/repos/simonw/datasette/issues/832 | MDEyOklzc3VlQ29tbWVudDY0Mjc5NTk2Ng== | simonw 9599 | 2020-06-11T16:37:21Z | 2020-06-11T16:37:21Z | OWNER | How would I document this? Probably in another section on https://datasette.readthedocs.io/en/latest/authentication.html#permissions But I'd also need to add documentation to the individual views stating what permissions are checked and in what order. I could do that on this page: https://datasette.readthedocs.io/en/latest/pages.html |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Having view-table permission but NOT view-database should still grant access to /db/table 636722501 | |
642772344 | https://github.com/simonw/datasette/pull/809#issuecomment-642772344 | https://api.github.com/repos/simonw/datasette/issues/809 | MDEyOklzc3VlQ29tbWVudDY0Mjc3MjM0NA== | simonw 9599 | 2020-06-11T16:01:15Z | 2020-06-11T16:01:15Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Publish secrets 632919570 | |
642754589 | https://github.com/simonw/datasette/pull/809#issuecomment-642754589 | https://api.github.com/repos/simonw/datasette/issues/809 | MDEyOklzc3VlQ29tbWVudDY0Mjc1NDU4OQ== | simonw 9599 | 2020-06-11T15:45:25Z | 2020-06-11T15:45:25Z | OWNER |
https://datasette-publish-secret-j7hipcg4aq-uw.a.run.app/-/messages |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Publish secrets 632919570 | |
642750790 | https://github.com/simonw/datasette/pull/809#issuecomment-642750790 | https://api.github.com/repos/simonw/datasette/issues/809 | MDEyOklzc3VlQ29tbWVudDY0Mjc1MDc5MA== | simonw 9599 | 2020-06-11T15:42:23Z | 2020-06-11T15:42:23Z | OWNER |
https://datasette-publish-secret.herokuapp.com/-/messages - Heroku works. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Publish secrets 632919570 | |
642745518 | https://github.com/simonw/datasette/pull/809#issuecomment-642745518 | https://api.github.com/repos/simonw/datasette/issues/809 | MDEyOklzc3VlQ29tbWVudDY0Mjc0NTUxOA== | simonw 9599 | 2020-06-11T15:38:51Z | 2020-06-11T15:38:51Z | OWNER | The way to manually test this is to publish a database to each provider and then check that the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Publish secrets 632919570 | |
642741930 | https://github.com/simonw/datasette/issues/832#issuecomment-642741930 | https://api.github.com/repos/simonw/datasette/issues/832 | MDEyOklzc3VlQ29tbWVudDY0Mjc0MTkzMA== | simonw 9599 | 2020-06-11T15:35:53Z | 2020-06-11T15:36:05Z | OWNER | May the fix here is to implement a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Having view-table permission but NOT view-database should still grant access to /db/table 636722501 | |
642522285 | https://github.com/simonw/datasette/issues/394#issuecomment-642522285 | https://api.github.com/repos/simonw/datasette/issues/394 | MDEyOklzc3VlQ29tbWVudDY0MjUyMjI4NQ== | LVerneyPEReN 58298410 | 2020-06-11T09:15:19Z | 2020-06-11T09:15:19Z | NONE | Hi @wragge, This looks great, thanks for the share! I refactored it into a self-contained function, binding on a random available TCP port (multi-user context). I am using subprocess API directly since the ```python import socket from signal import SIGINT from subprocess import Popen, PIPE from IPython.display import display, HTML from notebook.notebookapp import list_running_servers def get_free_tcp_port(): """ Get a free TCP port. """ tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp.bind(('', 0)) _, port = tcp.getsockname() tcp.close() return port def datasette(database): """ Run datasette on an SQLite database. """ # Get current running servers servers = list_running_servers()
``` Ideally, I'd like some extra magic to notify users when they are leaving the closing the notebook tab and make them terminate the running datasette processes. I'll be looking for it. |
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 } |
base_url configuration setting 396212021 | |
642420375 | https://github.com/simonw/datasette/issues/818#issuecomment-642420375 | https://api.github.com/repos/simonw/datasette/issues/818 | MDEyOklzc3VlQ29tbWVudDY0MjQyMDM3NQ== | simonw 9599 | 2020-06-11T05:40:07Z | 2020-06-11T05:40:07Z | OWNER | https://github.com/simonw/datasette-permissions-sql is now released as a 0.1a here: https://pypi.org/project/datasette-permissions-sql/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example permissions plugin 634917088 | |
642412017 | https://github.com/simonw/datasette/issues/832#issuecomment-642412017 | https://api.github.com/repos/simonw/datasette/issues/832 | MDEyOklzc3VlQ29tbWVudDY0MjQxMjAxNw== | simonw 9599 | 2020-06-11T05:13:59Z | 2020-06-11T05:13:59Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Having view-table permission but NOT view-database should still grant access to /db/table 636722501 | ||
642324847 | https://github.com/simonw/datasette/issues/831#issuecomment-642324847 | https://api.github.com/repos/simonw/datasette/issues/831 | MDEyOklzc3VlQ29tbWVudDY0MjMyNDg0Nw== | simonw 9599 | 2020-06-10T23:50:55Z | 2020-06-10T23:50:55Z | OWNER | Actually I'm not sure about this. If It could be So I think I'm going to stick with the current mechanism, which is that |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
It would be more intuitive if "allow": none meant "no-one can do this" 636614868 | |
642231871 | https://github.com/simonw/datasette/issues/818#issuecomment-642231871 | https://api.github.com/repos/simonw/datasette/issues/818 | MDEyOklzc3VlQ29tbWVudDY0MjIzMTg3MQ== | simonw 9599 | 2020-06-10T20:11:50Z | 2020-06-10T20:11:50Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example permissions plugin 634917088 | |
642230499 | https://github.com/simonw/datasette/issues/818#issuecomment-642230499 | https://api.github.com/repos/simonw/datasette/issues/818 | MDEyOklzc3VlQ29tbWVudDY0MjIzMDQ5OQ== | simonw 9599 | 2020-06-10T20:08:46Z | 2020-06-10T20:09:26Z | OWNER | What's a simple but useful plugin I could release that exercises this hook? Ideally one which executes permission checks against the database somehow. I could do a simplest-possible implementation of the idea in #801 (allow-by-query). |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example permissions plugin 634917088 | |
642229899 | https://github.com/simonw/datasette/issues/818#issuecomment-642229899 | https://api.github.com/repos/simonw/datasette/issues/818 | MDEyOklzc3VlQ29tbWVudDY0MjIyOTg5OQ== | simonw 9599 | 2020-06-10T20:07:36Z | 2020-06-10T20:07:36Z | OWNER | New policy in 9f236c4 dictates that this should be in Milestone 0.44 after all:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Example permissions plugin 634917088 | |
642217520 | https://github.com/simonw/datasette/issues/829#issuecomment-642217520 | https://api.github.com/repos/simonw/datasette/issues/829 | MDEyOklzc3VlQ29tbWVudDY0MjIxNzUyMA== | simonw 9599 | 2020-06-10T19:41:35Z | 2020-06-10T19:41:35Z | OWNER | I didn't bother with the alternative epoch - it only shaves off two or three bytes from the cookie. Documentation for the new |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to set ds_actor cookie such that it expires 636426530 | |
642178604 | https://github.com/simonw/datasette/issues/829#issuecomment-642178604 | https://api.github.com/repos/simonw/datasette/issues/829 | MDEyOklzc3VlQ29tbWVudDY0MjE3ODYwNA== | simonw 9599 | 2020-06-10T18:18:36Z | 2020-06-10T18:20:19Z | OWNER | Even shorter: encode an integer that is the difference between that expiry timestamp and a more recent epoch - June 1st 2020 will do. ```
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to set ds_actor cookie such that it expires 636426530 | |
642176180 | https://github.com/simonw/datasette/issues/829#issuecomment-642176180 | https://api.github.com/repos/simonw/datasette/issues/829 | MDEyOklzc3VlQ29tbWVudDY0MjE3NjE4MA== | simonw 9599 | 2020-06-10T18:14:02Z | 2020-06-10T18:14:15Z | OWNER | And the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to set ds_actor cookie such that it expires 636426530 | |
642175892 | https://github.com/simonw/datasette/issues/829#issuecomment-642175892 | https://api.github.com/repos/simonw/datasette/issues/829 | MDEyOklzc3VlQ29tbWVudDY0MjE3NTg5Mg== | simonw 9599 | 2020-06-10T18:13:26Z | 2020-06-10T18:13:26Z | OWNER | I'm going with
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to set ds_actor cookie such that it expires 636426530 | |
642174272 | https://github.com/simonw/datasette/issues/829#issuecomment-642174272 | https://api.github.com/repos/simonw/datasette/issues/829 | MDEyOklzc3VlQ29tbWVudDY0MjE3NDI3Mg== | simonw 9599 | 2020-06-10T18:10:13Z | 2020-06-10T18:10:13Z | OWNER | Some options:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to set ds_actor cookie such that it expires 636426530 | |
642161210 | https://github.com/simonw/datasette/issues/829#issuecomment-642161210 | https://api.github.com/repos/simonw/datasette/issues/829 | MDEyOklzc3VlQ29tbWVudDY0MjE2MTIxMA== | simonw 9599 | 2020-06-10T17:45:58Z | 2020-06-10T17:45:58Z | OWNER |
I currently only decode the If plugins want to be able to set their own policies on how long the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to set ds_actor cookie such that it expires 636426530 |
Advanced export
JSON shape: default, array, newline-delimited, object
CREATE TABLE [issue_comments] ( [html_url] TEXT, [issue_url] TEXT, [id] INTEGER PRIMARY KEY, [node_id] TEXT, [user] INTEGER REFERENCES [users]([id]), [created_at] TEXT, [updated_at] TEXT, [author_association] TEXT, [body] TEXT, [reactions] TEXT, [issue] INTEGER REFERENCES [issues]([id]) , [performed_via_github_app] TEXT); CREATE INDEX [idx_issue_comments_issue] ON [issue_comments] ([issue]); CREATE INDEX [idx_issue_comments_user] ON [issue_comments] ([user]);
user >30