Skip to content

Commit b87f90e

Browse files
committed
Improve CeleryScript support for resource variables in Lua
1 parent 7ce8f73 commit b87f90e

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

lib/celery/compilers/variable_transformer.ex

+24
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
# an x/y/z property at the root of the object.
33
defmodule FarmbotOS.Celery.Compiler.VariableTransformer do
44
alias FarmbotOS.Celery.SysCallGlue
5+
alias FarmbotOS.Asset.Repo
6+
7+
require FarmbotOS.Logger
58

69
def run!(%{resource_id: id, resource_type: t}) do
710
[SysCallGlue.point(t, id)]
@@ -34,6 +37,27 @@ defmodule FarmbotOS.Celery.Compiler.VariableTransformer do
3437
[%{kind: :error, error: error, x: nil, y: nil, z: nil}, error]
3538
end
3639

40+
def run!(%{args: %{resource_id: id, resource_type: t}} = misc) do
41+
mod = Module.concat(FarmbotOS.Asset, t)
42+
is_known_resource? = Kernel.function_exported?(mod, :render, 1)
43+
44+
if is_known_resource? do
45+
result = Repo.get_by(mod, id: id)
46+
47+
if result do
48+
[result]
49+
else
50+
msg = "Could not find #{t} #{id}. Did you delete it?"
51+
FarmbotOS.Logger.info(3, msg)
52+
[nil]
53+
end
54+
else
55+
# There was a typo, or the sequence is handling a resource
56+
# that FarmBot OS does not know about.
57+
[misc]
58+
end
59+
end
60+
3761
def run!(other) do
3862
[other]
3963
end

test/celery/variable_transformer_test.exs

+20
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,24 @@ defmodule FarmbotOS.Celery.VariableTransformerTest do
6262
expected = [fake_stuff]
6363
assert actual == expected
6464
end
65+
66+
test "CS Resource" do
67+
id = 999_999
68+
sequence = FarmbotOS.Asset.new_sequence!(%{id: id})
69+
params = %{args: %{resource_id: id, resource_type: "Sequence"}}
70+
[result] = VariableTransformer.run!(params)
71+
assert result == sequence
72+
end
73+
74+
test "CS Resource - not known" do
75+
unknown = %{args: %{resource_id: 111, resource_type: "Foo"}}
76+
[result] = VariableTransformer.run!(unknown)
77+
assert result == unknown
78+
end
79+
80+
test "CS Resource - not found" do
81+
not_found = %{args: %{resource_id: 111, resource_type: "Sequence"}}
82+
[result] = VariableTransformer.run!(not_found)
83+
refute result
84+
end
6585
end

0 commit comments

Comments
 (0)