winebox 0.1.2__py3-none-any.whl → 0.1.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: winebox
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Wine Cellar Management Application with OCR label scanning
5
5
  Project-URL: Homepage, https://github.com/jdrumgoole/winebox
6
6
  Project-URL: Repository, https://github.com/jdrumgoole/winebox
@@ -22,6 +22,7 @@ Classifier: Topic :: Home Automation
22
22
  Requires-Python: >=3.11
23
23
  Requires-Dist: aiofiles>=23.0.0
24
24
  Requires-Dist: aiosqlite>=0.19.0
25
+ Requires-Dist: anthropic>=0.40.0
25
26
  Requires-Dist: bcrypt<4.1.0,>=4.0.0
26
27
  Requires-Dist: fastapi>=0.109.0
27
28
  Requires-Dist: jinja2>=3.1.0
@@ -32,6 +33,7 @@ Requires-Dist: pydantic>=2.0.0
32
33
  Requires-Dist: pytesseract>=0.3.10
33
34
  Requires-Dist: python-jose[cryptography]>=3.3.0
34
35
  Requires-Dist: python-multipart>=0.0.6
36
+ Requires-Dist: slowapi>=0.1.9
35
37
  Requires-Dist: sqlalchemy>=2.0.0
36
38
  Requires-Dist: uvicorn[standard]>=0.27.0
37
39
  Provides-Extra: dev
@@ -40,6 +42,8 @@ Requires-Dist: httpx>=0.26.0; extra == 'dev'
40
42
  Requires-Dist: invoke>=2.2.0; extra == 'dev'
41
43
  Requires-Dist: myst-parser>=2.0.0; extra == 'dev'
42
44
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
45
+ Requires-Dist: pytest-playwright>=0.4.0; extra == 'dev'
46
+ Requires-Dist: pytest-xdist>=3.5.0; extra == 'dev'
43
47
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
44
48
  Requires-Dist: sphinx>=7.0.0; extra == 'dev'
45
49
  Description-Content-Type: text/markdown
@@ -173,6 +177,38 @@ Images are served via the API at `/api/images/{filename}`.
173
177
 
174
178
  **Note:** The `data/` directory is excluded from git (see `.gitignore`). Make sure to back up this directory to preserve your wine collection data.
175
179
 
180
+ ## Label Scanning
181
+
182
+ WineBox uses AI-powered label scanning to extract wine information from photos.
183
+
184
+ ### Claude Vision (Recommended)
185
+
186
+ For best results, configure Claude Vision by setting your Anthropic API key:
187
+
188
+ ```bash
189
+ export ANTHROPIC_API_KEY=your-api-key
190
+ # or
191
+ export WINEBOX_ANTHROPIC_API_KEY=your-api-key
192
+ ```
193
+
194
+ Claude Vision provides intelligent label analysis that:
195
+ - Handles decorative and artistic fonts
196
+ - Understands wine-specific terminology
197
+ - Extracts structured data (winery, vintage, grape variety, region, etc.)
198
+ - Works with curved or angled text
199
+
200
+ ### Tesseract OCR (Fallback)
201
+
202
+ If no Anthropic API key is configured, WineBox falls back to Tesseract OCR. This requires Tesseract to be installed on your system:
203
+
204
+ ```bash
205
+ # macOS
206
+ brew install tesseract
207
+
208
+ # Ubuntu/Debian
209
+ sudo apt-get install tesseract-ocr
210
+ ```
211
+
176
212
  ## Authentication
177
213
 
178
214
  WineBox requires authentication for all API endpoints (except `/health`).
@@ -1,34 +1,36 @@
1
- winebox/__init__.py,sha256=bAd30zPrCJ2BYtbyxoRUvXt6m6Z4ivEOSdT3HD5uyos,75
2
- winebox/config.py,sha256=IJ9NzNyX0_g7ji3EmVxZRRL0csB7N5iGxsYStO25hI8,1007
1
+ winebox/__init__.py,sha256=41DDUIMoW3BxgT2x9al7rgVQXzMhaArZdUhlOKm_FOM,75
2
+ winebox/config.py,sha256=pfwXrKsI4KsXtA4lehEhAc9xfjBGu1OzdhiUq4mixto,2438
3
3
  winebox/database.py,sha256=jTdf9mb48D8644THo6Mx6lHCKDFlAZ18P8Dvuk2eROI,1128
4
- winebox/main.py,sha256=wlXrBwMvJQhG3g8mmOGWp-QbEEbR805SaElBryR61t0,2398
4
+ winebox/main.py,sha256=RCB1oCxWbKXiMtQvfLabhGI_xvDjr_pGLEYeo2SSgeU,4104
5
5
  winebox/cli/__init__.py,sha256=FOUoclklBXVfsfON3ohA8v_coJ9p5LSbVYvTucyXieg,29
6
6
  winebox/cli/server.py,sha256=aN4znSvQRCZFZlQ1gcGag7OCFngwzUJdi084ZdNrnNI,8416
7
7
  winebox/cli/user_admin.py,sha256=xwkd4-YN9uL6hX7-AuiDUNekG7x45l1lKor7AsOUxds,8549
8
8
  winebox/models/__init__.py,sha256=2avQWHx53-5Z6jnzFlhh5u10Dw99w7en2nqCXEbwqRI,312
9
9
  winebox/models/inventory.py,sha256=VLxpEIdYbD-oG9OfIGkHKDKm-cbSSo_aZGx66wRqR7Y,1324
10
10
  winebox/models/transaction.py,sha256=9k1AAK0unYNseDubTaiFnGUGDVtuOqrjNUjIDukFDbc,1812
11
- winebox/models/user.py,sha256=VP7NvbQDJMygTtt9Q5zPiBmtvtOCW5Cvaidi8zXDp98,1570
11
+ winebox/models/user.py,sha256=Ke7DJsVtUzHlKQUiHEDHTi4Rm-tqCbrin4iZyt4SP9A,1734
12
12
  winebox/models/wine.py,sha256=R40TTRunPcTG4_D8kEWhopM2k6ne_awET7ctY4fk-HE,2503
13
13
  winebox/routers/__init__.py,sha256=TEjBLPCkG007ItXMONZ2TsjOxl_TvHis1v84IOkXm1A,167
14
- winebox/routers/auth.py,sha256=7rmld-TOIHmCMJfQKuQfkZFoNAAZd0zuj-mKqmAbHeg,2446
14
+ winebox/routers/auth.py,sha256=0F8tXJSo_oIYEY25dO2QZ-NtuF6-Fi4HnSLTCa6TWzs,5657
15
15
  winebox/routers/cellar.py,sha256=QSyAnPQ2hiNaoojLk-5hJy95OnG8RMHOD0h5LV6bAWM,3404
16
16
  winebox/routers/search.py,sha256=aIqwsjnB9e-D84VVcuye-01V_9WBUjFKzXNsX0gkRak,4971
17
17
  winebox/routers/transactions.py,sha256=K0UDIJbVSTjV7NdI_CS0pvoTflH3Yp89DmneyFyl9ok,2055
18
- winebox/routers/wines.py,sha256=4Jp1IGDCH2_jJfeAvy1ItfaNmmagUv20r_NTNmEYnew,9385
18
+ winebox/routers/wines.py,sha256=szr9h7W2Q-Xxn8LYd6rXtEOVWST7hthXGrZ84xSyLpY,16948
19
19
  winebox/schemas/__init__.py,sha256=R4j1wdV1F-6kA45rHA8NUP2cqxBmLb2CMklo8tFjzGQ,357
20
20
  winebox/schemas/transaction.py,sha256=GV_AZGeuFp_nOkg902UUhrHGwB1DxcQmGoG82m1UccI,899
21
21
  winebox/schemas/wine.py,sha256=xHWDiV5bvEJuLPN2qWgOhqVMOTdlDSmfan5mtEy3Nvw,2301
22
22
  winebox/services/__init__.py,sha256=rlAd5FBcqZJ7rsrFqR8MwTqGJVerlQHVUleEmoIaz1Y,277
23
23
  winebox/services/auth.py,sha256=RDXP26hL3cGGxKcniXWMZ0sPUP6ew4LLMnfo4dv4P2E,3854
24
- winebox/services/image_storage.py,sha256=ftiX54dVuDT0DVLpyBOL9N7zhZkapI0l1TFknfPedno,2393
25
- winebox/services/ocr.py,sha256=X9lk1dkcH7xRrfYU5ArOakW4qavlRHQIkDD9nbPtzz4,3881
24
+ winebox/services/image_storage.py,sha256=r1QzOFY0KzcJVdQV2fa4df9GtV3T7weQB17oEQZLTTo,6306
25
+ winebox/services/ocr.py,sha256=zFmQGj3a_jv21MBx8RfNkFIenAOnJ0O28JupSrsNC44,4925
26
+ winebox/services/vision.py,sha256=jINJ0RmmIkBhiuAyYAUCtmhxMWTz1pNcTSOUck-xjPg,10263
26
27
  winebox/services/wine_parser.py,sha256=n5ldv2x2XsTfpK3acYDyMNyZHdJ_8WQU0keOql14MJ0,10456
27
- winebox/static/index.html,sha256=57uWE1XQXIjP5a1lXMLqwZR2l7w5QaVMH5Qpp0DC4A0,12900
28
- winebox/static/css/style.css,sha256=xzDVgl0-zT4yLtHWsuU3ASk0YImMnMGP5a8vKpYK6gA,19561
29
- winebox/static/js/app.js,sha256=GabcNGSn7yQv7_KC7Ew5VjHmdiCjeAWxK2YtTkktVTc,23557
30
- winebox-0.1.2.dist-info/METADATA,sha256=spmQWT7suXn3fWhtOULydLz0yvDEOsv26V-3H89UQiE,7150
31
- winebox-0.1.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
32
- winebox-0.1.2.dist-info/entry_points.txt,sha256=XY-GMf023m8Iof3rmokkITONECm8gCOVkTX0rCkze30,103
33
- winebox-0.1.2.dist-info/licenses/LICENSE,sha256=3popbhCShFhWVwTLKeQE-JNDYuPOYfmCiz-LoQpizTA,1070
34
- winebox-0.1.2.dist-info/RECORD,,
28
+ winebox/static/favicon.svg,sha256=jYFlQ-dEfhUoHQJepoSEMYQx0jxk8HyuX0wrd4OApzE,1061
29
+ winebox/static/index.html,sha256=LZKro_4jyebGXCPvP87TbBrKuVh_Nma7n9JRhUGwh2Q,27473
30
+ winebox/static/css/style.css,sha256=QEcmosNtf4_oH7JGYveQYRAzHdS5vh93fTVdyBA9YhM,29987
31
+ winebox/static/js/app.js,sha256=0TVu8WFHZhHt-jhFNFetAHCTn89xLc8exf99GjtFRD4,45251
32
+ winebox-0.1.4.dist-info/METADATA,sha256=uZFmCdBtirCXbMX8VcuW7xUOiWFxIYmcR_P2WsKHQOc,8138
33
+ winebox-0.1.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
+ winebox-0.1.4.dist-info/entry_points.txt,sha256=XY-GMf023m8Iof3rmokkITONECm8gCOVkTX0rCkze30,103
35
+ winebox-0.1.4.dist-info/licenses/LICENSE,sha256=3popbhCShFhWVwTLKeQE-JNDYuPOYfmCiz-LoQpizTA,1070
36
+ winebox-0.1.4.dist-info/RECORD,,