html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,issue,performed_via_github_app
https://github.com/simonw/datasette/issues/511#issuecomment-877835171,https://api.github.com/repos/simonw/datasette/issues/511,877835171,MDEyOklzc3VlQ29tbWVudDg3NzgzNTE3MQ==,9599,2021-07-11T17:23:05Z,2021-07-11T17:23:05Z,OWNER," == 87 failed, 819 passed, 7 skipped, 29 errors in 2584.85s (0:43:04) ==
https://github.com/simonw/datasette/runs/3038188870?check_suite_focus=true
Full copy of log here: https://gist.github.com/simonw/4b1fdd24496b989fca56bc757be345ad","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-877726495,https://api.github.com/repos/simonw/datasette/issues/511,877726495,MDEyOklzc3VlQ29tbWVudDg3NzcyNjQ5NQ==,9599,2021-07-11T01:32:27Z,2021-07-11T01:32:27Z,OWNER,"I'm using `pytest-xdist` and this:
pytest -n auto -m ""not serial""
I'll try not using the `-n auto` bit on Windows and see if that helps.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-877726288,https://api.github.com/repos/simonw/datasette/issues/511,877726288,MDEyOklzc3VlQ29tbWVudDg3NzcyNjI4OA==,9599,2021-07-11T01:29:41Z,2021-07-11T01:29:41Z,OWNER,"Lots of errors that look like this:
```
2021-07-11T00:40:32.1189321Z E NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpdr41pgwg\\data.db'
2021-07-11T00:40:32.1190083Z
2021-07-11T00:40:32.1191128Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\shutil.py:596: NotADirectoryError
2021-07-11T00:40:32.1191999Z ___________________ ERROR at teardown of test_insert_error ____________________
2021-07-11T00:40:32.1192842Z [gw1] win32 -- Python 3.8.10 c:\hostedtoolcache\windows\python\3.8.10\x64\python.exe
2021-07-11T00:40:32.1193387Z
2021-07-11T00:40:32.1193930Z path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpry729pq_'
2021-07-11T00:40:32.1194876Z onerror = .onerror at 0x00000291FCEA93A0>
2021-07-11T00:40:32.1195480Z
2021-07-11T00:40:32.1195927Z def _rmtree_unsafe(path, onerror):
2021-07-11T00:40:32.1196435Z try:
2021-07-11T00:40:32.1196910Z with os.scandir(path) as scandir_it:
2021-07-11T00:40:32.1197504Z entries = list(scandir_it)
2021-07-11T00:40:32.1198002Z except OSError:
2021-07-11T00:40:32.1198607Z onerror(os.scandir, path, sys.exc_info())
2021-07-11T00:40:32.1199137Z entries = []
2021-07-11T00:40:32.1199637Z for entry in entries:
2021-07-11T00:40:32.1200184Z fullname = entry.path
2021-07-11T00:40:32.1200692Z if _rmtree_isdir(entry):
2021-07-11T00:40:32.1201198Z try:
2021-07-11T00:40:32.1201643Z if entry.is_symlink():
2021-07-11T00:40:32.1202280Z # This can only happen if someone replaces
2021-07-11T00:40:32.1202944Z # a directory with a symlink after the call to
2021-07-11T00:40:32.1203623Z # os.scandir or entry.is_dir above.
2021-07-11T00:40:32.1204303Z raise OSError(""Cannot call rmtree on a symbolic link"")
2021-07-11T00:40:32.1204942Z except OSError:
2021-07-11T00:40:32.1206416Z onerror(os.path.islink, fullname, sys.exc_info())
2021-07-11T00:40:32.1207022Z continue
2021-07-11T00:40:32.1207584Z _rmtree_unsafe(fullname, onerror)
2021-07-11T00:40:32.1208074Z else:
2021-07-11T00:40:32.1208496Z try:
2021-07-11T00:40:32.1208926Z > os.unlink(fullname)
2021-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'
2021-07-11T00:40:32.1210974Z
2021-07-11T00:40:32.1211638Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\shutil.py:616: PermissionError
2021-07-11T00:40:32.1212211Z
2021-07-11T00:40:32.1212846Z During handling of the above exception, another exception occurred:
2021-07-11T00:40:32.1213320Z
2021-07-11T00:40:32.1213797Z func =
2021-07-11T00:40:32.1214529Z path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpry729pq_\\data.db'
2021-07-11T00:40:32.1215763Z exc_info = (, PermissionError(13, 'The process cannot access the file because it is being used by another process'), )
2021-07-11T00:40:32.1217263Z
2021-07-11T00:40:32.1217777Z def onerror(func, path, exc_info):
2021-07-11T00:40:32.1218421Z if issubclass(exc_info[0], PermissionError):
2021-07-11T00:40:32.1219079Z def resetperms(path):
2021-07-11T00:40:32.1219518Z try:
2021-07-11T00:40:32.1219992Z _os.chflags(path, 0)
2021-07-11T00:40:32.1220535Z except AttributeError:
2021-07-11T00:40:32.1221110Z pass
2021-07-11T00:40:32.1221545Z _os.chmod(path, 0o700)
2021-07-11T00:40:32.1221984Z
2021-07-11T00:40:32.1222330Z try:
2021-07-11T00:40:32.1222768Z if path != name:
2021-07-11T00:40:32.1223332Z resetperms(_os.path.dirname(path))
2021-07-11T00:40:32.1223963Z resetperms(path)
2021-07-11T00:40:32.1224408Z
2021-07-11T00:40:32.1224749Z try:
2021-07-11T00:40:32.1225954Z > _os.unlink(path)
2021-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'
2021-07-11T00:40:32.1227927Z
2021-07-11T00:40:32.1228646Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\tempfile.py:802: PermissionError
2021-07-11T00:40:32.1229200Z
2021-07-11T00:40:32.1229842Z During handling of the above exception, another exception occurred:
2021-07-11T00:40:32.1230355Z
2021-07-11T00:40:32.1230783Z @pytest.fixture
2021-07-11T00:40:32.1231322Z def canned_write_client():
2021-07-11T00:40:32.1231805Z with make_app_client(
2021-07-11T00:40:32.1232467Z extra_databases={""data.db"": ""create table names (name text)""},
2021-07-11T00:40:32.1233104Z metadata={
2021-07-11T00:40:32.1233535Z ""databases"": {
2021-07-11T00:40:32.1233989Z ""data"": {
2021-07-11T00:40:32.1234416Z ""queries"": {
2021-07-11T00:40:32.1235001Z ""canned_read"": {""sql"": ""select * from names""},
2021-07-11T00:40:32.1235527Z ""add_name"": {
2021-07-11T00:40:32.1236117Z ""sql"": ""insert into names (name) values (:name)"",
2021-07-11T00:40:32.1236686Z ""write"": True,
2021-07-11T00:40:32.1237317Z ""on_success_redirect"": ""/data/add_name?success"",
2021-07-11T00:40:32.1237882Z },
2021-07-11T00:40:32.1238331Z ""add_name_specify_id"": {
2021-07-11T00:40:32.1239009Z ""sql"": ""insert into names (rowid, name) values (:rowid, :name)"",
2021-07-11T00:40:32.1239610Z ""write"": True,
2021-07-11T00:40:32.1240259Z ""on_error_redirect"": ""/data/add_name_specify_id?error"",
2021-07-11T00:40:32.1240839Z },
2021-07-11T00:40:32.1241320Z ""delete_name"": {
2021-07-11T00:40:32.1242504Z ""sql"": ""delete from names where rowid = :rowid"",
2021-07-11T00:40:32.1243127Z ""write"": True,
2021-07-11T00:40:32.1243721Z ""on_success_message"": ""Name deleted"",
2021-07-11T00:40:32.1244282Z ""allow"": {""id"": ""root""},
2021-07-11T00:40:32.1244749Z },
2021-07-11T00:40:32.1245959Z ""update_name"": {
2021-07-11T00:40:32.1246614Z ""sql"": ""update names set name = :name where rowid = :rowid"",
2021-07-11T00:40:32.1247267Z ""params"": [""rowid"", ""name"", ""extra""],
2021-07-11T00:40:32.1247828Z ""write"": True,
2021-07-11T00:40:32.1248247Z },
2021-07-11T00:40:32.1248653Z }
2021-07-11T00:40:32.1249166Z }
2021-07-11T00:40:32.1249577Z }
2021-07-11T00:40:32.1249962Z },
2021-07-11T00:40:32.1250333Z ) as client:
2021-07-11T00:40:32.1250822Z > yield client
2021-07-11T00:40:32.1251078Z
2021-07-11T00:40:32.1251678Z D:\a\datasette\datasette\tests\test_canned_queries.py:43:
2021-07-11T00:40:32.1252347Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2021-07-11T00:40:32.1253040Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\contextlib.py:120: in __exit__
2021-07-11T00:40:32.1253759Z next(self.gen)
2021-07-11T00:40:32.1254398Z D:\a\datasette\datasette\tests\fixtures.py:156: in make_app_client
2021-07-11T00:40:32.1255098Z yield TestClient(ds)
2021-07-11T00:40:32.1255796Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\tempfile.py:827: in __exit__
2021-07-11T00:40:32.1256510Z self.cleanup()
2021-07-11T00:40:32.1257200Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\tempfile.py:831: in cleanup
2021-07-11T00:40:32.1257961Z self._rmtree(self.name)
2021-07-11T00:40:32.1258712Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\tempfile.py:813: in _rmtree
2021-07-11T00:40:32.1259487Z _shutil.rmtree(name, onerror=onerror)
2021-07-11T00:40:32.1260280Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\shutil.py:740: in rmtree
2021-07-11T00:40:32.1261039Z return _rmtree_unsafe(path, onerror)
2021-07-11T00:40:32.1261843Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\shutil.py:618: in _rmtree_unsafe
2021-07-11T00:40:32.1262633Z onerror(os.unlink, fullname, sys.exc_info())
2021-07-11T00:40:32.1263456Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\tempfile.py:805: in onerror
2021-07-11T00:40:32.1264175Z cls._rmtree(path)
2021-07-11T00:40:32.1264848Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\tempfile.py:813: in _rmtree
2021-07-11T00:40:32.1266329Z _shutil.rmtree(name, onerror=onerror)
2021-07-11T00:40:32.1267082Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\shutil.py:740: in rmtree
2021-07-11T00:40:32.1267858Z return _rmtree_unsafe(path, onerror)
2021-07-11T00:40:32.1268615Z c:\hostedtoolcache\windows\python\3.8.10\x64\lib\shutil.py:599: in _rmtree_unsafe
2021-07-11T00:40:32.1269440Z onerror(os.scandir, path, sys.exc_info())
2021-07-11T00:40:32.1269979Z _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2021-07-11T00:40:32.1270287Z
2021-07-11T00:40:32.1270947Z path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpry729pq_\\data.db'
2021-07-11T00:40:32.1273356Z onerror = .onerror at 0x00000291FCF40E50>
2021-07-11T00:40:32.1273999Z
2021-07-11T00:40:32.1274493Z def _rmtree_unsafe(path, onerror):
2021-07-11T00:40:32.1274953Z try:
2021-07-11T00:40:32.1275461Z > with os.scandir(path) as scandir_it:
2021-07-11T00:40:32.1276459Z E NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpry729pq_\\data.db'
2021-07-11T00:40:32.1277220Z
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-877725742,https://api.github.com/repos/simonw/datasette/issues/511,877725742,MDEyOklzc3VlQ29tbWVudDg3NzcyNTc0Mg==,9599,2021-07-11T01:25:01Z,2021-07-11T01:26:38Z,OWNER,"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:
Also the test suite took 50 minutes on Windows!
Here's a copy of the full log file for the tests on Python 3.8 on Windows: https://gist.github.com/simonw/2900ef33693c1bbda09188eb31c8212d","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-877718364,https://api.github.com/repos/simonw/datasette/issues/511,877718364,MDEyOklzc3VlQ29tbWVudDg3NzcxODM2NA==,9599,2021-07-10T23:54:37Z,2021-07-10T23:54:37Z,OWNER,"Looks like it's not even 10% of the way through, and already a bunch of errors:
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-877718286,https://api.github.com/repos/simonw/datasette/issues/511,877718286,MDEyOklzc3VlQ29tbWVudDg3NzcxODI4Ng==,9599,2021-07-10T23:53:29Z,2021-07-10T23:53:29Z,OWNER,"Test suite on Windows seems to run a lot slower:
From https://github.com/simonw/datasette/actions/runs/1018938850 which is still going.
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-877717791,https://api.github.com/repos/simonw/datasette/issues/511,877717791,MDEyOklzc3VlQ29tbWVudDg3NzcxNzc5MQ==,9599,2021-07-10T23:45:35Z,2021-07-10T23:45:35Z,OWNER,"> Trying to run on Windows today, I get an error from the utils/asgi.py module.
>
> It's trying `from os import EX_CANTCREAT` which is Unix-only. I commented this line out, and (so far) it's working.
Good news: that line was removed in #1094.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-510559836,https://api.github.com/repos/simonw/datasette/issues/511,510559836,MDEyOklzc3VlQ29tbWVudDUxMDU1OTgzNg==,9599,2019-07-11T16:32:27Z,2019-07-11T16:32:27Z,OWNER,Travis CI supports Windows - Uvicorn is using it here: https://github.com/encode/uvicorn/blob/15c4e9cfe2d996bd73ed6b542e44160f620b9519/.travis.yml,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-510559337,https://api.github.com/repos/simonw/datasette/issues/511,510559337,MDEyOklzc3VlQ29tbWVudDUxMDU1OTMzNw==,9599,2019-07-11T16:31:06Z,2019-07-11T16:31:06Z,OWNER,@abdusco you mentioned Windows in #554 - can you confirm that Datasette is Windows compatible as of v0.29?,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-504863286,https://api.github.com/repos/simonw/datasette/issues/511,504863286,MDEyOklzc3VlQ29tbWVudDUwNDg2MzI4Ng==,9599,2019-06-24T05:30:02Z,2019-06-24T05:30:02Z,OWNER,I've landed #272 - need to manually test if it works on Windows now!,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,
https://github.com/simonw/datasette/issues/511#issuecomment-502420036,https://api.github.com/repos/simonw/datasette/issues/511,502420036,MDEyOklzc3VlQ29tbWVudDUwMjQyMDAzNg==,9599,2019-06-16T04:51:39Z,2019-06-16T04:52:14Z,OWNER,It looks like AppVeyor is the right solution for Windows CI. I've set up a Datasette project there but I do t yet have the configuration figured out (plus Datasette won't work on windows yet anyway): https://ci.appveyor.com/project/simonw/datasette,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",456578474,