Chrunos commited on
Commit
59d3971
·
verified ·
1 Parent(s): 63f8901

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -14
app.py CHANGED
@@ -18,7 +18,7 @@ from collections import defaultdict
18
  import time
19
  from datetime import timedelta
20
  import gc
21
-
22
 
23
  # Set up logging
24
  logging.basicConfig(level=logging.INFO)
@@ -42,13 +42,13 @@ BASE_URL = "https://chrunos-depot.hf.space"
42
  # Deezer ARL token (required for deezspot downloads)
43
  ARL_TOKEN = os.getenv('ARL')
44
 
 
45
  class DownloadRequest(BaseModel):
46
  url: str
47
  quality: str
48
  arl: str
49
 
50
 
51
-
52
  def convert_deezer_short_link_async(short_link: str) -> str:
53
  try:
54
  response = requests.get(short_link, allow_redirects=True)
@@ -90,7 +90,7 @@ class RateLimiter:
90
  self.max_requests = max_requests
91
  self.time_window = time_window
92
  self.requests: Dict[str, list] = defaultdict(list)
93
-
94
  def _cleanup_old_requests(self, user_ip: str) -> None:
95
  """Remove requests that are outside the time window."""
96
  current_time = time.time()
@@ -98,21 +98,21 @@ class RateLimiter:
98
  timestamp for timestamp in self.requests[user_ip]
99
  if current_time - timestamp < self.time_window.total_seconds()
100
  ]
101
-
102
  def is_rate_limited(self, user_ip: str) -> bool:
103
  """Check if the user has exceeded their rate limit."""
104
  self._cleanup_old_requests(user_ip)
105
-
106
  # Get current count after cleanup
107
  current_count = len(self.requests[user_ip])
108
-
109
  # Add current request timestamp (incrementing the count)
110
  current_time = time.time()
111
  self.requests[user_ip].append(current_time)
112
-
113
  # Check if user has exceeded the maximum requests
114
  return (current_count + 1) > self.max_requests
115
-
116
  def get_current_count(self, user_ip: str) -> int:
117
  """Get the current request count for an IP."""
118
  self._cleanup_old_requests(user_ip)
@@ -125,6 +125,7 @@ rate_limiter = RateLimiter(
125
  time_window=timedelta(days=1)
126
  )
127
 
 
128
  def get_user_ip(request: Request) -> str:
129
  """Helper function to get user's IP address."""
130
  forwarded = request.headers.get("X-Forwarded-For")
@@ -135,10 +136,10 @@ def get_user_ip(request: Request) -> str:
135
 
136
  # Download a track and return a download URL
137
  @app.post("/download/track")
138
- def download_track(request: DownloadRequest):
139
  try:
140
  user_ip = get_user_ip(request)
141
-
142
  if rate_limiter.is_rate_limited(user_ip):
143
  current_count = rate_limiter.get_current_count(user_ip)
144
  raise HTTPException(
@@ -148,15 +149,15 @@ def download_track(request: DownloadRequest):
148
  "help": "https://t.me/chrunoss"
149
  }
150
  )
151
- if request.arl is None or request.arl.strip() == "":
152
  ARL = ARL_TOKEN
153
  else:
154
- ARL = request.arl
155
  logger.info(f'arl: {ARL}')
156
- url = request.url
157
  if 'deezer.page' in url:
158
  url = convert_deezer_short_link_async(url)
159
- quality = request.quality
160
  dl = DeeLogin(arl=ARL)
161
 
162
  if quality not in ["MP3_320", "MP3_128", "FLAC"]:
@@ -226,6 +227,7 @@ def download_track(request: DownloadRequest):
226
  raise HTTPException(status_code=500, detail=str(e))
227
 
228
 
 
229
  # Pydantic model for album request
230
  class AlbumRequest(BaseModel):
231
  album_id: str
 
18
  import time
19
  from datetime import timedelta
20
  import gc
21
+ from typing import Dict
22
 
23
  # Set up logging
24
  logging.basicConfig(level=logging.INFO)
 
42
  # Deezer ARL token (required for deezspot downloads)
43
  ARL_TOKEN = os.getenv('ARL')
44
 
45
+
46
  class DownloadRequest(BaseModel):
47
  url: str
48
  quality: str
49
  arl: str
50
 
51
 
 
52
  def convert_deezer_short_link_async(short_link: str) -> str:
53
  try:
54
  response = requests.get(short_link, allow_redirects=True)
 
90
  self.max_requests = max_requests
91
  self.time_window = time_window
92
  self.requests: Dict[str, list] = defaultdict(list)
93
+
94
  def _cleanup_old_requests(self, user_ip: str) -> None:
95
  """Remove requests that are outside the time window."""
96
  current_time = time.time()
 
98
  timestamp for timestamp in self.requests[user_ip]
99
  if current_time - timestamp < self.time_window.total_seconds()
100
  ]
101
+
102
  def is_rate_limited(self, user_ip: str) -> bool:
103
  """Check if the user has exceeded their rate limit."""
104
  self._cleanup_old_requests(user_ip)
105
+
106
  # Get current count after cleanup
107
  current_count = len(self.requests[user_ip])
108
+
109
  # Add current request timestamp (incrementing the count)
110
  current_time = time.time()
111
  self.requests[user_ip].append(current_time)
112
+
113
  # Check if user has exceeded the maximum requests
114
  return (current_count + 1) > self.max_requests
115
+
116
  def get_current_count(self, user_ip: str) -> int:
117
  """Get the current request count for an IP."""
118
  self._cleanup_old_requests(user_ip)
 
125
  time_window=timedelta(days=1)
126
  )
127
 
128
+
129
  def get_user_ip(request: Request) -> str:
130
  """Helper function to get user's IP address."""
131
  forwarded = request.headers.get("X-Forwarded-For")
 
136
 
137
  # Download a track and return a download URL
138
  @app.post("/download/track")
139
+ def download_track(request: Request, download_request: DownloadRequest):
140
  try:
141
  user_ip = get_user_ip(request)
142
+
143
  if rate_limiter.is_rate_limited(user_ip):
144
  current_count = rate_limiter.get_current_count(user_ip)
145
  raise HTTPException(
 
149
  "help": "https://t.me/chrunoss"
150
  }
151
  )
152
+ if download_request.arl is None or download_request.arl.strip() == "":
153
  ARL = ARL_TOKEN
154
  else:
155
+ ARL = download_request.arl
156
  logger.info(f'arl: {ARL}')
157
+ url = download_request.url
158
  if 'deezer.page' in url:
159
  url = convert_deezer_short_link_async(url)
160
+ quality = download_request.quality
161
  dl = DeeLogin(arl=ARL)
162
 
163
  if quality not in ["MP3_320", "MP3_128", "FLAC"]:
 
227
  raise HTTPException(status_code=500, detail=str(e))
228
 
229
 
230
+
231
  # Pydantic model for album request
232
  class AlbumRequest(BaseModel):
233
  album_id: str