Skip to content

Commit

Permalink
Merge pull request #13 from divar-ir/assets
Browse files Browse the repository at this point in the history
assets
  • Loading branch information
nastaran78 authored Aug 4, 2024
2 parents 5bbae53 + 2298989 commit 39fdb2d
Show file tree
Hide file tree
Showing 4 changed files with 263 additions and 3 deletions.
1 change: 1 addition & 0 deletions kenar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
from .image import *
from .oauth import *
from .widgets import *
from .asset import *
169 changes: 166 additions & 3 deletions kenar/app.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import base64
import urllib.parse
from importlib.metadata import version
from typing import List, Optional
from typing import List, Optional, Literal

import httpx
from pydantic import BaseModel

from kenar.oauth import Scope, SendChatMessageResourceIdParams

from kenar.addon import (
CreateUserAddonRequest,
CreateUserAddonResponse,
Expand All @@ -21,6 +19,16 @@
GetPostAddonsResponse,
DeletePostAddonResponse,
)
from kenar.asset import (
GetCategoriesResponse,
GetCitiesResponse,
GetDistrictsResponse,
GetBrandModelsResponse,
GetMobileInternalStoragesResponse,
GetMobileRamMemoriesResponse,
GetLightBodyStatusResponse,
GetColorsResponse,
)
from kenar.chatmessage import (
SetNotifyChatPostConversationsRequest,
SendMessageV2Request,
Expand All @@ -39,6 +47,7 @@
)
from kenar.image import UploadImageResponse
from kenar.oauth import OAuthAccessTokenRequest, AccessTokenResponse
from kenar.oauth import Scope, SendChatMessageResourceIdParams
from kenar.request import retry

ACCESS_TOKEN_HEADER_NAME = "x-access-token"
Expand Down Expand Up @@ -289,6 +298,149 @@ def send_request():
return GetPostAddonsResponse(**rsp.json())


class AssetService:
def __init__(self, client):
self._client = client

def get_categories(
self,
max_retry=3,
retry_delay=1,
) -> GetCategoriesResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url="https://api.divar.ir/v1/open-platform/assets/category",
)

rsp = send_request()
return GetCategoriesResponse(**rsp.json())

def get_cities(
self,
max_retry=3,
retry_delay=1,
) -> GetCitiesResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url="https://api.divar.ir/v1/open-platform/assets/city",
)

rsp = send_request()
return GetCitiesResponse(**rsp.json())

def get_districts(
self,
max_retry=3,
retry_delay=1,
) -> GetDistrictsResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url="https://api.divar.ir/v1/open-platform/assets/district",
)

rsp = send_request()
return GetDistrictsResponse(**rsp.json())

def get_city_districts(
self,
city: str,
max_retry=3,
retry_delay=1,
) -> GetDistrictsResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url=f"https://api.divar.ir/v1/open-platform/assets/district/{city}",
)

rsp = send_request()
return GetDistrictsResponse(**rsp.json())

def get_brand_models(
self,
category: Literal["light", "mobile-phones"],
max_retry=3,
retry_delay=1,
) -> GetBrandModelsResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url=f"https://api.divar.ir/v1/open-platform/assets/brand-model/{category}",
)

rsp = send_request()
return GetBrandModelsResponse(**rsp.json())

def get_colors(
self,
category: Literal["light", "mobile-phones"],
max_retry=3,
retry_delay=1,
) -> GetColorsResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url=f"https://api.divar.ir/v1/open-platform/assets/color/{category}",
)

rsp = send_request()
return GetColorsResponse(**rsp.json())

def get_mobile_internal_storages(
self,
max_retry=3,
retry_delay=1,
) -> GetMobileInternalStoragesResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url="https://api.divar.ir/v1/open-platform/assets/internal-storage",
)

rsp = send_request()
return GetMobileInternalStoragesResponse(**rsp.json())

def get_mobile_ram_memories(
self,
max_retry=3,
retry_delay=1,
) -> GetMobileRamMemoriesResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url="https://api.divar.ir/v1/open-platform/assets/ram-memory",
)

rsp = send_request()
return GetMobileRamMemoriesResponse(**rsp.json())

def get_light_body_status(
self,
max_retry=3,
retry_delay=1,
) -> GetLightBodyStatusResponse:
@retry(max_retries=max_retry, delay=retry_delay)
def send_request():
return self._client.request(
method="GET",
url="https://api.divar.ir/v1/open-platform/assets/body-status",
)

rsp = send_request()
return GetLightBodyStatusResponse(**rsp.json())


class OAuthService:
def __init__(self, client, app_slug, oauth_redirect_url, oauth_secret):
self._app_slug = app_slug
Expand Down Expand Up @@ -375,6 +527,7 @@ def __init__(self, conf: ClientConfig):
self._finder = FinderService(self._client)
self._chat = ChatService(self._client)
self._addon = AddonService(self._client)
self._asset = AssetService(self._client)

@property
def chat(self):
Expand Down Expand Up @@ -415,3 +568,13 @@ def oauth(self, service: OAuthService):
if not isinstance(service, OAuthService):
raise ValueError("addon must be an instance of OAuthService")
self._oauth = service

@property
def asset(self):
return self._asset

@asset.setter
def asset(self, service: AssetService):
if not isinstance(service, AssetService):
raise ValueError("addon must be an instance of AssetService")
self._asset = service
67 changes: 67 additions & 0 deletions kenar/asset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from typing import List

from pydantic import BaseModel


class GetCategoriesResponse(BaseModel):
class Category(BaseModel):
display: str
slug: str

categories: List[Category] = None


class GetCitiesResponse(BaseModel):
class City(BaseModel):
display: str
slug: str

cities: List[City] = None


class GetDistrictsResponse(BaseModel):
class District(BaseModel):
display: str
slug: str

districts: List[District] = None


class GetBrandModelsResponse(BaseModel):
class BrandModel(BaseModel):
display: str
slug: str

brand_models: List[BrandModel] = None


class GetColorsResponse(BaseModel):
class Color(BaseModel):
display: str
slug: str

colors: List[Color] = None


class GetMobileInternalStoragesResponse(BaseModel):
class InternalStorage(BaseModel):
display: str
slug: str

internal_storages: List[InternalStorage] = None


class GetMobileRamMemoriesResponse(BaseModel):
class InternalStorage(BaseModel):
display: str
slug: str

ram_memories: List[InternalStorage] = None


class GetLightBodyStatusResponse(BaseModel):
class BodyStatus(BaseModel):
display: str
slug: str

body_status: List[BodyStatus] = None
29 changes: 29 additions & 0 deletions samples/sample_asset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from samples.sample_app import app

if __name__ == "__main__":
resp = app.asset.get_categories()
print(resp.categories)

resp = app.asset.get_cities()
print(resp.cities)

resp = app.asset.get_districts()
print(resp.districts)

resp = app.asset.get_city_districts(city="tehran")
print(resp.districts)

resp = app.asset.get_brand_models(category="light")
print(resp.brand_models)

resp = app.asset.get_colors(category="mobile-phones")
print(resp.colors)

resp = app.asset.get_mobile_internal_storages()
print(resp.internal_storages)

resp = app.asset.get_mobile_ram_memories()
print(resp.ram_memories)

resp = app.asset.get_light_body_status()
print(resp.body_status)

0 comments on commit 39fdb2d

Please sign in to comment.