Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

factor out in src/reporter/tests/test_timescale_types.py #710 #713

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

NEC-Vishal
Copy link
Contributor

Proposed changes

Describe the big picture of your changes here to communicate to the
maintainers why we should accept this pull request.
If it fixes a bug or resolves a feature request, be sure to link to
that issue.

Types of changes

What types of changes does your code introduce to the project?
Put an x in the boxes that apply

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Maintenance (update of libraries or other dependences)

Checklist

Put an x in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.

  • I have read the CONTRIBUTING doc
  • I have signed the CLA
  • I have added tests that prove my fix is effective or that my feature works
  • I have run all the existing tests locally (not just those related to my feature) and there are no errors
  • After the last push to the PR branch, I have run the lint script locally and there are no changes to the code base
  • I have updated the RELEASE NOTES
  • I have added necessary documentation (if appropriate)
  • Any dependent changes have been merged and published in downstream modules

Further comments

If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...

@github-actions
Copy link
Contributor

CLA Assistant Lite bot All contributors have signed the CLA ✍️

@NEC-Vishal
Copy link
Contributor Author

#710

1 similar comment
@NEC-Vishal
Copy link
Contributor Author

#710

Copy link
Member

@c0c0n3 c0c0n3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @NEC-Vishal, I'm not sure we're on the right track here, have a look at my comments below and let me know what you think. Thanks!

# This function and the one below could come in handy when testing a number
# of scenarios where we first insert entities and then query them by ID.

def entity_query_result_name_value_pairs(data: dict) -> dict:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@NEC-Vishal not sure if or why you want to merge the two functions into one, but as it stands now this code won't work.

Here's a script you can run to see why.

from utils.jsondict import maybe_value
from utils.kvt import merge_dicts


def entity_name_value_pairs(entity: dict) -> dict:
    """
    Transform an NGSI entity ``e`` into the format::

        {
            entityId: e[id]
            attr1: [ e[attr1][value] ]
            ...
            attrN: [ e[attrN][value] ]
        }
    """
    eid = {'entityId': entity['id']}

    attr_names = {k for k in entity.keys()} - {'id', 'type'}
    attrs = {k: [maybe_value(entity, k, 'value')] for k in attr_names}

    return merge_dicts(eid, attrs)


def query_result_name_value_pairs(result: dict) -> dict:
    """
    Extract the result set returned by the ``/v2/entities/{entityId}`` endpoint
    using the same format as that of ``entity_name_value_pairs``.
    """
    eid = {'entityId': maybe_value(result, 'entityId')}

    attrs_array = maybe_value(result, 'attributes')
    attrs_array = attrs_array if attrs_array else []
    attrs = {maybe_value(a, 'attrName'): maybe_value(a, 'values')
             for a in attrs_array}

    return merge_dicts(eid, attrs)


def entity_query_result_name_value_pairs(data: dict) -> dict:
    """
    New implementation.
    """
    eid = {'entityId': maybe_value(data, 'entityId')}
    attr_names = {k for k in data.keys()} - {'id', 'type'}
    attrs = {k: [maybe_value(data, k, 'value')] for k in attr_names}

    return merge_dicts(eid, attrs)


e = {
    "id": "1",
    "type": "T",
    "speed": {
        "type": "Number",
        "value": 89.4
    }
}

q = {
    "entityId": "1",
    "entityType": "T",
    "index": ["2018-01-05T15:44:34"],
    "attributes": [
        {
            "attrName": "speed",
            "values": [89.4]
        }
    ]
}

e1 = entity_name_value_pairs(e)
e2 = entity_query_result_name_value_pairs(e)

q1 = query_result_name_value_pairs(q)
q2 = entity_query_result_name_value_pairs(q)

Now if you load the script in the Pyhton REPL, you'll see the data extracted by the old functions is right, whereas the new implementation isn't really extracting the data we need for the comparison in test_entity_with_all_supported_types

>>> e1
{'entityId': '1', 'speed': [89.4]}
>>> q1
{'entityId': '1', 'speed': [89.4]}
>>> e1 == q1
True
>>> e2
{'entityId': None, 'speed': [89.4]}
>>> q2
{'entityId': [None], 'entityType': [None], 'index': [None], 'attributes': [None]}
>>> e2 == q2
False

Comment on lines +164 to +165
actual = entity_query_result_name_value_pairs(result_set)
expected = entity_query_result_name_value_pairs(e)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm struggling to see how this test could actually pass when using entity_query_result_name_value_pairs, see my previous comment about this function's implementation. Could it be this test isn't actually executed? Can you please check if that's the case?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants