This commit is contained in:
Xander 2025-04-03 21:53:56 +03:00
parent 456ad55d01
commit 6d9396cafa
7 changed files with 54315 additions and 76124 deletions

1
.gitignore vendored
View File

@ -14,3 +14,4 @@ alembic.ini
/files
hello.py
/test
/logs

12748
logs/app.log

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -50,6 +50,21 @@ class JsonData(BaseModel):
json_data: Union[dict, str]
class jobs_delete(BaseModel):
user_id: int
job_id:int
class avtopilots(BaseModel):
user_id: int
avtopilot:bool
class update(BaseModel):
user_id: int
@router.post("/client/")
async def client(data: JsonData, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
if x_api_key != "4545454":
@ -126,139 +141,76 @@ async def client(data: JsonData, x_api_key: str = Header(...), db: Session = Dep
@router.post("/client_update")
async def client_update(data: JsonData, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
async def client_update(data: update, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
if x_api_key != "4545454":
raise HTTPException(status_code=403, detail="Invalid API Key")
# Если json_data строка, декодируем её в словарь
if isinstance(data.json_data, str):
try:
data.json_data = json.loads(data.json_data) # Декодируем строку в словарь
except json.JSONDecodeError:
raise HTTPException(status_code=400, detail="Invalid JSON format")
try:
user_id = data.user_id # Обратите внимание на точку вместо квадратных скобок
print(f"Полученные данные: user_id={user_id}")
if isinstance(data.json_data, dict):
try:
user_id = data.json_data['user_id']
print(f"Полученные заявки: {get_jobs}")
except Exception as e:
print(f"Ошибка при обработке данных: {e}")
raise HTTPException(status_code=400, detail="Error processing data")
except KeyError as e:
print(f"Ошибка при извлечении данных: {e}")
raise HTTPException(status_code=400, detail="Missing required field in json_data")
else:
print(f"Неверный формат данных: {type(data.json_data)}")
raise HTTPException(status_code=400, detail="Invalid data format")
return {"status": "ok", "message": "JSON получен" }
return {"status": "ok", "message": "Data received", "user_id": user_id, }
@router.post("/client_jobs/")
async def client_jobs(data: JsonData, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
async def client_jobs(data: update, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
if x_api_key != "4545454":
raise HTTPException(status_code=403, detail="Invalid API Key")
# Если json_data строка, декодируем её в словарь
if isinstance(data.json_data, str):
try:
data.json_data = json.loads(data.json_data) # Декодируем строку в словарь
except json.JSONDecodeError:
raise HTTPException(status_code=400, detail="Invalid JSON format")
try:
user_id = data.user_id # Обратите внимание на точку вместо квадратных скобок
get_jobs = await get_applied_jobs(db, user_id)
print(f"Полученные данные: user_id={user_id}")
# Если json_data строка — декодируем
# Теперь data.json_data гарантированно является словарем
if isinstance(data.json_data, dict):
try:
user_id = data.json_data['user_id']
get_jobs = await get_applied_jobs(db, user_id)
print(f"Полученные заявки: {get_jobs}")
except Exception as e:
print(f"Ошибка при обработке данных: {e}")
raise HTTPException(status_code=400, detail="Error processing data")
except KeyError as e:
print(f"Ошибка при извлечении данных: {e}")
raise HTTPException(status_code=400, detail="Missing required field in json_data")
else:
print(f"Неверный формат данных: {type(data.json_data)}")
raise HTTPException(status_code=400, detail="Invalid data format")
return {"message": "JSON получен", "data": get_jobs}
return {"status": "ok", "message": "Data received", "get_jobs": get_jobs}
# return {"message": "JSON получен", "data": get_jobs}
@router.post("/avtopilot")
async def avtopilot(data: JsonData, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
async def avtopilot(data: avtopilots, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
if x_api_key != "4545454":
raise HTTPException(status_code=403, detail="Invalid API Key")
# Если json_data строка, декодируем её в словарь
if isinstance(data.json_data, str):
try:
data.json_data = json.loads(data.json_data) # Декодируем строку в словарь
except json.JSONDecodeError:
raise HTTPException(status_code=400, detail="Invalid JSON format")
try:
user_id = data.user_id # Обратите внимание на точку вместо квадратных скобок
avtopilotss = data.avtopilot # Так как data - это объект Pydantic модели
print(f"Полученные данные: user_id={user_id}, avtopilotss={avtopilotss}")
if isinstance(data.json_data, dict):
try:
user_id = data.json_data['user_id']
print(f"Полученные заявки: {get_jobs}")
except Exception as e:
print(f"Ошибка при обработке данных: {e}")
raise HTTPException(status_code=400, detail="Error processing data")
except KeyError as e:
print(f"Ошибка при извлечении данных: {e}")
raise HTTPException(status_code=400, detail="Missing required field in json_data")
else:
print(f"Неверный формат данных: {type(data.json_data)}")
raise HTTPException(status_code=400, detail="Invalid data format")
return {"status": "ok", "message": "JSON получен" }
return {"status": "ok", "message": "Data received", "user_id": user_id, "avtopilotss": avtopilotss}
@router.post("/jobs_delete")
async def jobs_delete(data: JsonData, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
async def jobs_delete(data: jobs_delete, x_api_key: str = Header(...), db: Session = Depends(get_async_session)):
if x_api_key != "4545454":
raise HTTPException(status_code=403, detail="Invalid API Key")
# Если json_data строка, декодируем её в словарь
if isinstance(data.json_data, str):
try:
data.json_data = json.loads(data.json_data) # Декодируем строку в словарь
except json.JSONDecodeError:
raise HTTPException(status_code=400, detail="Invalid JSON format")
try:
user_id = data.user_id # Обратите внимание на точку вместо квадратных скобок
job_id = data.job_id # Так как data - это объект Pydantic модели
print(f"Полученные данные: user_id={user_id}, job_id={job_id}")
if isinstance(data.json_data, dict):
try:
user_id = data.json_data['user_id']
print(f"Полученные заявки: {get_jobs}")
except Exception as e:
print(f"Ошибка при обработке данных: {e}")
raise HTTPException(status_code=400, detail="Error processing data")
except KeyError as e:
print(f"Ошибка при извлечении данных: {e}")
raise HTTPException(status_code=400, detail="Missing required field in json_data")
else:
print(f"Неверный формат данных: {type(data.json_data)}")
raise HTTPException(status_code=400, detail="Invalid data format")
return {"status": "ok", "message": "JSON получен" }
return {"status": "ok", "message": "Data received", "user_id": user_id, "job_id": job_id}

File diff suppressed because it is too large Load Diff

View File

@ -41,7 +41,7 @@ password = os.getenv('PASSWD')
# Authenticate using any Linkedin user account credentials
api = Linkedin(username, password)
def pars_jobs(geo):
async def pars_jobs(geo):
search_jobs = api.search_jobs(location_geo_id = geo)
search_jobes = [
{
@ -234,7 +234,10 @@ async def get_vakansi():
# geo = '100025096'
# geo = '100025096' #ON
# geo = '101174742' #Canada
# geo = '103644278' #USA
# pars_jobs(geo)
@ -244,7 +247,7 @@ async def get_vakansi():
#[]TODO!!!
async def main():
async def process_jobs():
async for db in get_async_session(): # Асинхронный генератор сессий
query = select(Job).filter(Job.days_posted == 7)
result = await db.execute(query)
@ -254,13 +257,35 @@ async def main():
print(job.job_id)
await get_job(db, job.job_id)
# if __name__ == "__main__":
# asyncio.run(main())
# import asyncio
# async def pars_jobs(geo):
# print(f"Parsing jobs for {geo}")
# await asyncio.sleep(1) # Имитация асинхронной операции
# async def get_vakansi():
# print("Fetching vacancies")
# await asyncio.sleep(1) # Имитация асинхронной операции
async def main():
geo_list = ['100025096', '101174742', '103644278'] # ON, Canada, USA
for geo in geo_list:
await pars_jobs(geo)
await get_vakansi()
await process_jobs() # Вызываем обработку вакансий
if __name__ == "__main__":
asyncio.run(main())
# from sqlalchemy.orm import sessionmaker, declarative_base
# from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine