davanstrien HF staff commited on
Commit
3b22eeb
1 Parent(s): c0cfc84

Refactor code and update dependencies

Browse files
Files changed (3) hide show
  1. main.py +30 -15
  2. requirements.in +0 -1
  3. requirements.txt +17 -1
main.py CHANGED
@@ -1,17 +1,17 @@
1
  import contextlib
2
- from fastapi import FastAPI, Request, BackgroundTasks
3
- from fastapi.middleware.cors import CORSMiddleware
4
- from pydantic import BaseModel
5
  import json
6
- from huggingface_hub import HfApi
7
  import os
8
- from dotenv import load_dotenv
9
- import json
10
  from contextlib import asynccontextmanager
11
  from datetime import datetime
12
  from pathlib import Path
 
 
 
 
 
 
 
13
  from starlette.responses import RedirectResponse
14
- from huggingface_hub import CommitScheduler
15
 
16
  load_dotenv()
17
 
@@ -52,13 +52,6 @@ app.add_middleware(
52
  )
53
 
54
 
55
- class Vote(BaseModel):
56
- dataset: str
57
- description: str
58
- vote: int
59
- userID: str
60
-
61
-
62
  def save_vote(vote_entry):
63
  with open(VOTES_FILE, "a") as file:
64
  # add time stamp to the vote entry
@@ -73,8 +66,30 @@ def root():
73
  return RedirectResponse(url="/docs")
74
 
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  @app.post("/vote")
77
- async def receive_vote(vote: Vote, background_tasks: BackgroundTasks):
 
 
 
 
 
78
  vote_entry = {
79
  "dataset": vote.dataset,
80
  "vote": vote.vote,
 
1
  import contextlib
 
 
 
2
  import json
 
3
  import os
 
 
4
  from contextlib import asynccontextmanager
5
  from datetime import datetime
6
  from pathlib import Path
7
+
8
+ from dotenv import load_dotenv
9
+ from fastapi import BackgroundTasks, FastAPI, Header, Request
10
+ from fastapi.middleware.cors import CORSMiddleware
11
+ from huggingface_hub import CommitScheduler, HfApi, whoami
12
+ from huggingface_hub.utils import HTTPError
13
+ from pydantic import BaseModel
14
  from starlette.responses import RedirectResponse
 
15
 
16
  load_dotenv()
17
 
 
52
  )
53
 
54
 
 
 
 
 
 
 
 
55
  def save_vote(vote_entry):
56
  with open(VOTES_FILE, "a") as file:
57
  # add time stamp to the vote entry
 
66
  return RedirectResponse(url="/docs")
67
 
68
 
69
+ class Vote(BaseModel):
70
+ dataset: str
71
+ description: str
72
+ vote: int
73
+ userID: str
74
+
75
+
76
+ def validate_token(token: str):
77
+ try:
78
+ user = whoami(token=token)
79
+ return True
80
+ except HTTPError as e:
81
+ # check for HTTPError: Invalid user token. If you didn't pass a user token, make sure you are properly logged in by executing `huggingface-cli login`, and if you did pass a user token, double-check it's correct. in the error message
82
+ if "Invalid user token" in str(e):
83
+ return False
84
+
85
+
86
  @app.post("/vote")
87
+ async def receive_vote(
88
+ vote: Vote, background_tasks: BackgroundTasks, authorization: str = Header(...)
89
+ ):
90
+ token = authorization.split(" ")[1]
91
+ if not validate_token(token):
92
+ return {"message": "Invalid user token"}
93
  vote_entry = {
94
  "dataset": vote.dataset,
95
  "vote": vote.vote,
requirements.in CHANGED
@@ -2,5 +2,4 @@ fastapi
2
  fastapi-cors
3
  huggingface_hub
4
  python-dotenv
5
- toolz
6
  uvicorn[standard]
 
2
  fastapi-cors
3
  huggingface_hub
4
  python-dotenv
 
5
  uvicorn[standard]
requirements.txt CHANGED
@@ -8,10 +8,16 @@ anyio==4.2.0
8
  # watchfiles
9
  certifi==2023.11.17
10
  # via requests
 
 
11
  charset-normalizer==3.3.2
12
  # via requests
13
  click==8.1.7
14
  # via uvicorn
 
 
 
 
15
  environs==11.0.0
16
  # via fastapi-cors
17
  fastapi==0.109.0
@@ -36,6 +42,12 @@ packaging==23.2
36
  # via
37
  # huggingface-hub
38
  # marshmallow
 
 
 
 
 
 
39
  pydantic==2.5.3
40
  # via fastapi
41
  pydantic-core==2.14.6
@@ -44,17 +56,21 @@ python-dotenv==1.0.1
44
  # via
45
  # environs
46
  # uvicorn
 
47
  pyyaml==6.0.1
48
  # via
49
  # huggingface-hub
50
  # uvicorn
51
  requests==2.31.0
52
  # via huggingface-hub
 
 
 
 
53
  sniffio==1.3.0
54
  # via anyio
55
  starlette==0.35.1
56
  # via fastapi
57
- toolz==0.12.0
58
  tqdm==4.66.1
59
  # via huggingface-hub
60
  typing-extensions==4.9.0
 
8
  # watchfiles
9
  certifi==2023.11.17
10
  # via requests
11
+ cffi==1.16.0
12
+ # via cryptography
13
  charset-normalizer==3.3.2
14
  # via requests
15
  click==8.1.7
16
  # via uvicorn
17
+ cryptography==42.0.5
18
+ # via python-jose
19
+ ecdsa==0.18.0
20
+ # via python-jose
21
  environs==11.0.0
22
  # via fastapi-cors
23
  fastapi==0.109.0
 
42
  # via
43
  # huggingface-hub
44
  # marshmallow
45
+ pyasn1==0.6.0
46
+ # via
47
+ # python-jose
48
+ # rsa
49
+ pycparser==2.22
50
+ # via cffi
51
  pydantic==2.5.3
52
  # via fastapi
53
  pydantic-core==2.14.6
 
56
  # via
57
  # environs
58
  # uvicorn
59
+ python-jose==3.3.0
60
  pyyaml==6.0.1
61
  # via
62
  # huggingface-hub
63
  # uvicorn
64
  requests==2.31.0
65
  # via huggingface-hub
66
+ rsa==4.9
67
+ # via python-jose
68
+ six==1.16.0
69
+ # via ecdsa
70
  sniffio==1.3.0
71
  # via anyio
72
  starlette==0.35.1
73
  # via fastapi
 
74
  tqdm==4.66.1
75
  # via huggingface-hub
76
  typing-extensions==4.9.0