NASA-AMMOS / NASA-AMMOS/AIT-Core

Infinite recursion started by Packet.toJSON()

Open
#127 7 comments 0 reactions 1 assignee View on GitHub

@aywaldron is already working on this.

Since Mar 22, 2019.

bug
Dominant language
Python
Stars
56
Forks
35
Avg merge
1d 20h
Merged PRs (30d)
3

Description

https://github.com/NASA-AMMOS/AIT-Core/blob/196f4c4f175b6caf407ea73776ef9b906b9ea591/ait/core/tlm.py#L444

Here is the beginning of the traceback when Packet.toJSON() is called. It continues forever until the limit for recursion is reached and the process exits. toJSON calls getattr, which tries to evaluate defn.when.eval, which in turn calls getattr through looking for defn.globals, and so getattr continues to be called recursively forever.

Traceback (most recent call last):
  File "size_test.py", line 10, in <module>
    print(packet.toJSON())
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 445, in toJSON
    return { name: getattr(self, name) for name in self._defn.fieldmap }
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 445, in <dictcomp>
    return { name: getattr(self, name) for name in self._defn.fieldmap }
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 351, in __getattr__
    return self._getattr(fieldname)
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 415, in _getattr
    if defn.when is None or defn.when.eval(self):
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 704, in eval
    result  = eval(self._code, packet._defn.globals, context)
  File "<string>", line 1, in <module>
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 487, in __getitem__
    result = self._packet._getattr(name)
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 415, in _getattr
    if defn.when is None or defn.when.eval(self):
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 704, in eval
    result  = eval(self._code, packet._defn.globals, context)
  File "<string>", line 1, in <module>
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 487, in __getitem__
    result = self._packet._getattr(name)
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 415, in _getattr
    if defn.when is None or defn.when.eval(self):
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 704, in eval
    result  = eval(self._code, packet._defn.globals, context)
  File "<string>", line 1, in <module>
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 487, in __getitem__
    result = self._packet._getattr(name)
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 415, in _getattr
    if defn.when is None or defn.when.eval(self):
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 704, in eval
    result  = eval(self._code, packet._defn.globals, context)
  File "<string>", line 1, in <module>
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 487, in __getitem__
    result = self._packet._getattr(name)
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 415, in _getattr
    if defn.when is None or defn.when.eval(self):
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 704, in eval
    result  = eval(self._code, packet._defn.globals, context)
  File "<string>", line 1, in <module>
  File "/Users/awaldron/Projects/ait/ait-core/ait/core/tlm.py", line 487, in __getitem__
    result = self._packet._getattr(name)

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.