Skip to content

Commit

Permalink
Merge pull request #2354 from posit-dev/dotnomad/cfg-fill-defaults
Browse files Browse the repository at this point in the history
Set R and Python Config defaults
  • Loading branch information
dotNomad authored Oct 8, 2024
2 parents 5445e9e + fa07fcf commit 5856752
Show file tree
Hide file tree
Showing 8 changed files with 129 additions and 14 deletions.
17 changes: 11 additions & 6 deletions extensions/vscode/src/views/homeView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -680,12 +680,15 @@ export class HomeViewProvider implements WebviewViewProvider, Disposable {
return;
}

const relPathPackageFile =
activeConfiguration.configuration.python?.packageFile;
if (relPathPackageFile === undefined) {
// Project is not configured for Python so cannot scan
// Scan button is not visible when this is the case
if (!activeConfiguration.configuration.python) {
return;
}

const relPathPackageFile =
activeConfiguration.configuration.python.packageFile;

const fileUri = Uri.joinPath(
this.root.uri,
activeConfiguration.projectDir,
Expand Down Expand Up @@ -747,12 +750,14 @@ export class HomeViewProvider implements WebviewViewProvider, Disposable {
return;
}

const relPathPackageFile =
activeConfiguration?.configuration.r?.packageFile;
if (relPathPackageFile === undefined) {
// Project is not configured for R so cannot scan
// Scan button is not visible when this is the case
if (!activeConfiguration.configuration.r) {
return;
}

const relPathPackageFile = activeConfiguration.configuration.r.packageFile;

const fileUri = Uri.joinPath(
this.root.uri,
activeConfiguration.projectDir,
Expand Down
21 changes: 21 additions & 0 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ func FromFile(path util.AbsolutePath) (*Config, error) {
if err != nil {
return nil, err
}
cfg.FillDefaults()
cfg.Comments, err = readLeadingComments(path)
if err != nil {
return nil, err
Expand Down Expand Up @@ -108,6 +109,26 @@ func (cfg *Config) WriteFile(path util.AbsolutePath) error {
return cfg.Write(f)
}

func (cfg *Config) FillDefaults() {
if cfg.R != nil {
if cfg.R.PackageFile == "" {
cfg.R.PackageFile = "renv.lock"
}
if cfg.R.PackageManager == "" {
cfg.R.PackageManager = "renv"
}
}

if cfg.Python != nil {
if cfg.Python.PackageFile == "" {
cfg.Python.PackageFile = "requirements.txt"
}
if cfg.Python.PackageManager == "" {
cfg.Python.PackageManager = "pip"
}
}
}

func (cfg *Config) AddSecret(secret string) error {
// Check if the secret already exists before adding
for _, s := range cfg.Secrets {
Expand Down
79 changes: 79 additions & 0 deletions internal/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,42 @@ func (s *ConfigSuite) TestFromExampleFile() {
s.Equal(true, *valuePtr)
}

func (s *ConfigSuite) TestFromFileFillsDefaultsForPython() {
configFile := GetConfigPath(s.cwd, "defaults")
cfg := New()
cfg.Type = "python-streamlit"
cfg.Entrypoint = "app.py"
cfg.Python = &Python{
Version: "3.4.5",
}
err := cfg.WriteFile(configFile)
s.NoError(err)

cfgFromFile, err := FromFile(configFile)
s.NoError(err)
s.NotNil(cfgFromFile)
s.Equal(cfgFromFile.Python.PackageFile, "requirements.txt")
s.Equal(cfgFromFile.Python.PackageManager, "pip")
}

func (s *ConfigSuite) TestFromFileFillsDefaultsForR() {
configFile := GetConfigPath(s.cwd, "defaults")
cfg := New()
cfg.Type = "r-shiny"
cfg.Entrypoint = "app.R"
cfg.R = &R{
Version: "4.4.1",
}
err := cfg.WriteFile(configFile)
s.NoError(err)

cfgFromFile, err := FromFile(configFile)
s.NoError(err)
s.NotNil(cfgFromFile)
s.Equal(cfgFromFile.R.PackageFile, "renv.lock")
s.Equal(cfgFromFile.R.PackageManager, "renv")
}

func (s *ConfigSuite) TestFromFileErr() {
cfg, err := FromFile(s.cwd.Join("nonexistent.toml"))
s.ErrorIs(err, fs.ErrNotExist)
Expand Down Expand Up @@ -157,6 +193,49 @@ func (s *ConfigSuite) TestReadComments() {
s.Equal([]string{" These are comments.", " They will be preserved."}, cfg.Comments)
}

func (s *ConfigSuite) TestFillDefaultsDoesNotAddROrPythonSection() {
cfg := New()
cfg.FillDefaults()
s.Nil(cfg.R)
s.Nil(cfg.Python)
}

func (s *ConfigSuite) TestFillDefaultsAddsPackageFileAndPackageManager() {
cfg := New()
cfg.R = &R{Version: "4.4.1"}
cfg.Python = &Python{Version: "3.12.7"}
cfg.FillDefaults()

s.NotNil(cfg.R)
s.NotNil(cfg.Python)

s.Equal(cfg.R.Version, "4.4.1")
s.Equal(cfg.R.PackageFile, "renv.lock")
s.Equal(cfg.R.PackageManager, "renv")

s.Equal(cfg.Python.Version, "3.12.7")
s.Equal(cfg.Python.PackageFile, "requirements.txt")
s.Equal(cfg.Python.PackageManager, "pip")
}

func (s *ConfigSuite) TestFillDefaultsDoesNotOverwrite() {
cfg := New()
cfg.R = &R{Version: "4.4.1", PackageFile: "custom.lock", PackageManager: "custom"}
cfg.Python = &Python{Version: "3.12.7", PackageFile: "custom.txt", PackageManager: "custom"}
cfg.FillDefaults()

s.NotNil(cfg.R)
s.NotNil(cfg.Python)

s.Equal(cfg.R.Version, "4.4.1")
s.Equal(cfg.R.PackageFile, "custom.lock")
s.Equal(cfg.R.PackageManager, "custom")

s.Equal(cfg.Python.Version, "3.12.7")
s.Equal(cfg.Python.PackageFile, "custom.txt")
s.Equal(cfg.Python.PackageManager, "custom")
}

func (s *ConfigSuite) TestApplySecretActionAdd() {
cfg := New()
cfg.Secrets = []string{}
Expand Down
8 changes: 4 additions & 4 deletions internal/config/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,14 +117,14 @@ type Environment = map[string]string

type Python struct {
Version string `toml:"version" json:"version"`
PackageFile string `toml:"package_file" json:"packageFile"`
PackageManager string `toml:"package_manager" json:"packageManager"`
PackageFile string `toml:"package_file,omitempty" json:"packageFile"`
PackageManager string `toml:"package_manager,omitempty" json:"packageManager"`
}

type R struct {
Version string `toml:"version" json:"version"`
PackageFile string `toml:"package_file" json:"packageFile"`
PackageManager string `toml:"package_manager" json:"packageManager"`
PackageFile string `toml:"package_file,omitempty" json:"packageFile"`
PackageManager string `toml:"package_manager,omitempty" json:"packageManager"`
}

type Quarto struct {
Expand Down
1 change: 1 addition & 0 deletions internal/initialize/initialize_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ func (s *InitializeSuite) TestInitIfNeededWhenNotNeeded() {
PackageManager: "pip",
}
cfg.WriteFile(configPath)
cfg.FillDefaults()

PythonInspectorFactory = func(util.AbsolutePath, util.Path, logging.Logger) inspect.PythonInspector {
return &inspect.MockPythonInspector{}
Expand Down
4 changes: 3 additions & 1 deletion internal/services/api/get_configuration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,9 @@ func (s *GetConfigurationuite) makeConfiguration(name string) *config.Config {
}
err := cfg.WriteFile(path)
s.NoError(err)
return cfg
r, err := config.FromFile(path)
s.NoError(err)
return r
}

func (s *GetConfigurationuite) TestGetConfiguration() {
Expand Down
8 changes: 6 additions & 2 deletions internal/services/api/get_configurations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,9 @@ func (s *GetConfigurationsSuite) makeConfiguration(name string) *config.Config {
}
err := cfg.WriteFile(path)
s.NoError(err)
return cfg
r, err := config.FromFile(path)
s.NoError(err)
return r
}

func (s *GetConfigurationsSuite) TestGetConfigurations() {
Expand Down Expand Up @@ -214,7 +216,9 @@ func (s *GetConfigurationsSuite) makeSubdirConfiguration(name string, subdir str
}
err = cfg.WriteFile(path)
s.NoError(err)
return cfg
r, err := config.FromFile(path)
s.NoError(err)
return r
}

func (s *GetConfigurationsSuite) TestGetConfigurationsRecursive() {
Expand Down
5 changes: 4 additions & 1 deletion internal/state/state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,9 @@ func (s *StateSuite) makeConfiguration(name string) *config.Config {
}
err := cfg.WriteFile(path)
s.NoError(err)
return cfg
r, err := config.FromFile(path)
s.NoError(err)
return r
}

func (s *StateSuite) makeConfigurationWithSecrets(name string, secrets []string) *config.Config {
Expand Down Expand Up @@ -424,6 +426,7 @@ func (s *StateSuite) TestNewWithTargetAndAccount() {
s.Equal("savedConfigName", state.ConfigName)
s.Equal("myTargetName", state.TargetName)
s.Equal(&acct2, state.Account)

s.Equal(cfg, state.Config)
s.Equal(d, state.Target)
}
Expand Down

0 comments on commit 5856752

Please sign in to comment.