Skip to content

Commit ae1cf65

Browse files
authored
Merge pull request #19 from magicalapi/add-webhook-feature
fix return type for WebhookResponse in all services
2 parents 2fd1414 + 43a8d14 commit ae1cf65

File tree

6 files changed

+45
-16
lines changed

6 files changed

+45
-16
lines changed

magicalapi/services/company_data_service.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from magicalapi.types.base import ErrorResponse
1010
from magicalapi.types.company_data import CompanyDataResponse
11-
from magicalapi.types.schemas import HttpResponse
11+
from magicalapi.types.schemas import HttpResponse, WebhookCreatedResponse
1212

1313
from .base_service import BaseService
1414

@@ -23,13 +23,18 @@ async def get_company_data(
2323
company_username: str | None = None,
2424
company_name: str | None = None,
2525
company_website: str | None = None,
26-
) -> CompanyDataResponse | ErrorResponse:
26+
) -> CompanyDataResponse | WebhookCreatedResponse | ErrorResponse:
2727
"""this method sends request to company data service in magicalAPI.
2828
https://magicalapi.com/services/company-data
2929
3030
company_name (``str``):
3131
the username of linkedin company that you want to get it's data.
3232
33+
Returns:
34+
CompanyDataResponse: When request completes successfully (no webhook).
35+
WebhookCreatedResponse: When using webhook_url (immediate acknowledgment).
36+
ErrorResponse: When an error occurs (e.g., 403 if webhook domain not whitelisted).
37+
3338
"""
3439
# check which parameters passed
3540
if company_username is not None:
@@ -66,5 +71,5 @@ async def get_company_data(
6671

6772
def validate_response(
6873
self, response: HttpResponse, validate_model: type[BaseModel]
69-
) -> CompanyDataResponse | ErrorResponse:
74+
) -> CompanyDataResponse | WebhookCreatedResponse | ErrorResponse:
7075
return super().validate_response(response, validate_model)

magicalapi/services/profile_data_service.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from magicalapi.types.base import ErrorResponse
1010
from magicalapi.types.profile_data import ProfileDataResponse
11-
from magicalapi.types.schemas import HttpResponse
11+
from magicalapi.types.schemas import HttpResponse, WebhookCreatedResponse
1212

1313
from .base_service import BaseService
1414

@@ -20,13 +20,18 @@ class ProfileDataService(BaseService):
2020

2121
async def get_profile_data(
2222
self, profile_name: str
23-
) -> ProfileDataResponse | ErrorResponse:
23+
) -> ProfileDataResponse | WebhookCreatedResponse | ErrorResponse:
2424
"""this method sends request to profile data service in magicalAPI.
2525
https://magicalapi.com/services/profile-data
2626
2727
profile_name (``str``):
2828
the username of linkedin profile that you want to get it's data.
2929
30+
Returns:
31+
ProfileDataResponse: When request completes successfully (no webhook).
32+
WebhookCreatedResponse: When using webhook_url (immediate acknowledgment).
33+
ErrorResponse: When an error occurs (e.g., 403 if webhook domain not whitelisted).
34+
3035
"""
3136
request_body = {
3237
"profile_name": profile_name,
@@ -43,5 +48,5 @@ async def get_profile_data(
4348

4449
def validate_response(
4550
self, response: HttpResponse, validate_model: type[BaseModel]
46-
) -> ProfileDataResponse | ErrorResponse:
51+
) -> ProfileDataResponse | WebhookCreatedResponse | ErrorResponse:
4752
return super().validate_response(response, validate_model) # type:ignore

magicalapi/services/resume_parser_service.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from magicalapi.types.base import ErrorResponse
1010
from magicalapi.types.resume_parser import ResumeParserResponse
11-
from magicalapi.types.schemas import HttpResponse
11+
from magicalapi.types.schemas import HttpResponse, WebhookCreatedResponse
1212

1313
from .base_service import BaseService
1414

@@ -18,13 +18,20 @@
1818
class ResumeParserService(BaseService):
1919
service_path = "resume-parser"
2020

21-
async def get_resume_parser(self, url: str) -> ResumeParserResponse | ErrorResponse:
21+
async def get_resume_parser(
22+
self, url: str
23+
) -> ResumeParserResponse | WebhookCreatedResponse | ErrorResponse:
2224
"""this method sends request to resume parser service in magicalAPI.
2325
https://magicalapi.com/services/resume-parser
2426
2527
url (``str``):
2628
the url of pdf resume file that you want parse it.
2729
30+
Returns:
31+
ResumeParserResponse: When request completes successfully (no webhook).
32+
WebhookCreatedResponse: When using webhook_url (immediate acknowledgment).
33+
ErrorResponse: When an error occurs (e.g., 403 if webhook domain not whitelisted).
34+
2835
"""
2936
request_body = {
3037
"url": url,
@@ -41,5 +48,5 @@ async def get_resume_parser(self, url: str) -> ResumeParserResponse | ErrorRespo
4148

4249
def validate_response(
4350
self, response: HttpResponse, validate_model: type[BaseModel]
44-
) -> ResumeParserResponse | ErrorResponse:
51+
) -> ResumeParserResponse | WebhookCreatedResponse | ErrorResponse:
4552
return super().validate_response(response, validate_model)

magicalapi/services/resume_review_service.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,28 @@
88

99
from magicalapi.types.base import ErrorResponse
1010
from magicalapi.types.resume_review import ResumeReviewResponse
11-
from magicalapi.types.schemas import HttpResponse
11+
from magicalapi.types.schemas import HttpResponse, WebhookCreatedResponse
1212

1313
from .base_service import BaseService
1414

1515

1616
class ResumeReviewService(BaseService):
1717
service_path = "resume-review"
1818

19-
async def get_resume_review(self, url: str) -> ResumeReviewResponse | ErrorResponse:
19+
async def get_resume_review(
20+
self, url: str
21+
) -> ResumeReviewResponse | WebhookCreatedResponse | ErrorResponse:
2022
"""this method sends request to resume review service in magicalAPI.
2123
https://magicalapi.com/services/resume-review
2224
2325
url (``str``):
2426
the url of pdf resume file that you want review it.
2527
28+
Returns:
29+
ResumeReviewResponse: When request completes successfully (no webhook).
30+
WebhookCreatedResponse: When using webhook_url (immediate acknowledgment).
31+
ErrorResponse: When an error occurs (e.g., 403 if webhook domain not whitelisted).
32+
2633
"""
2734
request_body = {
2835
"url": url,
@@ -34,5 +41,5 @@ async def get_resume_review(self, url: str) -> ResumeReviewResponse | ErrorRespo
3441

3542
def validate_response(
3643
self, response: HttpResponse, validate_model: type[BaseModel]
37-
) -> ResumeReviewResponse | ErrorResponse:
44+
) -> ResumeReviewResponse | WebhookCreatedResponse | ErrorResponse:
3845
return super().validate_response(response, validate_model)

magicalapi/services/resume_score_service.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from magicalapi.types.base import ErrorResponse
1010
from magicalapi.types.resume_score import ResumeScoreResponse
11-
from magicalapi.types.schemas import HttpResponse
11+
from magicalapi.types.schemas import HttpResponse, WebhookCreatedResponse
1212

1313
from .base_service import BaseService
1414

@@ -18,7 +18,7 @@ class ResumeScoreService(BaseService):
1818

1919
async def get_resume_score(
2020
self, url: str, job_description: str
21-
) -> ResumeScoreResponse | ErrorResponse:
21+
) -> ResumeScoreResponse | WebhookCreatedResponse | ErrorResponse:
2222
"""this method sends request to resume score service in magicalAPI.
2323
https://magicalapi.com/services/resume-score
2424
@@ -29,6 +29,11 @@ async def get_resume_score(
2929
give some description of the job,
3030
your resume score will calculate based on your job description.
3131
32+
Returns:
33+
ResumeScoreResponse: When request completes successfully (no webhook).
34+
WebhookCreatedResponse: When using webhook_url (immediate acknowledgment).
35+
ErrorResponse: When an error occurs (e.g., 403 if webhook domain not whitelisted).
36+
3237
"""
3338
request_body = {
3439
"url": url,
@@ -41,5 +46,5 @@ async def get_resume_score(
4146

4247
def validate_response(
4348
self, response: HttpResponse, validate_model: type[BaseModel]
44-
) -> ResumeScoreResponse | ErrorResponse:
49+
) -> ResumeScoreResponse | WebhookCreatedResponse | ErrorResponse:
4550
return super().validate_response(response, validate_model)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "magicalapi"
3-
version = "1.5.0"
3+
version = "1.5.1"
44
description = "This is a Python client that provides easy access to the MagicalAPI.com services, fully type annotated, and asynchronous."
55
authors = [
66
{ name = "MagicalAPI", email = "info@magicalapi.com" }

0 commit comments

Comments
 (0)