# Console runs script that transform doesn't

**URL:** <https://forum.inductiveautomation.com/t/console-runs-script-that-transform-doesnt/59364>\
**Category:** Ignition\
**Tags:** ignition80, scripting, perspective\
**Created:** [May 9, 2022, 4:05pm UTC](https://forum.inductiveautomation.com/t/console-runs-script-that-transform-doesnt/59364 "2022-05-09T16:05:36Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Peter.Dmitriev](https://avatars.discourse-cdn.com/v4/letter/p/7ea924/32.png) [@Peter.Dmitriev](https://forum.inductiveautomation.com/u/Peter.Dmitriev)\
**Post date:** [May 9, 2022, 4:05pm UTC](https://forum.inductiveautomation.com/t/console-runs-script-that-transform-doesnt/59364/1 "2022-05-09T16:05:36Z")

</div>

Hello,

I have a project script where I'm using deepcopy function from copy library. When I test the script thru the script console it works fine. If I use it in script transform it chokes at that function and throws the following error:

> File "module:model.procedure", line 775, in getDynamicOperationList File "/usr/local/bin/ignition/user-lib/pylib/copy.py", line 190, in deepcopy y = \_reconstruct(x, rv, 1, memo) File "/usr/local/bin/ignition/user-lib/pylib/copy.py", line 329, in \_reconstruct y = callable(\*args) File "/usr/local/bin/ignition/user-lib/pylib/copy\_reg.py", line 93, in **newobj** return cls. **new** (cls, \*args) TypeError: com.inductiveautomation.perspective.gateway.script.PropertyTreeScriptWrapper$ArrayWrapper(): expected 40 args; got 0

Does anybody have a clue on how to work around this?

Thanks!

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [May 9, 2022, 4:33pm UTC](https://forum.inductiveautomation.com/t/console-runs-script-that-transform-doesnt/59364/2 "2022-05-09T16:33:34Z")

</div>

`deepcopy` doesn't "know" how Perspective's internal objects work; it's a bigger hammer than you need.

Try the code in this post to directly convert to 'native' list and dict objects:

> [@Function to convert json string or python dict into ObjectWrapper](https://forum.inductiveautomation.com/t/function-to-convert-json-string-or-python-dict-into-objectwrapper/32861/16):
>
> Forcing each to the expected type while traversing makes a deep copy: def sanitize\_tree(element): if hasattr(element, '\_\_iter\_\_'): if hasattr(element, 'keys'): return dict((k, sanitize\_tree(element[k])) for k in element.keys()) else: return list(sanitize\_tree(x) for x in element) return element EDIT: Got rid of the unnecessary zip() and used only one keys() iterator instead of two.

---

<div class="post-metadata">

**Author:** ![Peter.Dmitriev](https://avatars.discourse-cdn.com/v4/letter/p/7ea924/32.png) [@Peter.Dmitriev](https://forum.inductiveautomation.com/u/Peter.Dmitriev)\
**Post date:** [May 9, 2022, 4:51pm UTC](https://forum.inductiveautomation.com/t/console-runs-script-that-transform-doesnt/59364/3 "2022-05-09T16:51:01Z")

</div>

You guys never disappoint. Works like a charm, thank you!
