edgedb / edgedb-python

The official Python client library for EdgeDB
https://edgedb.com
Apache License 2.0
366 stars 43 forks source link

Type annotations #23

Closed florimondmanca closed 5 years ago

florimondmanca commented 5 years ago

Hi!

First, thanks for all the great work on EdgeDB. The Python driver looks fab, and I especially like the built-in async support.


Problem description From what I've seen, edgedb-python public-facing APIs do not provide type annotations. I discovered this by using edgedb.async_connect() and wondering why my editor wouldn't autocomplete the con object.

Proposed solution Since edgedb-python is targeting Python 3.6+, I believe it should fully embrace type hints. Adding these would add a lot in terms of IDE support and developer productivity.

Implementation ideas If not, I'd be very glad to give a helping hand adding these to the library. The PR might be quite big — should we consider splitting the work by tackling public-facing APIs only first? Let me know!

1st1 commented 5 years ago

First, thanks for all the great work on EdgeDB. The Python driver looks fab, and I especially like the built-in async support.

Thanks :)

why my editor wouldn't autocomplete the con object.

Maybe we should just partially type it (the Connection and Transaction types)? Typing everything might not be easy because a lot of the code is written in Cython...

funkyfuture commented 5 years ago

tackling public-facing APIs only first

for your described problem annotating the public api only would be sufficient and be indeed a very charming feature. for the non-public parts, leaving it with no annotations can be a compromise as the typing ecosystem isn't mature yet (while continuously improving) and some phenomena aren't annotable with beauty.

florimondmanca commented 5 years ago

Thanks to both for your prompt replies!

Maybe we should just partially type it (the Connection and Transaction types)?

I see! After looking at the docs again, the connection and transaction objects seem to be the main APIs indeed, so only annotating these would already be a great step forward.

1st1 commented 5 years ago

After looking at the docs again, the connection and transaction objects seem to be the main APIs indeed, so only annotating these would already be a great step forward.

Feel free to go ahead and submit a PR! We can then release an updated version shortly.

florimondmanca commented 5 years ago

I tried setting up the project as described in Developing EdgeDB, but unfortunately I am running into issues when building EdgeDB:

$ pip install -v -e ".[docs,test]"
...
Installing collected packages: edgedb-server
  Running setup.py develop for edgedb-server
    Running command /Users/Florimond/Developer/python-projects/edgedb/venv/bin/python -c 'import setuptools, tokenize;__file__='"'"'/Users/Florimond/Developer/python-projects/edgedb/edgedb/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps
    running develop
    Parsing.Spec: Introspecting to acquire formal grammar specification...
    Parsing.Spec: 194 tokens, 369 non-terminals, 1077 productions
    Parsing.Spec: Attempting to use pickle from file "build/lib/edb/edgeql/parser/grammar/single.pickle"...
    Parsing.Spec: Pickle open failed: Exception <class 'FileNotFoundError'>: [Errno 2] No such file or directory: 'build/lib/edb/edgeql/parser/grammar/single.pickle'

And indeed, the file doesn't exist:

$ tree build
build
└── lib
    └── edb
        └── edgeql
            └── parser
                └── grammar

5 directories, 0 files

I am running macOS Mojave and Python 3.7.2. Any idea where that might come from?

elprans commented 5 years ago

@florimondmanca Is that the only output you got? Missing parser pickle is expected on a fresh build.

florimondmanca commented 5 years ago

@elprans No it's not, but the initial output was extremely large. I ran the command again, and here's what I've got (in full):

$ pip install -v -e ".[test,docs]"
Created temporary directory: /private/var/folders/ld/jnnnnsfd7r7cyvbwygss3blw0000gn/T/pip-ephem-wheel-cache-m_6gkb23
Created temporary directory: /private/var/folders/ld/jnnnnsfd7r7cyvbwygss3blw0000gn/T/pip-req-tracker-a0xxstki
Created requirements tracker '/private/var/folders/ld/jnnnnsfd7r7cyvbwygss3blw0000gn/T/pip-req-tracker-a0xxstki'
Created temporary directory: /private/var/folders/ld/jnnnnsfd7r7cyvbwygss3blw0000gn/T/pip-install-1tu6zglc
Obtaining file:///Users/Florimond/Developer/python-projects/edgedb/edgedb
  Added file:///Users/Florimond/Developer/python-projects/edgedb/edgedb to build tracker '/private/var/folders/ld/jnnnnsfd7r7cyvbwygss3blw0000gn/T/pip-req-tracker-a0xxstki'
    Running setup.py (path:/Users/Florimond/Developer/python-projects/edgedb/edgedb/setup.py) egg_info for package from file:///Users/Florimond/Developer/python-projects/edgedb/edgedb
    Running command python setup.py egg_info
    running egg_info
    writing edgedb_server.egg-info/PKG-INFO
    writing dependency_links to edgedb_server.egg-info/dependency_links.txt
    writing entry points to edgedb_server.egg-info/entry_points.txt
    writing requirements to edgedb_server.egg-info/requires.txt
    writing top-level names to edgedb_server.egg-info/top_level.txt
    Compiling edb/server/pgproto/pgproto.pyx because it changed.
    Compiling edb/server/dbview/dbview.pyx because it changed.
    Compiling edb/server/mng_port/edgecon.pyx because it changed.
    Compiling edb/server/cache/stmt_cache.pyx because it changed.
    Compiling edb/server/pgcon/pgcon.pyx because it changed.
    Compiling edb/server/http/http.pyx because it changed.
    Compiling edb/server/http_edgeql_port/protocol.pyx because it changed.
    Compiling edb/server/http_graphql_port/protocol.pyx because it changed.
    [1/8] Cythonizing edb/server/cache/stmt_cache.pyx
    [2/8] Cythonizing edb/server/dbview/dbview.pyx
    [3/8] Cythonizing edb/server/http/http.pyx
    [4/8] Cythonizing edb/server/http_edgeql_port/protocol.pyx
    [5/8] Cythonizing edb/server/http_graphql_port/protocol.pyx
    [6/8] Cythonizing edb/server/mng_port/edgecon.pyx
    [7/8] Cythonizing edb/server/pgcon/pgcon.pyx
    [8/8] Cythonizing edb/server/pgproto/pgproto.pyx
    reading manifest template 'MANIFEST.in'
    warning: no files found matching '*.esdl' under directory 'edb'
    writing manifest file 'edgedb_server.egg-info/SOURCES.txt'
  Source in /Users/Florimond/Developer/python-projects/edgedb/edgedb has version 1.0a2.dev76+gcb46f983, which satisfies requirement edgedb-server==1.0a2.dev76+gcb46f983 from file:///Users/Florimond/Developer/python-projects/edgedb/edgedb
  Removed edgedb-server==1.0a2.dev76+gcb46f983 from file:///Users/Florimond/Developer/python-projects/edgedb/edgedb from build tracker '/private/var/folders/ld/jnnnnsfd7r7cyvbwygss3blw0000gn/T/pip-req-tracker-a0xxstki'
  Installing extra requirements: 'docs,test'
Requirement already satisfied: asyncpg~=0.18.2 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (0.18.3)
Requirement already satisfied: click~=6.7 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (6.7)
Requirement already satisfied: httptools>=0.0.13 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (0.0.13)
Requirement already satisfied: immutables>=0.9 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (0.9)
Requirement already satisfied: parsing~=1.6.1 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (1.6.1)
Requirement already satisfied: prompt_toolkit>=2.0.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (2.0.9)
Requirement already satisfied: psutil~=5.6.1 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (5.6.3)
Requirement already satisfied: Pygments~=2.3.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (2.3.1)
Requirement already satisfied: setproctitle~=1.1.10 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (1.1.10)
Requirement already satisfied: setuptools_scm~=3.2.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (3.2.0)
Requirement already satisfied: uvloop~=0.12.2 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (0.12.2)
Requirement already satisfied: graphql-core~=2.1.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (2.1)
Requirement already satisfied: promise~=2.2.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (2.2.1)
Requirement already satisfied: edgedb~=0.6.1 in /Users/Florimond/Developer/python-projects/edgedb/edgedb-python (from edgedb-server==1.0a2.dev76+gcb46f983) (0.6.1)
Requirement already satisfied: Sphinx~=2.0.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (2.0.1)
Requirement already satisfied: lxml~=4.2.5 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (4.2.6)
Requirement already satisfied: sphinxcontrib-asyncio~=0.2.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (0.2.0)
Requirement already satisfied: flake8~=3.7.5 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (3.7.7)
Requirement already satisfied: pycodestyle~=2.5.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (2.5.0)
Requirement already satisfied: coverage~=4.5.2 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (4.5.3)
Requirement already satisfied: requests-xml~=0.2.3 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from edgedb-server==1.0a2.dev76+gcb46f983) (0.2.3)
Requirement already satisfied: six>=1.8.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from parsing~=1.6.1->edgedb-server==1.0a2.dev76+gcb46f983) (1.12.0)
Requirement already satisfied: wcwidth in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from prompt_toolkit>=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (0.1.7)
Requirement already satisfied: rx>=1.6.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from graphql-core~=2.1.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.6.1)
Requirement already satisfied: snowballstemmer>=1.1 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.2.1)
Requirement already satisfied: packaging in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (19.0)
Requirement already satisfied: requests>=2.5.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (2.22.0)
Requirement already satisfied: sphinxcontrib-qthelp in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.0.2)
Requirement already satisfied: sphinxcontrib-serializinghtml in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.1.3)
Requirement already satisfied: docutils>=0.12 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (0.14)
Requirement already satisfied: imagesize in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.1.0)
Requirement already satisfied: sphinxcontrib-applehelp in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.0.1)
Requirement already satisfied: sphinxcontrib-jsmath in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.0.1)
Requirement already satisfied: alabaster<0.8,>=0.7 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (0.7.12)
Requirement already satisfied: setuptools in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (40.6.2)
Requirement already satisfied: sphinxcontrib-htmlhelp in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.0.2)
Requirement already satisfied: sphinxcontrib-devhelp in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.0.1)
Requirement already satisfied: Jinja2>=2.3 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (2.10.1)
Requirement already satisfied: babel!=2.0,>=1.3 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (2.7.0)
Requirement already satisfied: entrypoints<0.4.0,>=0.3.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from flake8~=3.7.5->edgedb-server==1.0a2.dev76+gcb46f983) (0.3)
Requirement already satisfied: pyflakes<2.2.0,>=2.1.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from flake8~=3.7.5->edgedb-server==1.0a2.dev76+gcb46f983) (2.1.1)
Requirement already satisfied: mccabe<0.7.0,>=0.6.0 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from flake8~=3.7.5->edgedb-server==1.0a2.dev76+gcb46f983) (0.6.1)
Requirement already satisfied: xmljson in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests-xml~=0.2.3->edgedb-server==1.0a2.dev76+gcb46f983) (0.2.0)
Requirement already satisfied: parse in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests-xml~=0.2.3->edgedb-server==1.0a2.dev76+gcb46f983) (1.12.0)
Requirement already satisfied: pyquery in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests-xml~=0.2.3->edgedb-server==1.0a2.dev76+gcb46f983) (1.4.0)
Requirement already satisfied: w3lib in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests-xml~=0.2.3->edgedb-server==1.0a2.dev76+gcb46f983) (1.20.0)
Requirement already satisfied: fake-useragent in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests-xml~=0.2.3->edgedb-server==1.0a2.dev76+gcb46f983) (0.1.11)
Requirement already satisfied: pyparsing>=2.0.2 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from packaging->Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (2.4.0)
Requirement already satisfied: certifi>=2017.4.17 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests>=2.5.0->Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (2019.6.16)
Requirement already satisfied: idna<2.9,>=2.5 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests>=2.5.0->Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (2.8)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests>=2.5.0->Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.25.3)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from requests>=2.5.0->Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (3.0.4)
Requirement already satisfied: MarkupSafe>=0.23 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from Jinja2>=2.3->Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (1.1.1)
Requirement already satisfied: pytz>=2015.7 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from babel!=2.0,>=1.3->Sphinx~=2.0.0->edgedb-server==1.0a2.dev76+gcb46f983) (2019.1)
Requirement already satisfied: cssselect>0.7.9 in /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages (from pyquery->requests-xml~=0.2.3->edgedb-server==1.0a2.dev76+gcb46f983) (1.0.3)
Installing collected packages: edgedb-server
  Running setup.py develop for edgedb-server
    Running command /Users/Florimond/Developer/python-projects/edgedb/venv/bin/python -c 'import setuptools, tokenize;__file__='"'"'/Users/Florimond/Developer/python-projects/edgedb/edgedb/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps
    running develop
    Parsing.Spec: Introspecting to acquire formal grammar specification...
    Parsing.Spec: 194 tokens, 369 non-terminals, 1077 productions
    Parsing.Spec: Attempting to use pickle from file "build/lib/edb/edgeql/parser/grammar/single.pickle"...
    Parsing.Spec: Pickle open failed: Exception <class 'FileNotFoundError'>: [Errno 2] No such file or directory: 'build/lib/edb/edgeql/parser/grammar/single.pickle'

I've never worked on a Cythonized project before so this is all pretty new to me.

elprans commented 5 years ago

You aren't interrupting it, are you? If may appear to hang after that message, but it's not, the parsers are getting built and that takes a while.

florimondmanca commented 5 years ago

@elprans Actually I was! 🤦‍♂ Thanks.

I've just run into in another issue when running edb test:

Collected 2333/2333 tests.
Using up to 2 processes to run tests.
Populating test databases... server bootstrap did not complete successfully, removing the data directory
================================ Exception occurred: role "florimond" does not exist ================================

1. asyncpg.exceptions.UndefinedObjectError: role "florimond" does not exist

----------------------------------------------------- Traceback -----------------------------------------------------

    /Users/Florimond/.pyenv/versions/3.7.2/lib/python3.7/runpy.py, line 193, in _run_module_as_main
        > "__main__", mod_spec)
    /Users/Florimond/.pyenv/versions/3.7.2/lib/python3.7/runpy.py, line 85, in _run_code
        > exec(code, run_globals)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/main.py, line 425, in <module>
        > main()
    /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py, line 722, in __call__
        > return self.main(*args, **kwargs)
    /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py, line 697, in main
        > rv = self.invoke(ctx)
    /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py, line 895, in invoke
        > return ctx.invoke(self.callback, **ctx.params)
    /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py, line 535, in invoke
        > return callback(*args, **kwargs)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/main.py, line 416, in main
        > server_main(**kwargs)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/main.py, line 408, in server_main
        > run_server(kwargs)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/main.py, line 287, in run_server
        > need_cluster_restart = _init_cluster(cluster, args)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/main.py, line 116, in _init_cluster
        > need_restart = asyncio.run(bootstrap.bootstrap(cluster, bootstrap_args))
    /Users/Florimond/.pyenv/versions/3.7.2/lib/python3.7/asyncio/runners.py, line 43, in run
        > return loop.run_until_complete(main)
    uvloop/loop.pyx, line 1451, in uvloop.loop.Loop.run_until_complete

    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/bootstrap.py, line 589, in bootstrap
        > cluster=cluster)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/bootstrap.py, line 498, in _ensure_edgedb_database
        > await _execute_block(conn, block)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/bootstrap.py, line 80, in _execute_block
        > await _execute(conn, sql_text)
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/bootstrap.py, line 72, in _execute
        > return await _statement(conn, query, *args, method='execute')
    /Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/bootstrap.py, line 68, in _statement
        > return await getattr(conn, method)(query, *args)
    /Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/asyncpg/connection.py, line 273, in execute
        > return await self._protocol.query(query, timeout)
    asyncpg/protocol/protocol.pyx, line 316, in query

asyncpg.exceptions.UndefinedObjectError: role "florimond" does not exist

Shutting down test cluster... OK.
Traceback (most recent call last):
  File "/Users/Florimond/Developer/python-projects/edgedb/venv/bin/edb", line 11, in <module>
    load_entry_point('edgedb-server', 'console_scripts', 'edb')()
  File "/Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/Florimond/Developer/python-projects/edgedb/venv/lib/python3.7/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/tools/test/__init__.py", line 165, in test
    result = test_runner.run(suite)
  File "/Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/tools/test/runner.py", line 696, in run
    return self._run(test)
  File "/Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/tools/test/runner.py", line 713, in _run
    cluster = tb._init_cluster(cleanup_atexit=False)
  File "/Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/testbase/server.py", line 201, in _init_cluster
    cluster.init(server_settings=init_settings)
  File "/Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/cluster.py", line 164, in init
    self._init(self._pg_cluster)
  File "/Users/Florimond/Developer/python-projects/edgedb/edgedb/edb/server/cluster.py", line 214, in _init
    f'edgedb-server --bootstrap failed with '
edb.server.cluster.ClusterError: edgedb-server --bootstrap failed with exit code 1

(I'm getting the same output from edb inittestdb.)

I traced this down to the execution of this line. The SQL command does contain my username, capitalized correctly:

CREATE DATABASE "Florimond" WITH TEMPLATE=edgedb0  OWNER=Florimond;

I figured this was the opportunity to finally lowercase my account username, so I did, and now tests pass, so I'm all set!

In retrospect, maybe the lack of quotes around the owner was the culprit — I didn't think of it before I changed usernames, so now it's hard to verify.

elprans commented 5 years ago

Missing quotes around the owner ident is a bug, I pushed a fix for that.