edgedb/edgedb-go

API Enhancement: Make the config edgedb.toml path passable

4thel00z opened this issue · 1 comments

Describe the bug
Currently CreateClientDSN hardcodes the config locations, which could be an optional default param:

func CreateClientDSN(ctx context.Context, dsn string, opts Options) (*Client, error) { // nolint:gocritic,lll
	cfg, err := parseConnectDSNAndArgs(dsn, &opts, newCfgPaths())

Which creates:

<some date> edgedb.ConfigurationError: no `edgedb.toml` found and no connection options specified either via arguments to connect API or via environment variables EDGEDB_HOST/EDGEDB_PORT, EDGEDB_INSTANCE, EDGEDB_DSN or EDGEDB_CREDENTIALS_FILE

This implies a certain dir structure, which might not be what you want for your project.

Reproduction

Create an empty project, throw this in main.go

package main

import (
	"context"
	"github.com/edgedb/edgedb-go"
	"log"
)

func main() {
	ctx := context.Background()
	client, err := edgedb.CreateClient(ctx, edgedb.Options{})
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()

}

Expected behavior

I can provide a value (potentially, via edgedb.Options that is respected and thrown into resolveTOML:

func (r *configResolver) resolveTOML(paths *cfgPaths) error {
	toml, err := findEdgeDBTOML(paths)
	if err != nil {
		return err
	}

	stashDir, err := stashPath(filepath.Dir(toml), paths)
	if err != nil {
		return err
	}
	
	// snip...

Happy to contribute

Versions (please complete the following information):

  • OS : Linux/x64
  • EdgeDB version: 2.15+75c3494
  • EdgeDB CLI version: EdgeDB CLI 3.1.0+69bd230
  • edgedb-go version: github.com/edgedb/edgedb-go v0.13.6
  • Go version: 1.20

Additional context
Add any other context about the problem here.

fmoor commented

Thanks for opening this issue @4thel00z! We will consider adding this feature. In the mean time you can work around this by setting the EDGEDB_INSTANCE environment variable to the name of your project instance.