mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-07 15:11:03 +00:00
script: implementation of error insertion on return (#986)
* exchanges/account: shift credentials to account package and segregate funds to keys * merge: fixes * linter: fix * Update exchanges/account/account.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits + protection for string panic * glorious_suggestion: add method for matching keys * linter: fix tests * account: add protected method for credentials minimizing access, display full account details to rpc. * linter: spelling kweeeeeeen * accounts/portfolio: clean/check portfolio code and quickly check balances from change. Add protected method for future matching. * accounts: theres no point in pointerising everything * linter: ok pointerise this then... * exchanges: fix regression add in little notes. * glorious: nits * Update exchanges/account/credentials.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/account/credentials_test.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/account/credentials_test.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits * gloriously: fix glorious glorious test gloriously * script: initial implementation of error insertion on return * script: make script context aware(ish) and update error handle in examples * script: add tests * script: add syntax highlighting to readme * Update gctscript/vm/vm.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/vm/vm.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/examples/exchange/account_info.gct Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/examples/exchange/cancel_order.gct Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/examples/verbose.gct Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct_test.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits * rm: bros * scripts: handle errors in examples when they are going to use the data after fetching * linter: fix rides again * SCOTT_SPELL_CHECK_LINTER: fix * gctscript: fix tests * glorious: niiiiiiiiiiiiits * scriptmodules/gct: standardize runtime errors * Update gctscript/modules/gct/exchange.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/exchange.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/exchange.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/exchange.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update gctscript/modules/gct/gct.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits/reverts * go mod: tidy Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io> Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -59,6 +59,26 @@ func WriteAsCSV(args ...objects.Object) (objects.Object, error) {
|
||||
case indicators.OHLCV:
|
||||
temp, err = convertOHLCV(args[i])
|
||||
front = true
|
||||
case "scriptContext":
|
||||
if target != "" {
|
||||
return nil, fmt.Errorf("filename already set, extra string %v cannot be processed", args[i])
|
||||
}
|
||||
scriptCtx, ok := objects.ToInterface(args[i]).(*Context)
|
||||
if !ok {
|
||||
return nil, common.GetAssertError("*gct.Context", args[i])
|
||||
}
|
||||
|
||||
scriptDetails, ok := scriptCtx.Value["script"]
|
||||
if !ok {
|
||||
return nil, errors.New("no script details")
|
||||
}
|
||||
|
||||
target, ok = objects.ToString(scriptDetails)
|
||||
if !ok {
|
||||
return nil, errors.New("failed to convert incoming output to string")
|
||||
}
|
||||
|
||||
target = processTarget(target)
|
||||
case "string":
|
||||
if target != "" {
|
||||
return nil, fmt.Errorf("filename already set, extra string %v cannot be processed", args[i])
|
||||
@@ -73,26 +93,7 @@ func WriteAsCSV(args ...objects.Object) (objects.Object, error) {
|
||||
return nil, errors.New("script context details not specified")
|
||||
}
|
||||
|
||||
// Removes file transversal
|
||||
target = filepath.Base(target)
|
||||
|
||||
// checks to see if file is context defined, if not it will allow
|
||||
// a client defined filename and append a date, forces the use of
|
||||
// .csv file extension
|
||||
switch {
|
||||
case filepath.Ext(target) != ".csv" && strings.Contains(target, common.GctExt):
|
||||
target += ".csv"
|
||||
case filepath.Ext(target) == ".csv":
|
||||
s := strings.Split(target, ".")
|
||||
if len(s) == 2 {
|
||||
target = s[0] + "-" + strconv.FormatInt(time.Now().UnixNano(), 10) + ".csv"
|
||||
}
|
||||
default:
|
||||
target += "-" + strconv.FormatInt(time.Now().UnixNano(), 10) + ".csv"
|
||||
}
|
||||
|
||||
target = filepath.Join(OutputDir, target)
|
||||
|
||||
target = processTarget(target)
|
||||
default:
|
||||
err = fmt.Errorf("%s type is not handled", args[i].TypeName())
|
||||
}
|
||||
@@ -130,7 +131,7 @@ func WriteAsCSV(args ...objects.Object) (objects.Object, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Infof(log.GCTScriptMgr,
|
||||
log.Debugf(log.GCTScriptMgr,
|
||||
"CSV file successfully saved to: %s",
|
||||
target)
|
||||
return nil, nil
|
||||
@@ -484,3 +485,24 @@ func convertOHLCV(a objects.Object) ([][]string, error) {
|
||||
}
|
||||
return bucket, nil
|
||||
}
|
||||
|
||||
func processTarget(target string) string {
|
||||
// Removes file transversal
|
||||
target = filepath.Base(target)
|
||||
|
||||
// checks to see if file is context defined, if not it will allow
|
||||
// a client defined filename and append a date, forces the use of
|
||||
// .csv file extension
|
||||
switch {
|
||||
case filepath.Ext(target) != ".csv" && strings.Contains(target, common.GctExt):
|
||||
target += ".csv"
|
||||
case filepath.Ext(target) == ".csv":
|
||||
s := strings.Split(target, ".")
|
||||
if len(s) == 2 {
|
||||
target = s[0] + "-" + strconv.FormatInt(time.Now().UnixNano(), 10) + ".csv"
|
||||
}
|
||||
default:
|
||||
target += "-" + strconv.FormatInt(time.Now().UnixNano(), 10) + ".csv"
|
||||
}
|
||||
return filepath.Join(OutputDir, target)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user