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

Fix Histogram Binning #2086

Merged
merged 30 commits into from
Feb 10, 2023
Merged

Fix Histogram Binning #2086

merged 30 commits into from
Feb 10, 2023

Conversation

juliawu
Copy link
Contributor

@juliawu juliawu commented Jan 23, 2023

Makes the following changes to the histogram tile:

  1. Adds support for binning when dates include days (YYYY-MM-DD)
  2. Don't show histogram if there's no data to show

Before:
Screenshot 2023-01-23 at 1 30 28 PM

After:
Screenshot 2023-01-23 at 1 32 36 PM

Before:
Screenshot 2023-01-23 at 1 34 04 PM

After:
Screenshot 2023-01-23 at 1 34 16 PM

@juliawu juliawu requested review from beets and chejennifer January 23, 2023 21:34
Copy link
Contributor

@beets beets left a comment

Choose a reason for hiding this comment

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

thanks for this! now that we have a bit of a breather, we can make this more robust.

data_found = False

# Get the latest month we have data for
latest_date = series[-1].get('date', '')
Copy link
Contributor

Choose a reason for hiding this comment

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

check for the length of series first (it could be empty)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

good point! This section got removed in the revamp, but will keep in mind for the future.

Comment on lines 108 to 110
latest_month = 12
if latest_date[:4] == year and len(latest_date) >= 7:
latest_month = int(latest_date[5:7])
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: try to avoid "magic numbers", even if it's for something like date parsing.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for the pointer, removed magic numbers.

Comment on lines 113 to 115
months_to_fill = [
f"{year}-{str(mm).zfill(2)}" for mm in range(1, latest_month + 1)
]
Copy link
Contributor

Choose a reason for hiding this comment

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

let's get this working for cross-year boundaries (which will kick in next week :))

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done! :)

draw(props, histogramData.dataPoints);
}
}, [props, histogramData]);

if (!histogramData) {
if (!histogramData || _.isEmpty(histogramData.dataPoints)) {
return null;
}
const rs: ReplacementStrings = {
Copy link
Contributor

Choose a reason for hiding this comment

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

perhaps only add the ChartTileContainer when there is data to plot (otherwise the empty frame with no chart is a little awkward).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

added this check in the new version as well.

Copy link
Contributor

@chejennifer chejennifer left a comment

Choose a reason for hiding this comment

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

the updated histogram looks good!

@@ -68,12 +69,12 @@ export function HistogramTile(props: HistogramTilePropType): JSX.Element {
}, [props, rawData]);

useEffect(() => {
if (histogramData) {
if (histogramData && !_.isEmpty(histogramData.dataPoints)) {
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: maybe make a function shouldShowHistogram() & use it both here and in line 77

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done!

@juliawu
Copy link
Contributor Author

juliawu commented Feb 9, 2023

Following offline conversation, the histogram tile has now been revamped:

  1. Histogram tile will now be used in the disaster event type block
  2. Data binning now happens on client-side, not server-side
  3. Data presented uses the same data fetch as the other tiles on the block
  4. Data presented updates dynamically when users update selection in the date dropdown.

Further changes that will come in future PRs are:

  • Special logic for binning when the user selects "last 30 days"
  • Support for binning by day/week instead of just month

Sample screenshots of the new histogram tile:
Screenshot 2023-02-08 at 4 26 43 PM
Screenshot 2023-02-08 at 4 27 38 PM

@juliawu juliawu requested review from beets and chejennifer February 9, 2023 00:40
Copy link
Contributor

@chejennifer chejennifer left a comment

Choose a reason for hiding this comment

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

nice, thanks for the update!

replacementStrings={rs}
className={"histogram-chart"}
allowEmbed={false}
getDataCsv={() => dataPointsToCsv(histogramData)}
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: since allowEmbed is set to false, setting this getDataCsv field is unnecessary

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for the pointer, removed getDataCsv.

processData(props, rawData, setHistogramData);
}
}, [props, rawData]);
// specify months if dateSetting is just a year
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: looks like we're specifying dates, not months?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good catch, updated this comment line to clarify we're specifying dates

}
}, [props, rawData]);
// specify months if dateSetting is just a year
if (dateSetting.length == "YYYY".length) {
Copy link
Contributor

Choose a reason for hiding this comment

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

this is assuming that if dateSetting length is YYYY, then getDateRange will return a date range that is also YYYY. That is true right now, but I think it would be better to check the lengths of startDate and endDate instead.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good idea, switched to checking lengths of startDate and endDate

// imputing 0s for dates the source(s) may not yet have data for.
if (!_.isEmpty(disasterEventPoints)) {
const lastDate =
disasterEventPoints[disasterEventPoints.length - 1].startDate;
Copy link
Contributor

Choose a reason for hiding this comment

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

are you taking a sorted list of disasterEventPoints? If so, please mention it in the function comments that disasterEventPoints should be sorted by date

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added to function comments!

Copy link
Contributor

Choose a reason for hiding this comment

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

but it doesn't look like you're sorting the data before passing it into this function?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Apologies, I misinterpreted your original comment. I've added sorting inside the function.

// Fill in months between start and end dates
const months = new Array<string>();
for (
let date = new Date(startDate);
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: because new Date() creates a date in local time and .toIsoString() gets the ISO string of the UTC date, we would want to create a UTC date here by doing new Date(startDate + "Z") like this: https://github.com/datacommonsorg/website/blob/master/static/js/utils/disaster_event_map_utils.tsx#L164-L168

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for the pointer! Added + "Z".

props.statVarSpec[0].unit
);
function shouldShowHistogram(histogramData: DataPoint[]): boolean {
return histogramData && !_.isEmpty(histogramData);
Copy link
Contributor

Choose a reason for hiding this comment

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

nit: _.isEmpty will check for nulls and undefined too, so really only need to keep the ~_.isEmpty check here

Copy link
Contributor Author

Choose a reason for hiding this comment

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

thanks, kept only the !_.isEmpty. Leaving the function despite its simplicity because "shouldShowHistogram" is more readable to me.

Copy link
Contributor

@beets beets left a comment

Choose a reason for hiding this comment

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

thanks for the updates!

# stat_var_key: "fire_count"
# }
tiles {
# TODO: Need to specify P1Y
Copy link
Contributor

Choose a reason for hiding this comment

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

you can delete this comment if it doesn't apply anymore (ditto for the rest)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done!

@@ -105,6 +105,10 @@ message DisasterEventMapTileSpec {
repeated string event_type_keys = 1;
}

message HistogramTileSpec {
string event_type_key = 1;
Copy link
Contributor

Choose a reason for hiding this comment

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

super nit: please check indent spacing

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good eye! Fixed spacing

Comment on lines +313 to +315
disasterEventData[tile.histogramTileSpec.eventTypeKey] || {
eventPoints: [],
provenanceInfo: {},
Copy link
Contributor

Choose a reason for hiding this comment

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

we should be handling these default values before this (i.e. disasterEventData should have reasonable defaults for all event types). or the component should handle the case where disasterEventData is null. of these, i might choose (2)

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Went with (2). Added handling so that histogram just doesn't render if disasterEventData is null instead of breaking the entire component.

}
}, [props, rawData]);
// specify full dates if start and end dates are just YYYY
if (startDate.length == "YYYY".length && endDate.length == "YYYY".length) {
Copy link
Contributor

Choose a reason for hiding this comment

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

what if the range is specified YYYY-MM?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added YYYY-MM case handling.

const eventMonth = event.startDate.slice(0, "YYYY-MM".length);

// Increment count in corresponding bin
if (bins.has(eventMonth)) {
Copy link
Contributor

Choose a reason for hiding this comment

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

perhaps add a log warning if we're skipping events.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

added a log message if we skip events


for (const event of disasterEventPoints) {
// Get start time in YYYY-MM
const eventMonth = event.startDate.slice(0, "YYYY-MM".length);
Copy link
Contributor

Choose a reason for hiding this comment

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

check that all events have at least YYYY-MM granularity

Copy link
Contributor Author

Choose a reason for hiding this comment

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

added check

Comment on lines +135 to +136
function shouldShowHistogram(histogramData: DataPoint[]): boolean {
return !_.isEmpty(histogramData);
Copy link
Contributor

Choose a reason for hiding this comment

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

this is ok to keep, but for future reference, might be too little to have as a helper.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

thanks for the pointer! noted.

Copy link
Contributor

@chejennifer chejennifer left a comment

Choose a reason for hiding this comment

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

thanks for the updates!

@juliawu juliawu merged commit a5f89b1 into datacommonsorg:master Feb 10, 2023
juliawu added a commit that referenced this pull request Feb 10, 2023
This is a followup PR to #2086 which makes the histograms use the color
of the event types instead of default red.

Because this is a followup, diffs currently include all changes made in
#2086. I'll message out when #2086 is merged and the diffs are easier to
read.

Screenshots:
<img width="1024" alt="Screenshot 2023-02-09 at 10 02 21 AM"
src="https://user-images.githubusercontent.com/4034366/217902251-e962cddb-43df-429d-a15f-3df9d092ab65.png">
<img width="1026" alt="Screenshot 2023-02-09 at 10 02 40 AM"
src="https://user-images.githubusercontent.com/4034366/217902271-71e6ac0e-f95f-4da6-8e09-3f857e96a1cb.png">
<img width="1025" alt="Screenshot 2023-02-09 at 10 02 58 AM"
src="https://user-images.githubusercontent.com/4034366/217902288-b08c2cd7-93db-43b7-9342-b82f3409d9d5.png">
<img width="1021" alt="Screenshot 2023-02-09 at 10 03 23 AM"
src="https://user-images.githubusercontent.com/4034366/217902317-fe4207b9-b789-40a3-95d2-696e025e3126.png">
<img width="1023" alt="Screenshot 2023-02-09 at 10 03 12 AM"
src="https://user-images.githubusercontent.com/4034366/217903076-d5c1d6de-a6a7-49a2-9c53-a0c94ed1754e.png">
<img width="1029" alt="Screenshot 2023-02-09 at 10 03 34 AM"
src="https://user-images.githubusercontent.com/4034366/217902337-0928c6ca-6815-4f18-990d-f5ff1dc64af0.png">
<img width="1026" alt="Screenshot 2023-02-09 at 10 03 53 AM"
src="https://user-images.githubusercontent.com/4034366/217902366-861d6daa-d218-42fc-aa1d-6bf21bf2fb67.png">
shifucun added a commit that referenced this pull request Mar 28, 2023
Bumps [redis](https://github.com/redis/redis-py) from 3.5.3 to 4.5.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/redis/redis-py/releases">redis's
releases</a>.</em></p>
<blockquote>
<h2>4.5.3</h2>
<h1>Changes</h1>
<p>Update urgency: HIGH: There is a critical bug that may affect a
subset of users. Upgrade!</p>
<h2>🐛 Bug Fixes</h2>
<ul>
<li><a
href="https://cwe.mitre.org/data/definitions/404.html">CWE-404</a>
AsyncIO Race Condition Fix (<a
href="https://github.com/redis/redis-py/issues/2624">#2624</a>,
<a
href="https://github.com/redis/redis-py/issues/2579">#2579</a>)</li>
</ul>
<h2>4.5.2</h2>
<h1>Changes</h1>
<h2>🚀 New Features</h2>
<ul>
<li>Introduce AbstractConnection so that UnixDomainSocketConnection can
call super().<strong>init</strong> (<a
href="https://github.com/redis/redis-py/issues/2588">#2588</a>)</li>
<li>Added queue_class to REDIS_ALLOWED_KEYS (<a
href="https://github.com/redis/redis-py/issues/2577">#2577</a>)</li>
<li>Made search document subscriptable (<a
href="https://github.com/redis/redis-py/issues/2615">#2615</a>)</li>
<li>Sped up the protocol parsing (<a
href="https://github.com/redis/redis-py/issues/2596">#2596</a>)</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li>Fix behaviour of async PythonParser to match RedisParser as for
issue <a
href="https://github.com/redis/redis-py/issues/2349">#2349</a>
(<a
href="https://github.com/redis/redis-py/issues/2582">#2582</a>)</li>
<li>Replace async_timeout by asyncio.timeout (<a
href="https://github.com/redis/redis-py/issues/2602">#2602</a>)</li>
<li>Update json().arrindex() default values (<a
href="https://github.com/redis/redis-py/issues/2611">#2611</a>)</li>
</ul>
<h2>🧰 Maintenance</h2>
<ul>
<li>Coverage for pypy-3.9 (<a
href="https://github.com/redis/redis-py/issues/2608">#2608</a>)</li>
<li>Developer Experience: Adding redis version compatibility details to
the README (<a
href="https://github.com/redis/redis-py/issues/2621">#2621</a>)</li>
<li>Remove redundant assignment to RedisCluster.nodes_manager. (<a
href="https://github.com/redis/redis-py/issues/2620">#2620</a>)</li>
<li>Developer Experience: [types] update return type of smismember to
list[int] (<a
href="https://github.com/redis/redis-py/issues/2617">#2617</a>)</li>
<li>Developer Experience: [docs] ConnectionPool SSL example (<a
href="https://github.com/redis/redis-py/issues/2605">#2605</a>)</li>
<li>Developer Experience: Fixed CredentialsProvider examples (<a
href="https://github.com/redis/redis-py/issues/2587">#2587</a>)</li>
<li>Developer Experience: Update README to make pip install
copy-pastable on zsh (<a
href="https://github.com/redis/redis-py/issues/2584">#2584</a>)</li>
<li>Developer Experience: Fix for <code>lpop</code> and
<code>rpop</code> return typing (<a
href="https://github.com/redis/redis-py/issues/2590">#2590</a>)</li>
</ul>
<h2>Contributors</h2>
<p>We'd like to thank all the contributors who worked on this
release!</p>
<p><a
href="https://github.com/CrimsonGlory"><code>@​CrimsonGlory</code></a>,
<a href="https://github.com/Galtozzy"><code>@​Galtozzy</code></a>, <a
href="https://github.com/aksinha334"><code>@​aksinha334</code></a>, <a
href="https://github.com/barshaul"><code>@​barshaul</code></a>, <a
href="https://github.com/chayim"><code>@​chayim</code></a>, <a
href="https://github.com/davemcphee"><code>@​davemcphee</code></a>, <a
href="https://github.com/dvora-h"><code>@​dvora-h</code></a>, <a
href="https://github.com/kristjanvalur"><code>@​kristjanvalur</code></a>,
<a href="https://github.com/ryin1"><code>@​ryin1</code></a>, <a
href="https://github.com/sileht"><code>@​sileht</code></a>, <a
href="https://github.com/thebarbershop"><code>@​thebarbershop</code></a>,
<a href="https://github.com/uglide"><code>@​uglide</code></a>, <a
href="https://github.com/woutdenolf"><code>@​woutdenolf</code></a> and
<a href="https://github.com/zakaf"><code>@​zakaf</code></a></p>
<h2>4.5.1</h2>
<h1>Changes</h1>
<h2>🐛 Bug Fixes</h2>
<ul>
<li>Fix <a
href="https://github.com/redis/redis-py/issues/2581">#2581</a>
<code>UnixDomainSocketConnection</code> object has no attribute
<code>_command_packer</code> (<a
href="https://github.com/redis/redis-py/issues/2583">#2583</a>)</li>
</ul>
<h2>Contributors</h2>
<p>We'd like to thank all the contributors who worked on this
release!</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/redis/redis-py/blob/master/CHANGES">redis's
changelog</a>.</em></p>
<blockquote>
<pre><code>* Allow data to drain from async PythonParser when reading
during a disconnect()
* Use asyncio.timeout() instead of async_timeout.timeout() for python
&gt;= 3.11 ([#2602](redis/redis-py#2602))
* Add test and fix async HiredisParser when reading during a
disconnect() ([#2349](redis/redis-py#2349))
* Use hiredis-py pack_command if available.
* Support `.unlink()` in ClusterPipeline
* Simplify synchronous SocketBuffer state management
* Fix string cleanse in Redis Graph
* Make PythonParser resumable in case of error
([#2510](redis/redis-py#2510))
* Add `timeout=None` in `SentinelConnectionManager.read_response`
* Documentation fix: password protected socket connection
([#2374](redis/redis-py#2374))
* Allow `timeout=None` in `PubSub.get_message()` to wait forever
* add `nowait` flag to `asyncio.Connection.disconnect()`
* Update README.md links
* Fix timezone handling for datetime to unixtime conversions
* Fix start_id type for XAUTOCLAIM
* Remove verbose logging from cluster.py
* Add retry mechanism to async version of Connection
* Compare commands case-insensitively in the asyncio command parser
* Allow negative `retries` for `Retry` class to retry forever
* Add `items` parameter to `hset` signature
* Create codeql-analysis.yml
([#1988](redis/redis-py#1988)). Thanks @chayim
* Add limited support for Lua scripting with RedisCluster
* Implement `.lock()` method on RedisCluster
* Fix cursor returned by SCAN for RedisCluster &amp; change default
target to PRIMARIES
* Fix scan_iter for RedisCluster
* Remove verbose logging when initializing ClusterPubSub,
ClusterPipeline or RedisCluster
* Fix broken connection writer lock-up for asyncio
([#2065](redis/redis-py#2065))
* Fix auth bug when provided with no username
([#2086](redis/redis-py#2086))
* Fix missing ClusterPipeline._lock
([#2189](redis/redis-py#2189))
* Added dynaminc_startup_nodes configuration to RedisCluster
* Fix reusing the old nodes' connections when cluster topology refresh
is being done
* Fix RedisCluster to immediately raise AuthenticationError without a
retry
* ClusterPipeline Doesn't Handle ConnectionError for Dead Hosts
([#2225](redis/redis-py#2225))
* Remove compatibility code for old versions of Hiredis, drop Packaging
dependency
* The `deprecated` library is no longer a dependency
* Failover handling improvements for RedisCluster and Async RedisCluster
([#2377](redis/redis-py#2377))
* Fixed &quot;cannot pickle '_thread.lock' object&quot; bug
([#2354](redis/redis-py#2354),
[#2297](redis/redis-py#2297))
* Added CredentialsProvider class to support password rotation
* Enable Lock for asyncio cluster mode
* Fix Sentinel.execute_command doesn't execute across the entire
sentinel cluster bug
([#2458](redis/redis-py#2458))
* Added a replacement for the default cluster node in the event of
failure ([#2463](redis/redis-py#2463))
* Fix for Unhandled exception related to self.host with unix socket
([#2496](redis/redis-py#2496))
</code></pre>
<ul>
<li>4.1.3 (Feb 8, 2022)
<ul>
<li>Fix flushdb and flushall (<a
href="https://github.com/redis/redis-py/issues/1926">#1926</a>)</li>
<li>Add redis5 and redis4 dockers (<a
href="https://github.com/redis/redis-py/issues/1871">#1871</a>)</li>
<li>Change json.clear test multi to be up to date with redisjson (<a
href="https://github.com/redis/redis-py/issues/1922">#1922</a>)</li>
<li>Fixing volume for unstable_cluster docker (<a
href="https://github.com/redis/redis-py/issues/1914">#1914</a>)</li>
<li>Update changes file with changes since 4.0.0-beta2 (<a
href="https://github.com/redis/redis-py/issues/1915">#1915</a>)</li>
</ul>
</li>
<li>4.1.2 (Jan 27, 2022)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/redis/redis-py/commit/66a4d6b2a493dd3a20cc299ab5fef3c14baad965"><code>66a4d6b</code></a>
AsyncIO Race Condition Fix (<a
href="https://github.com/redis/redis-py/issues/2641">#2641</a>)</li>
<li><a
href="https://github.com/redis/redis-py/commit/318b114f4da9846a2a7c150e1fb702e9bebd9fdf"><code>318b114</code></a>
Version 4.5.2 (<a
href="https://github.com/redis/redis-py/issues/2627">#2627</a>)</li>
<li><a
href="https://github.com/redis/redis-py/commit/1b2f408259405d412d7530291902f9e0c8bd34b3"><code>1b2f408</code></a>
Fix behaviour of async PythonParser to match RedisParser as for issue <a
href="https://github.com/redis/redis-py/issues/2349">#2349</a>
(...</li>
<li><a
href="https://github.com/redis/redis-py/commit/7d474f90453c7b90bd06c94e0250b618120a599d"><code>7d474f9</code></a>
introduce AbstractConnection so that UnixDomainSocketConnection can call
supe...</li>
<li><a
href="https://github.com/redis/redis-py/commit/c87172347584301f453c601c483126e4800257b7"><code>c871723</code></a>
pypy-3.9 CI (<a
href="https://github.com/redis/redis-py/issues/2608">#2608</a>)</li>
<li><a
href="https://github.com/redis/redis-py/commit/d63313bf6080acaf18d61e072c78303adc0d4166"><code>d63313b</code></a>
add queue_class to REDIS_ALLOWED_KEYS (<a
href="https://github.com/redis/redis-py/issues/2577">#2577</a>)</li>
<li><a
href="https://github.com/redis/redis-py/commit/c61eeb2e3b5dff1f01eb1e665f424c7e75354f56"><code>c61eeb2</code></a>
Adding supported redis/library details (<a
href="https://github.com/redis/redis-py/issues/2621">#2621</a>)</li>
<li><a
href="https://github.com/redis/redis-py/commit/25e85e51e57b7aae9eb8fc77cfb0a45a07a501a7"><code>25e85e5</code></a>
fix: replace async_timeout by asyncio.timeout (<a
href="https://github.com/redis/redis-py/issues/2602">#2602</a>)</li>
<li><a
href="https://github.com/redis/redis-py/commit/91ab12a0f1bdf0e433131e1a51578e9fa2f89718"><code>91ab12a</code></a>
Remove redundant assignment. (<a
href="https://github.com/redis/redis-py/issues/2620">#2620</a>)</li>
<li><a
href="https://github.com/redis/redis-py/commit/8bfd492240fd33489a86cd3d353e3ece1fc94c10"><code>8bfd492</code></a>
Making search document subscriptable (<a
href="https://github.com/redis/redis-py/issues/2615">#2615</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/redis/redis-py/compare/3.5.3...v4.5.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=redis&package-manager=pip&previous-version=3.5.3&new-version=4.5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/datacommonsorg/website/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bo Xu <shifucun@users.noreply.github.com>
@juliawu juliawu deleted the hist-fix branch May 25, 2023 16:51
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.

3 participants