-
Notifications
You must be signed in to change notification settings - Fork 49
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
base: master
Are you sure you want to change the base?
Conversation
CLA Assistant Lite bot All contributors have signed the CLA ✍️ |
1 similar comment
There was a problem hiding this 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: |
There was a problem hiding this comment.
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
actual = entity_query_result_name_value_pairs(result_set) | ||
expected = entity_query_result_name_value_pairs(e) |
There was a problem hiding this comment.
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?
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 applyChecklist
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.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...