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

Add Parse JSON Notices Section #2669

Open
wants to merge 11 commits into
base: main
Choose a base branch
from

Conversation

Vidushi-GitHub
Copy link
Member

@Vidushi-GitHub Vidushi-GitHub commented Nov 4, 2024

This document includes how to parse, encode, decode the JSON Schema files.

Resolves: #2149

Previous branch (#2506) had 100+ commits behind, rebase was messy and touched many files.

Feedbacks need to be included:
-Provide hyperlinks to these Python methods.
-Please provide sample code for parsing Kafka records in a message consuming loop

Screenshot 2024-11-04 at 10 55 57

Copy link
Member

@tylerbarna tylerbarna left a comment

Choose a reason for hiding this comment

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

need to run prettier

Copy link
Member

@lpsinger lpsinger left a comment

Choose a reason for hiding this comment

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

Please rerun pre-commit hooks.

Copy link

codecov bot commented Nov 6, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 5.93%. Comparing base (9a85dc8) to head (8e485aa).
Report is 39 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff            @@
##            main   #2669      +/-   ##
========================================
- Coverage   6.06%   5.93%   -0.14%     
========================================
  Files        171     171              
  Lines       4334    4329       -5     
  Branches     476     474       -2     
========================================
- Hits         263     257       -6     
- Misses      4069    4070       +1     
  Partials       2       2              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
}
```

In your data production pipeline, you can use the encoding steps to convert your file to a bytestring and set the value of the property to this bytestring. See [non-JSON data](https://json-schema.org/understanding-json-schema/reference/non_json_data.html) for more information.
Copy link
Member

Choose a reason for hiding this comment

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

Great sample code, but not enough context here to understand what these instructions are for.

Copy link
Member Author

Choose a reason for hiding this comment

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

I have tried to expand the instructions.
Could you please elaborate more what's missing?

Copy link
Member

Choose a reason for hiding this comment

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

Pick an example of an actual notice type that contains embedded HEALPix data. Show how to:

  • subscribe to and receive that notice type
  • decode the Kafka message as JSON
  • decode base64 text to bytes
  • read the bytes as a FITS file

And then the user is ready to go on to the sky maps section! (I think that this is turning into a step-by-step tutorial, which will be awesome.)

Copy link
Member Author

Choose a reason for hiding this comment

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

LVK JSON file is tested for decode base64 and write fits file.

@jracusin
Copy link
Contributor

This encoding information needs to also be referenced somewhere in the creating JSON notices documentation.

@jracusin
Copy link
Contributor

Add example of pulling message off the network and getting bytes out.
Need sample file available for people to play around with the data.

app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
}
```

In your data production pipeline, you can use the encoding steps to convert your file to a bytestring and set the value of the property to this bytestring. See [non-JSON data](https://json-schema.org/understanding-json-schema/reference/non_json_data.html) for more information.
Copy link
Member

Choose a reason for hiding this comment

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

Pick an example of an actual notice type that contains embedded HEALPix data. Show how to:

  • subscribe to and receive that notice type
  • decode the Kafka message as JSON
  • decode base64 text to bytes
  • read the bytes as a FITS file

And then the user is ready to go on to the sky maps section! (I think that this is turning into a step-by-step tutorial, which will be awesome.)

@Vidushi-GitHub
Copy link
Member Author

@dakota002 please provide your suggestions.

app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
app/routes/docs.client.samples.md Outdated Show resolved Hide resolved
Comment on lines 218 to 229
# Function to validate Base64 strings
def is_base64(s):
try:
base64.b64decode(s, validate=True)
return True
except Exception:
return False

# Output: A Base64 encoded bytestring, e.g., b'a1512dabc1b6adb3cd1b6dcb6d4c6......'
with open("path/to/encoded_file.txt", 'wb') as encoded_file:
encoded_file.write(encoded_string)
# Validate the skymap string
if not is_base64(skymap_string):
print("Invalid Base64 string.")
continue
Copy link
Member

Choose a reason for hiding this comment

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

Why is this necessary?

Copy link
Member Author

Choose a reason for hiding this comment

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

We can remove it, it's just a check if file wasn't corrupted.

import base64

# Set Kafka Topic and Producer Configuration
TOPIC = "gcn.circulars"
Copy link
Contributor

Choose a reason for hiding this comment

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

This doesn't seem like the right topic.

producer.flush()
```

See [non-JSON data](https://json-schema.org/understanding-json-schema/reference/non_json_data.html) for more information.
Copy link
Contributor

Choose a reason for hiding this comment

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

more information about what?

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.

Parsing JSON Notices
5 participants