Skip to content

Commit 5bbb17f

Browse files
authored
Merge pull request #758 from AnswerDotAI/fix-detect-mime-non-bytes
Return None from detect_mime for non-bytes input
2 parents 35af81a + e86b6de commit 5bbb17f

2 files changed

Lines changed: 33 additions & 21 deletions

File tree

fastcore/xtras.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ def img_bytes(img, fmt='PNG'):
193193

194194
def detect_mime(data):
195195
"Get the MIME type for bytes `data`, covering common PDF, audio, video, and image types"
196+
if not isinstance(data,bytes): return None
196197
import mimetypes
197198
from fastcore import imghdr
198199
for (sig,pos),mime in _sigs.items():

nbs/03_xtras.ipynb

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@
582582
{
583583
"data": {
584584
"image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAyADIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDi6KKK+ZP3EKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Z",
585-
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAZ0lEQVR4Ae3SsREAIAzEsMD+O8MM7lKI+ouc8Hmz8d2NR804q/wLLVpFoGy1RasIlK22aBWBstUWrSJQttqiVQTKVlu0ikDZaotWEShbbdEqAmWrLVpFoGy1RasIlK22aBWBstVW0fpBqgFjLbA8fgAAAABJRU5ErkJggg==",
585+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAfUlEQVR4AWL8zzAYAdNgdBTDqLNIAqORSAoYDS1SwGhokQJGQ4sUMBpapIDR0CIFjIYWKWA0tEgBo6FFChgNLVLAaGiRAkZDixQwGlqkgNHQIgWMhhYpYDS0SAGjoUUKGA0tUsBoaJECRkOLFDAaWqSA0dAiBYyGFmCkhBYAQaoBY/NmMJ4AAAAASUVORK5CYII=",
586586
"text/plain": [
587587
"<PIL.Image.Image image mode=RGB size=50x50>"
588588
]
@@ -621,7 +621,7 @@
621621
"outputs": [
622622
{
623623
"data": {
624-
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAS0lEQVR4nO3OsQEAEADAMPz/Mw9YMjE0F2Tu8aP1OnBXS9QStUQtUUvUErVELVFL1BK1RC1RS9QStUQtUUvUErVELVFL1BK1RC1xAEGqAWOFuDKrAAAAAElFTkSuQmCC",
624+
"image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAZklEQVR4nM3OMQEAMAyAMIZ/z52B/iUK8oYiSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkrwO7D0GqAWPcq78HAAAAAElFTkSuQmCC",
625625
"text/plain": [
626626
"<IPython.core.display.Image object>"
627627
]
@@ -662,6 +662,7 @@
662662
"\n",
663663
"def detect_mime(data):\n",
664664
" \"Get the MIME type for bytes `data`, covering common PDF, audio, video, and image types\"\n",
665+
" if not isinstance(data,bytes): return None\n",
665666
" import mimetypes\n",
666667
" from fastcore import imghdr\n",
667668
" for (sig,pos),mime in _sigs.items():\n",
@@ -672,7 +673,7 @@
672673
{
673674
"cell_type": "code",
674675
"execution_count": null,
675-
"id": "95c46f5a",
676+
"id": "9e314cb9",
676677
"metadata": {},
677678
"outputs": [
678679
{
@@ -690,6 +691,16 @@
690691
"detect_mime(ib)"
691692
]
692693
},
694+
{
695+
"cell_type": "code",
696+
"execution_count": null,
697+
"id": "9ec0b74c",
698+
"metadata": {},
699+
"outputs": [],
700+
"source": [
701+
"test_is(detect_mime('this is a non-byte string'),None)"
702+
]
703+
},
693704
{
694705
"cell_type": "code",
695706
"execution_count": null,
@@ -1029,7 +1040,7 @@
10291040
{
10301041
"data": {
10311042
"text/plain": [
1032-
"'pip 25.3 from /Users/jhoward/aai-ws/.venv/lib/python3.12/site-packages/pip (python 3.12)'"
1043+
"'pip 25.3 from /Users/rensdimmendaal/git/.venv/lib/python3.12/site-packages/pip (python 3.12)'"
10331044
]
10341045
},
10351046
"execution_count": null,
@@ -1607,7 +1618,7 @@
16071618
{
16081619
"data": {
16091620
"text/plain": [
1610-
"Path('/Users/jhoward/aai-ws/fastcore/fastcore')"
1621+
"Path('/Users/rensdimmendaal/git/repos/fastcore/fastcore')"
16111622
]
16121623
},
16131624
"execution_count": null,
@@ -1912,14 +1923,14 @@
19121923
"text/markdown": [
19131924
"---\n",
19141925
"\n",
1915-
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L499){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
1926+
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L500){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
19161927
"\n",
19171928
"#### ReindexCollection\n",
19181929
"\n",
19191930
"```python\n",
19201931
"\n",
19211932
"def ReindexCollection(\n",
1922-
" coll, idxs:NoneType=None, cache:NoneType=None, tfm:function=<function noop>\n",
1933+
" coll, idxs:NoneType=None, cache:NoneType=None, tfm:function=noop\n",
19231934
"):\n",
19241935
"\n",
19251936
"\n",
@@ -1931,7 +1942,7 @@
19311942
"```python\n",
19321943
"\n",
19331944
"def ReindexCollection(\n",
1934-
" coll, idxs:NoneType=None, cache:NoneType=None, tfm:function=<function noop>\n",
1945+
" coll, idxs:NoneType=None, cache:NoneType=None, tfm:function=noop\n",
19351946
"):\n",
19361947
"\n",
19371948
"\n",
@@ -2008,7 +2019,7 @@
20082019
"text/markdown": [
20092020
"---\n",
20102021
"\n",
2011-
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L510){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
2022+
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L511){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
20122023
"\n",
20132024
"###### ReindexCollection.reindex\n",
20142025
"\n",
@@ -2121,7 +2132,7 @@
21212132
"text/markdown": [
21222133
"---\n",
21232134
"\n",
2124-
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L514){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
2135+
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L515){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
21252136
"\n",
21262137
"##### ReindexCollection.cache_clear\n",
21272138
"\n",
@@ -2196,7 +2207,7 @@
21962207
"text/markdown": [
21972208
"---\n",
21982209
"\n",
2199-
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L511){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
2210+
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L512){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
22002211
"\n",
22012212
"##### ReindexCollection.shuffle\n",
22022213
"\n",
@@ -2250,7 +2261,7 @@
22502261
{
22512262
"data": {
22522263
"text/plain": [
2253-
"['b', 'a', 'g', 'h', 'd', 'e', 'c', 'f']"
2264+
"['a', 'g', 'h', 'c', 'd', 'b', 'f', 'e']"
22542265
]
22552266
},
22562267
"execution_count": null,
@@ -2646,7 +2657,7 @@
26462657
{
26472658
"data": {
26482659
"text/plain": [
2649-
"'_7WDcaL3JT7qV037u3Werzw'"
2660+
"'_xNpj56ekTqyk9MsVDYRnnA'"
26502661
]
26512662
},
26522663
"execution_count": null,
@@ -2741,7 +2752,7 @@
27412752
{
27422753
"data": {
27432754
"text/plain": [
2744-
"('408ea190', '8c7d7247')"
2755+
"('0100dd53', '8c7d7247')"
27452756
]
27462757
},
27472758
"execution_count": null,
@@ -3438,7 +3449,7 @@
34383449
"text/markdown": [
34393450
"---\n",
34403451
"\n",
3441-
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L712){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
3452+
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L713){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
34423453
"\n",
34433454
"#### EventTimer\n",
34443455
"\n",
@@ -3493,8 +3504,8 @@
34933504
"name": "stdout",
34943505
"output_type": "stream",
34953506
"text": [
3496-
"Num Events: 1, Freq/sec: 73.6\n",
3497-
"Most recent: ▁▁▂▅▇ 33.0 26.9 54.1 89.8 120.6\n"
3507+
"Num Events: 9, Freq/sec: 346.2\n",
3508+
"Most recent: ▅▃▇▁▇ 263.7 256.6 278.3 235.1 276.9\n"
34983509
]
34993510
}
35003511
],
@@ -3578,7 +3589,7 @@
35783589
"text/markdown": [
35793590
"---\n",
35803591
"\n",
3581-
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L744){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
3592+
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L745){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
35823593
"\n",
35833594
"#### PartialFormatter\n",
35843595
"\n",
@@ -3722,7 +3733,7 @@
37223733
"name": "stdout",
37233734
"output_type": "stream",
37243735
"text": [
3725-
"2000-01-01 12:00:00 UTC is 2000-01-01 22:00:00+10:00 local time\n"
3736+
"2000-01-01 12:00:00 UTC is 2000-01-01 13:00:00+01:00 local time\n"
37263737
]
37273738
}
37283739
],
@@ -3754,7 +3765,7 @@
37543765
"name": "stdout",
37553766
"output_type": "stream",
37563767
"text": [
3757-
"2000-01-01 12:00:00 local is 2000-01-01 02:00:00+00:00 UTC time\n"
3768+
"2000-01-01 12:00:00 local is 2000-01-01 11:00:00+00:00 UTC time\n"
37583769
]
37593770
}
37603771
],
@@ -3863,7 +3874,7 @@
38633874
"text/markdown": [
38643875
"---\n",
38653876
"\n",
3866-
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L807){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
3877+
"[source](https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py#L808){target=\"_blank\" style=\"float:right; font-size:smaller\"}\n",
38673878
"\n",
38683879
"#### ContextManagers\n",
38693880
"\n",

0 commit comments

Comments
 (0)