{"html_url": "https://github.com/simonw/datasette/issues/1388#issuecomment-877721003", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1388", "id": 877721003, "node_id": "MDEyOklzc3VlQ29tbWVudDg3NzcyMTAwMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-07-11T00:21:19Z", "updated_at": "2021-07-11T00:21:19Z", "author_association": "OWNER", "body": "Documentation: https://docs.datasette.io/en/latest/deploying.html#nginx-proxy-configuration", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 939051549, "label": "Serve using UNIX domain socket"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1388#issuecomment-877725193", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1388", "id": 877725193, "node_id": "MDEyOklzc3VlQ29tbWVudDg3NzcyNTE5Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-07-11T01:18:38Z", "updated_at": "2021-07-11T01:18:38Z", "author_association": "OWNER", "body": "Wrote up a TIL: https://til.simonwillison.net/nginx/proxy-domain-sockets", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 939051549, "label": "Serve using UNIX domain socket"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/511#issuecomment-877725742", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/511", "id": 877725742, "node_id": "MDEyOklzc3VlQ29tbWVudDg3NzcyNTc0Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-07-11T01:25:01Z", "updated_at": "2021-07-11T01:26:38Z", "author_association": "OWNER", "body": "That's weird. https://github.com/simonw/datasette/runs/3037862798 finished running and came up green - but actually a TON of the tests failed on Windows. Not sure why that didn't fail the whole test suite:\r\n\r\n\"Ran_Black__refs__1388_\u00b7_simonw_datasette_518cb06\"\r\n\r\nAlso the test suite took 50 minutes on Windows!\r\n\r\nHere's a copy of the full log file for the tests on Python 3.8 on Windows: https://gist.github.com/simonw/2900ef33693c1bbda09188eb31c8212d", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 456578474, "label": "Get Datasette tests passing on Windows in GitHub Actions"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/511#issuecomment-877726288", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/511", "id": 877726288, "node_id": "MDEyOklzc3VlQ29tbWVudDg3NzcyNjI4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-07-11T01:29:41Z", "updated_at": "2021-07-11T01:29:41Z", "author_association": "OWNER", "body": "Lots of errors that look like this:\r\n```\r\n2021-07-11T00:40:32.1189321Z E NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\\\Users\\\\RUNNER~1\\\\AppData\\\\Local\\\\Temp\\\\tmpdr41pgwg\\\\data.db'\r\n2021-07-11T00:40:32.1190083Z \r\n2021-07-11T00:40:32.1191128Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\shutil.py:596: NotADirectoryError\r\n2021-07-11T00:40:32.1191999Z ___________________ ERROR at teardown of test_insert_error ____________________\r\n2021-07-11T00:40:32.1192842Z [gw1] win32 -- Python 3.8.10 c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\python.exe\r\n2021-07-11T00:40:32.1193387Z \r\n2021-07-11T00:40:32.1193930Z path = 'C:\\\\Users\\\\RUNNER~1\\\\AppData\\\\Local\\\\Temp\\\\tmpry729pq_'\r\n2021-07-11T00:40:32.1194876Z onerror = .onerror at 0x00000291FCEA93A0>\r\n2021-07-11T00:40:32.1195480Z \r\n2021-07-11T00:40:32.1195927Z def _rmtree_unsafe(path, onerror):\r\n2021-07-11T00:40:32.1196435Z try:\r\n2021-07-11T00:40:32.1196910Z with os.scandir(path) as scandir_it:\r\n2021-07-11T00:40:32.1197504Z entries = list(scandir_it)\r\n2021-07-11T00:40:32.1198002Z except OSError:\r\n2021-07-11T00:40:32.1198607Z onerror(os.scandir, path, sys.exc_info())\r\n2021-07-11T00:40:32.1199137Z entries = []\r\n2021-07-11T00:40:32.1199637Z for entry in entries:\r\n2021-07-11T00:40:32.1200184Z fullname = entry.path\r\n2021-07-11T00:40:32.1200692Z if _rmtree_isdir(entry):\r\n2021-07-11T00:40:32.1201198Z try:\r\n2021-07-11T00:40:32.1201643Z if entry.is_symlink():\r\n2021-07-11T00:40:32.1202280Z # This can only happen if someone replaces\r\n2021-07-11T00:40:32.1202944Z # a directory with a symlink after the call to\r\n2021-07-11T00:40:32.1203623Z # os.scandir or entry.is_dir above.\r\n2021-07-11T00:40:32.1204303Z raise OSError(\"Cannot call rmtree on a symbolic link\")\r\n2021-07-11T00:40:32.1204942Z except OSError:\r\n2021-07-11T00:40:32.1206416Z onerror(os.path.islink, fullname, sys.exc_info())\r\n2021-07-11T00:40:32.1207022Z continue\r\n2021-07-11T00:40:32.1207584Z _rmtree_unsafe(fullname, onerror)\r\n2021-07-11T00:40:32.1208074Z else:\r\n2021-07-11T00:40:32.1208496Z try:\r\n2021-07-11T00:40:32.1208926Z > os.unlink(fullname)\r\n2021-07-11T00:40:32.1210053Z E PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Users\\\\RUNNER~1\\\\AppData\\\\Local\\\\Temp\\\\tmpry729pq_\\\\data.db'\r\n2021-07-11T00:40:32.1210974Z \r\n2021-07-11T00:40:32.1211638Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\shutil.py:616: PermissionError\r\n2021-07-11T00:40:32.1212211Z \r\n2021-07-11T00:40:32.1212846Z During handling of the above exception, another exception occurred:\r\n2021-07-11T00:40:32.1213320Z \r\n2021-07-11T00:40:32.1213797Z func = \r\n2021-07-11T00:40:32.1214529Z path = 'C:\\\\Users\\\\RUNNER~1\\\\AppData\\\\Local\\\\Temp\\\\tmpry729pq_\\\\data.db'\r\n2021-07-11T00:40:32.1215763Z exc_info = (, PermissionError(13, 'The process cannot access the file because it is being used by another process'), )\r\n2021-07-11T00:40:32.1217263Z \r\n2021-07-11T00:40:32.1217777Z def onerror(func, path, exc_info):\r\n2021-07-11T00:40:32.1218421Z if issubclass(exc_info[0], PermissionError):\r\n2021-07-11T00:40:32.1219079Z def resetperms(path):\r\n2021-07-11T00:40:32.1219518Z try:\r\n2021-07-11T00:40:32.1219992Z _os.chflags(path, 0)\r\n2021-07-11T00:40:32.1220535Z except AttributeError:\r\n2021-07-11T00:40:32.1221110Z pass\r\n2021-07-11T00:40:32.1221545Z _os.chmod(path, 0o700)\r\n2021-07-11T00:40:32.1221984Z \r\n2021-07-11T00:40:32.1222330Z try:\r\n2021-07-11T00:40:32.1222768Z if path != name:\r\n2021-07-11T00:40:32.1223332Z resetperms(_os.path.dirname(path))\r\n2021-07-11T00:40:32.1223963Z resetperms(path)\r\n2021-07-11T00:40:32.1224408Z \r\n2021-07-11T00:40:32.1224749Z try:\r\n2021-07-11T00:40:32.1225954Z > _os.unlink(path)\r\n2021-07-11T00:40:32.1227032Z E PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\\\Users\\\\RUNNER~1\\\\AppData\\\\Local\\\\Temp\\\\tmpry729pq_\\\\data.db'\r\n2021-07-11T00:40:32.1227927Z \r\n2021-07-11T00:40:32.1228646Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\tempfile.py:802: PermissionError\r\n2021-07-11T00:40:32.1229200Z \r\n2021-07-11T00:40:32.1229842Z During handling of the above exception, another exception occurred:\r\n2021-07-11T00:40:32.1230355Z \r\n2021-07-11T00:40:32.1230783Z @pytest.fixture\r\n2021-07-11T00:40:32.1231322Z def canned_write_client():\r\n2021-07-11T00:40:32.1231805Z with make_app_client(\r\n2021-07-11T00:40:32.1232467Z extra_databases={\"data.db\": \"create table names (name text)\"},\r\n2021-07-11T00:40:32.1233104Z metadata={\r\n2021-07-11T00:40:32.1233535Z \"databases\": {\r\n2021-07-11T00:40:32.1233989Z \"data\": {\r\n2021-07-11T00:40:32.1234416Z \"queries\": {\r\n2021-07-11T00:40:32.1235001Z \"canned_read\": {\"sql\": \"select * from names\"},\r\n2021-07-11T00:40:32.1235527Z \"add_name\": {\r\n2021-07-11T00:40:32.1236117Z \"sql\": \"insert into names (name) values (:name)\",\r\n2021-07-11T00:40:32.1236686Z \"write\": True,\r\n2021-07-11T00:40:32.1237317Z \"on_success_redirect\": \"/data/add_name?success\",\r\n2021-07-11T00:40:32.1237882Z },\r\n2021-07-11T00:40:32.1238331Z \"add_name_specify_id\": {\r\n2021-07-11T00:40:32.1239009Z \"sql\": \"insert into names (rowid, name) values (:rowid, :name)\",\r\n2021-07-11T00:40:32.1239610Z \"write\": True,\r\n2021-07-11T00:40:32.1240259Z \"on_error_redirect\": \"/data/add_name_specify_id?error\",\r\n2021-07-11T00:40:32.1240839Z },\r\n2021-07-11T00:40:32.1241320Z \"delete_name\": {\r\n2021-07-11T00:40:32.1242504Z \"sql\": \"delete from names where rowid = :rowid\",\r\n2021-07-11T00:40:32.1243127Z \"write\": True,\r\n2021-07-11T00:40:32.1243721Z \"on_success_message\": \"Name deleted\",\r\n2021-07-11T00:40:32.1244282Z \"allow\": {\"id\": \"root\"},\r\n2021-07-11T00:40:32.1244749Z },\r\n2021-07-11T00:40:32.1245959Z \"update_name\": {\r\n2021-07-11T00:40:32.1246614Z \"sql\": \"update names set name = :name where rowid = :rowid\",\r\n2021-07-11T00:40:32.1247267Z \"params\": [\"rowid\", \"name\", \"extra\"],\r\n2021-07-11T00:40:32.1247828Z \"write\": True,\r\n2021-07-11T00:40:32.1248247Z },\r\n2021-07-11T00:40:32.1248653Z }\r\n2021-07-11T00:40:32.1249166Z }\r\n2021-07-11T00:40:32.1249577Z }\r\n2021-07-11T00:40:32.1249962Z },\r\n2021-07-11T00:40:32.1250333Z ) as client:\r\n2021-07-11T00:40:32.1250822Z > yield client\r\n2021-07-11T00:40:32.1251078Z \r\n2021-07-11T00:40:32.1251678Z D:\\a\\datasette\\datasette\\tests\\test_canned_queries.py:43: \r\n2021-07-11T00:40:32.1252347Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\n2021-07-11T00:40:32.1253040Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\contextlib.py:120: in __exit__\r\n2021-07-11T00:40:32.1253759Z next(self.gen)\r\n2021-07-11T00:40:32.1254398Z D:\\a\\datasette\\datasette\\tests\\fixtures.py:156: in make_app_client\r\n2021-07-11T00:40:32.1255098Z yield TestClient(ds)\r\n2021-07-11T00:40:32.1255796Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\tempfile.py:827: in __exit__\r\n2021-07-11T00:40:32.1256510Z self.cleanup()\r\n2021-07-11T00:40:32.1257200Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\tempfile.py:831: in cleanup\r\n2021-07-11T00:40:32.1257961Z self._rmtree(self.name)\r\n2021-07-11T00:40:32.1258712Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\tempfile.py:813: in _rmtree\r\n2021-07-11T00:40:32.1259487Z _shutil.rmtree(name, onerror=onerror)\r\n2021-07-11T00:40:32.1260280Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\shutil.py:740: in rmtree\r\n2021-07-11T00:40:32.1261039Z return _rmtree_unsafe(path, onerror)\r\n2021-07-11T00:40:32.1261843Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\shutil.py:618: in _rmtree_unsafe\r\n2021-07-11T00:40:32.1262633Z onerror(os.unlink, fullname, sys.exc_info())\r\n2021-07-11T00:40:32.1263456Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\tempfile.py:805: in onerror\r\n2021-07-11T00:40:32.1264175Z cls._rmtree(path)\r\n2021-07-11T00:40:32.1264848Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\tempfile.py:813: in _rmtree\r\n2021-07-11T00:40:32.1266329Z _shutil.rmtree(name, onerror=onerror)\r\n2021-07-11T00:40:32.1267082Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\shutil.py:740: in rmtree\r\n2021-07-11T00:40:32.1267858Z return _rmtree_unsafe(path, onerror)\r\n2021-07-11T00:40:32.1268615Z c:\\hostedtoolcache\\windows\\python\\3.8.10\\x64\\lib\\shutil.py:599: in _rmtree_unsafe\r\n2021-07-11T00:40:32.1269440Z onerror(os.scandir, path, sys.exc_info())\r\n2021-07-11T00:40:32.1269979Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\r\n2021-07-11T00:40:32.1270287Z \r\n2021-07-11T00:40:32.1270947Z path = 'C:\\\\Users\\\\RUNNER~1\\\\AppData\\\\Local\\\\Temp\\\\tmpry729pq_\\\\data.db'\r\n2021-07-11T00:40:32.1273356Z onerror = .onerror at 0x00000291FCF40E50>\r\n2021-07-11T00:40:32.1273999Z \r\n2021-07-11T00:40:32.1274493Z def _rmtree_unsafe(path, onerror):\r\n2021-07-11T00:40:32.1274953Z try:\r\n2021-07-11T00:40:32.1275461Z > with os.scandir(path) as scandir_it:\r\n2021-07-11T00:40:32.1276459Z E NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\\\Users\\\\RUNNER~1\\\\AppData\\\\Local\\\\Temp\\\\tmpry729pq_\\\\data.db'\r\n2021-07-11T00:40:32.1277220Z \r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 456578474, "label": "Get Datasette tests passing on Windows in GitHub Actions"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/511#issuecomment-877726495", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/511", "id": 877726495, "node_id": "MDEyOklzc3VlQ29tbWVudDg3NzcyNjQ5NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-07-11T01:32:27Z", "updated_at": "2021-07-11T01:32:27Z", "author_association": "OWNER", "body": "I'm using `pytest-xdist` and this:\r\n\r\n pytest -n auto -m \"not serial\"\r\n\r\nI'll try not using the `-n auto` bit on Windows and see if that helps.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 456578474, "label": "Get Datasette tests passing on Windows in GitHub Actions"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/healthkit-to-sqlite/issues/12#issuecomment-877805513", "issue_url": "https://api.github.com/repos/dogsheep/healthkit-to-sqlite/issues/12", "id": 877805513, "node_id": "MDEyOklzc3VlQ29tbWVudDg3NzgwNTUxMw==", "user": {"value": 956433, "label": "Mjboothaus"}, "created_at": "2021-07-11T14:03:01Z", "updated_at": "2021-07-11T14:03:01Z", "author_association": "NONE", "body": "Hi Simon -- just experimenting with your excellent software!\r\n\r\nUp to this point in time I have been using the (paid) [HealthFit App](https://apps.apple.com/au/app/healthfit/id1202650514) to export my workouts from my Apple Watch, one walk at the time into either .GPX or .FIT format and then using another library to suck it into Python and eventually here to my \"Emmaus Walking\" app:\r\n\r\nhttps://share.streamlit.io/mjboothaus/emmaus_walking/emmaus_walking/app.py\r\n\r\nI just used `healthkit-to-sqlite` to convert my export.zip file and it all \"just worked\".\r\n\r\nI did notice the issue with various numeric fields being stored in the SQLite db as TEXT for now and just thought I'd flag it - but you're already self-reported this issue.\r\n\r\nKeep up the great work!\r\n\r\nI was curious if you have any thoughts about periodically exporting \"export.zip\" and how to just update the SQLite file instead of re-creating it each time. Hopefully Apple will give some thought to managing this data in a more sensible fashion as it grows over time. Ideally one could pull it from iCloud (where it is allegedly being backed up).\r\n\r\n\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 727848625, "label": "Some workout columns should be float, not text"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/511#issuecomment-877835171", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/511", "id": 877835171, "node_id": "MDEyOklzc3VlQ29tbWVudDg3NzgzNTE3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-07-11T17:23:05Z", "updated_at": "2021-07-11T17:23:05Z", "author_association": "OWNER", "body": " == 87 failed, 819 passed, 7 skipped, 29 errors in 2584.85s (0:43:04) ==\r\n\r\nhttps://github.com/simonw/datasette/runs/3038188870?check_suite_focus=true\r\n\r\nFull copy of log here: https://gist.github.com/simonw/4b1fdd24496b989fca56bc757be345ad", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 456578474, "label": "Get Datasette tests passing on Windows in GitHub Actions"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/healthkit-to-sqlite/issues/12#issuecomment-877874117", "issue_url": "https://api.github.com/repos/dogsheep/healthkit-to-sqlite/issues/12", "id": 877874117, "node_id": "MDEyOklzc3VlQ29tbWVudDg3Nzg3NDExNw==", "user": {"value": 956433, "label": "Mjboothaus"}, "created_at": "2021-07-11T23:03:37Z", "updated_at": "2021-07-11T23:03:37Z", "author_association": "NONE", "body": "P.s. wondering if you have explored using the spatialite functionality with the location data in workouts?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 727848625, "label": "Some workout columns should be float, not text"}, "performed_via_github_app": null}