lang: funcs: Add a weekday function to the datetime package

This returns the day of the week. It also includes a helpful example
demonstrating how this functionality can be fun!
This commit is contained in:
James Shubin
2019-05-06 06:24:07 -04:00
parent 43839d1090
commit fc6032d3b7
2 changed files with 79 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
import "datetime"
import "fmt"
$now = datetime.now()
$day = datetime.weekday($now)
$is_friday = $day == "friday"
$s1 = template("Hello! It is now: {{ datetime_print . }}\n", $now)
$s2 = if $is_friday {
"It's friday!!! (don't break anything, read-only)"
} else {
if $day == "saturday" || $day == "sunday" {
"It's the weekend!"
} else {
fmt.printf("Unfortunately, it is %s. Go to work!", $day)
}
}
print "msg" {
msg => $s1 + $s2,
}
file "/tmp/files/" {
state => "exists",
mode => if $is_friday { # this updates the mode, the instant it changes!
"0550"
} else {
"0770"
},
}

View File

@@ -0,0 +1,49 @@
// Mgmt
// Copyright (C) 2013-2019+ James Shubin and the project contributors
// Written by James Shubin <james@shubin.ca> and the project contributors
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package coredatetime
import (
"fmt"
"strings"
"time"
"github.com/purpleidea/mgmt/lang/funcs/simple"
"github.com/purpleidea/mgmt/lang/types"
)
func init() {
simple.ModuleRegister(moduleName, "weekday", &types.FuncValue{
T: types.NewType("func(a int) str"),
V: Weekday,
})
}
// Weekday returns the lowercased day of the week corresponding to the input
// time. The time is the number of seconds since the epoch, and matches what
// comes from our Now function.
func Weekday(input []types.Value) (types.Value, error) {
epochDelta := input[0].Int()
if epochDelta < 0 {
return nil, fmt.Errorf("epoch delta must be positive")
}
weekday := time.Unix(epochDelta, 0).Weekday()
return &types.StrValue{
V: strings.ToLower(weekday.String()),
}, nil
}