Spaces:
Running
Running
BinaryONe
commited on
Commit
·
68a2a86
1
Parent(s):
c7b5125
API Updates
Browse files- FileStream/DBFiles/___init__.py +7 -0
- FileStream/DBFiles/database.py +37 -0
- FileStream/server/API/__init__.py +10 -18
- FileStream/server/API/listings.py +41 -0
- FileStream/server/API/search.py +15 -14
FileStream/DBFiles/___init__.py
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
from .database import PUBLICFilesDB
|
3 |
+
from FileStream.config import Telegram
|
4 |
+
|
5 |
+
DB_Controller = PUBLICFilesDB(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
|
6 |
+
|
7 |
+
|
FileStream/DBFiles/database.py
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import re
|
2 |
+
import time
|
3 |
+
import pymongo
|
4 |
+
import motor.motor_asyncio
|
5 |
+
from bson.objectid import ObjectId
|
6 |
+
from bson.errors import InvalidId
|
7 |
+
from bson.json_util import dumps
|
8 |
+
|
9 |
+
from pymongo.errors import PyMongoError
|
10 |
+
|
11 |
+
class PUBLICFilesDB:
|
12 |
+
def __init__(self, uri, database_name):
|
13 |
+
self._client = motor.motor_asyncio.AsyncIOMotorClient(uri)
|
14 |
+
self.db = self._client[database_name]
|
15 |
+
self.files = self.db.Public_Files
|
16 |
+
|
17 |
+
async def GetMoviesAllBy10(self, offset=None):
|
18 |
+
try:
|
19 |
+
filter = {"type": "Movie"} # Define the filter for movies
|
20 |
+
total_results = await self.files.count_documents(filter)
|
21 |
+
offset=int( offset if offset else 0)
|
22 |
+
next_offset = offset + 10
|
23 |
+
if next_offset >= total_results: # Changed > to >= to handle the last page correctly
|
24 |
+
next_offset = ''
|
25 |
+
cursor = self.files.find(filter) # Apply the filter
|
26 |
+
cursor.sort('$natural', pymongo.DESCENDING) # Use pymongo.DESCENDING
|
27 |
+
cursor.skip(offset).limit(10)
|
28 |
+
files = await cursor.to_list(length=10)
|
29 |
+
return files, next_offset
|
30 |
+
|
31 |
+
except PyMongoError as e:
|
32 |
+
print(f"MongoDB error: {e}")
|
33 |
+
return [], '' # Return empty list and '' on error
|
34 |
+
except Exception as e:
|
35 |
+
print(f"An unexpected error occurred: {e}")
|
36 |
+
return [], ''
|
37 |
+
|
FileStream/server/API/__init__.py
CHANGED
@@ -2,17 +2,10 @@ import aiohttp_cors
|
|
2 |
from aiohttp import web
|
3 |
|
4 |
#---------------------- Local Imports --------------------#
|
5 |
-
#from .listings import (
|
6 |
-
# list_all_files_db,
|
7 |
-
# list_all_files,
|
8 |
-
# list_all_files_tmdb,
|
9 |
-
# list_10_all_files_db,
|
10 |
-
# list_all_tmdb_tv_from_db,
|
11 |
-
# list_all_tmdb_movies_from_db,
|
12 |
-
#)
|
13 |
from .downloads import stream_handler
|
14 |
from .uploads import upload_file
|
15 |
-
from .search import
|
|
|
16 |
|
17 |
|
18 |
#-----------------------------Functions------------------------#
|
@@ -32,22 +25,21 @@ cors = aiohttp_cors.setup(api, defaults={"*": aiohttp_cors.ResourceOptions(
|
|
32 |
allow_methods="*"
|
33 |
)})
|
34 |
|
35 |
-
cors.add(api.router.add_get('/', handle_v2))
|
36 |
-
|
37 |
-
|
38 |
-
#
|
39 |
-
api.router.add_get('/
|
40 |
-
#
|
41 |
-
#Webseries
|
42 |
-
#trending
|
43 |
-
#detils
|
44 |
|
|
|
45 |
#api.router.add_get('/files', list_all_files_db)
|
46 |
#api.router.add_get('/files/mix', list_all_files)
|
47 |
#api.router.add_get('/tmdb/mix', list_all_files_tmdb)
|
48 |
#api.router.add_get('/10/files', list_10_all_files_db)
|
49 |
#api.router.add_get('/tmdb/tv', list_all_tmdb_tv_from_db)
|
50 |
#api.router.add_get('/tmdb/movies', list_all_tmdb_movies_from_db)
|
|
|
51 |
|
52 |
api.router.add_get('/upload', upload_file)
|
53 |
api.router.add_get('/dl/{path}', stream_handler)
|
|
|
2 |
from aiohttp import web
|
3 |
|
4 |
#---------------------- Local Imports --------------------#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
from .downloads import stream_handler
|
6 |
from .uploads import upload_file
|
7 |
+
from .search import SearchAll
|
8 |
+
from .listings import AllMovies10
|
9 |
|
10 |
|
11 |
#-----------------------------Functions------------------------#
|
|
|
25 |
allow_methods="*"
|
26 |
)})
|
27 |
|
28 |
+
cors.add(api.router.add_get('/', handle_v2)) #Basic Reponse
|
29 |
+
api.router.add_get('/search', SearchAll) #serch API
|
30 |
+
api.router.add_get('/movies', AllMovies10) #Movies
|
31 |
+
#api.router.add_get('/series', AllSeries10) #Webseries
|
32 |
+
#api.router.add_get('/trending', Leatest10) #trending
|
33 |
+
#api.router.add_get('/details', Details) #details
|
|
|
|
|
|
|
34 |
|
35 |
+
#----------------------------------------------------------------
|
36 |
#api.router.add_get('/files', list_all_files_db)
|
37 |
#api.router.add_get('/files/mix', list_all_files)
|
38 |
#api.router.add_get('/tmdb/mix', list_all_files_tmdb)
|
39 |
#api.router.add_get('/10/files', list_10_all_files_db)
|
40 |
#api.router.add_get('/tmdb/tv', list_all_tmdb_tv_from_db)
|
41 |
#api.router.add_get('/tmdb/movies', list_all_tmdb_movies_from_db)
|
42 |
+
#-----------------------------------------------------------------
|
43 |
|
44 |
api.router.add_get('/upload', upload_file)
|
45 |
api.router.add_get('/dl/{path}', stream_handler)
|
FileStream/server/API/listings.py
CHANGED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import json
|
3 |
+
import logging
|
4 |
+
import asyncio
|
5 |
+
import traceback
|
6 |
+
from aiohttp import web
|
7 |
+
from pyrogram import raw
|
8 |
+
from aiohttp.http_exceptions import BadStatusLine
|
9 |
+
|
10 |
+
from FileStream.utils.FileProcessors.human_readable import humanbytes
|
11 |
+
from FileStream.config import Telegram, Server
|
12 |
+
|
13 |
+
from FileStream.DBFiles import PUBLICFilesDB
|
14 |
+
|
15 |
+
db = PUBLICFilesDB(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
|
16 |
+
|
17 |
+
async def AllMovies10(request: web.Request):
|
18 |
+
offset = request.rel_url.query.get('offset', 0)
|
19 |
+
results=[]
|
20 |
+
files, next_offset = await db.get_search_results(offset=offset)
|
21 |
+
for file in files:
|
22 |
+
results.append({
|
23 |
+
"poster":file['poster'],
|
24 |
+
"title":file['title'],
|
25 |
+
"release_date":file['release_date'],
|
26 |
+
"genre":file['genre'],
|
27 |
+
"imdb_id":file['IMDB_id'],
|
28 |
+
"type":file['type'],
|
29 |
+
"file_name": file['file']['file_name'],
|
30 |
+
"document_file_id": file['file']['file_id'],
|
31 |
+
"caption": file['file']['file_name'] or "",
|
32 |
+
"description": f"Size: {humanbytes(file['file']['file_size'])}\nType: {file['file']['mime_type']}",
|
33 |
+
})
|
34 |
+
return web.json_response({"count": len(results), "results": results, "next_offset": next_offset}) # Correct JSON response format
|
35 |
+
|
36 |
+
|
37 |
+
|
38 |
+
|
39 |
+
|
40 |
+
|
41 |
+
|
FileStream/server/API/search.py
CHANGED
@@ -15,24 +15,25 @@ from FileStream.Database import Database
|
|
15 |
from FileStream.config import Telegram, Server
|
16 |
db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
|
17 |
|
18 |
-
async def
|
19 |
-
query = request.rel_url.query.get('query', '') # Extract 'query' from URL params
|
20 |
-
|
21 |
-
|
22 |
-
print(query, offset) # Debugging print
|
23 |
-
|
24 |
results = []
|
25 |
-
offset = int(offset) # Convert offset to integer
|
26 |
-
|
27 |
# Simulating a database function call (replace with actual implementation)
|
28 |
files, next_offset = await db.get_search_results(query, file_type=None, max_results=10, offset=offset)
|
29 |
-
|
30 |
for file in files:
|
31 |
results.append({
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
})
|
37 |
|
38 |
-
return web.json_response({"results": results, "next_offset": next_offset}) # Correct JSON response format
|
|
|
15 |
from FileStream.config import Telegram, Server
|
16 |
db = Database(Telegram.DATABASE_URL, Telegram.SESSION_NAME)
|
17 |
|
18 |
+
async def SearchAll(request: web.Request):
|
19 |
+
query = request.rel_url.query.get('query', '') # Extract 'query' from URL params
|
20 |
+
#print(query, offset) # Debugging print
|
|
|
|
|
|
|
21 |
results = []
|
22 |
+
offset = int(request.rel_url.query.get('offset') if request.rel_url.query.get('offset') else 0 ) # Convert offset to integer
|
|
|
23 |
# Simulating a database function call (replace with actual implementation)
|
24 |
files, next_offset = await db.get_search_results(query, file_type=None, max_results=10, offset=offset)
|
|
|
25 |
for file in files:
|
26 |
results.append({
|
27 |
+
"poster":file['poster'],
|
28 |
+
"title":file['title'],
|
29 |
+
"release_date":file['release_date'],
|
30 |
+
"genre":file['genre'],
|
31 |
+
"imdb_id":file['IMDB_id'],
|
32 |
+
"type":file['type'],
|
33 |
+
"file_name": file['file']['file_name'],
|
34 |
+
"document_file_id": file['file']['file_id'],
|
35 |
+
"caption": file['file']['file_name'] or "",
|
36 |
+
"description": f"Size: {humanbytes(file['file']['file_size'])}\nType: {file['file']['mime_type']}",
|
37 |
})
|
38 |
|
39 |
+
return web.json_response({"count": len(results), "results": results, "next_offset": next_offset}) # Correct JSON response format
|