Skip to content

Conversation

@carlsonp
Copy link
Contributor

How about this as a starting point for adding some helpful printing of Data Profiler options?

import dataprofiler as dp
profile_options = dp.ProfilerOptions()
print(profile_options)

@carlsonp carlsonp requested a review from a team as a code owner March 13, 2024 21:27
@carlsonp carlsonp marked this pull request as draft March 13, 2024 21:35
@taylorfturner taylorfturner added the New Feature A feature addition not currently in the library label Mar 14, 2024
Copy link
Contributor

@taylorfturner taylorfturner left a comment

Choose a reason for hiding this comment

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

Yep, exactly how I was thinking about utilizing the __str__ magic method. I may recommend two things here, though:

  • some variable name changes for clarity in the __str__. We use options as a variable in throughout and you are using options in that for loop. Just for clarity of variable naming... maybe something along the line of iter_option when you are referencing in the for loop so its super explicit that it is related to the for loop
  • and adding the presets on the ProfilerOptions.__str__ return implementation for clarity

* add downloads tile (capitalone#1085)

* Replace snappy with cramjam

* Delete test_no_snappy

---------

Co-authored-by: Taylor Turner <taylorfturner@gmail.com>
@taylorfturner
Copy link
Contributor

You'll want to rebase onto dev... had some other PRs from @gliptak merge into dev this morning.

Have you done rebases before, @carlsonp?

@carlsonp carlsonp force-pushed the profile-options-str branch from 2899858 to dbc9a80 Compare March 14, 2024 14:38
@carlsonp carlsonp marked this pull request as ready for review March 14, 2024 14:50
abajpai15 and others added 2 commits March 22, 2024 15:24
* Fix dask_expr

* Keras and Tensorflow version fix

* Keras and Tensorflow version fix

* Fix keras bug
@taylorfturner
Copy link
Contributor

@carlsonp you should be good to rebase onto dev now

@carlsonp
Copy link
Contributor Author

carlsonp commented Mar 22, 2024 via email

@carlsonp carlsonp force-pushed the profile-options-str branch from dbc9a80 to cb15c63 Compare March 24, 2024 16:19
@carlsonp
Copy link
Contributor Author

Rebased

@taylorfturner
Copy link
Contributor

@carlsonp yeah, I like the route you are going. Once you add unit tests, just tag me and I'll take another look at it. Cheers!

@carlsonp
Copy link
Contributor Author

carlsonp commented Apr 24, 2024

@carlsonp yeah, I like the route you are going. Once you add unit tests, just tag me and I'll take another look at it. Cheers!

@taylorfturner Can you please provide a suggested starting point for which file to add the unit tests?

@taylorfturner taylorfturner changed the base branch from 0.10.9-dev to dev June 7, 2024 18:25
Comment on lines +1842 to +1852
def __str__(self) -> str:
"""
Return a human friendly consumable output in string form.
:return: str of the option presets and properties
:rtype: str
"""
return f"Presets: {str(self.presets)}\n \
{str(self.structured_options)}\n \
{str(self.unstructured_options)}"

Copy link
Contributor

Choose a reason for hiding this comment

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

this makes sense here and you would test in test_profiler_options.py

@taylorfturner
Copy link
Contributor

@carlsonp yeah, I like the route you are going. Once you add unit tests, just tag me and I'll take another look at it. Cheers!

@taylorfturner Can you please provide a suggested starting point for which file to add the unit tests?

Yes, indeed! I would actually move some of the __str__ methods you overwrite in this PR into base_options.py. Then I think your testing would much more simple. Ultimately this would allow you to test main implementation in test_base_option.py then you could build out small scenarios in the other option test files in tests/profilers/profiler_options/...

@taylorfturner
Copy link
Contributor

@carlsonp you'll want a rebase here too onto dev

Comment on lines +971 to +989
def __str__(self) -> str:
"""
Return a human friendly consumable output in string form.
:vartype dict_string: dict
:return: str of the option properties
:rtype: str
"""
dict_string: dict = {"CategoricalOptions": []}
for iter_option in [
a
for a in dir(self)
if not a.startswith("__") and not callable(getattr(self, a))
]:
dict_string["CategoricalOptions"].append(
{str(iter_option): str(getattr(self, iter_option))}
)
return json.dumps(dict_string, indent=4)

Copy link
Contributor

Choose a reason for hiding this comment

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

might be good to find a way to abstract this a bit more so this ends up in BaseOption 90%+ of this code is repeat just with string changes: so I think there is room to make this DRY-er

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

New Feature A feature addition not currently in the library

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants