Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
1YiB committed Jan 2, 2023
1 parent 6150be4 commit bc123ea
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 30 deletions.
7 changes: 2 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@ unofficial api wrapper for open-vsx & vs-marketplace

> [`@open-vsx`](https://open-vsx.org)
- [x] basic json httpx api request
- [x] custom types for input of arguments
- [ ] custom json mapping models - (remaining:,`reviews`,`publisher`)
- [ ] map json using models , write unit tests , add docstrings (remaining:,,`reviews`,`publisher`)

- [x] `info`,`namespace`,`reviews`,`search` APIs are now stable for `OpenVSX`
- [ ] documentation for OpenVSX [0%]

> [`@vs-marketplace`](https://marketplace.visualstudio.com)
Expand Down
4 changes: 2 additions & 2 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@

app = OpenVSX()

search = app.search("python indent",2,'Formatters')
print(search)
namespace = app.namespace('svelte')
print(namespace)
2 changes: 1 addition & 1 deletion src/vs_api/ovsx/api/reviews.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ def reviews(uid:str,client:httpx.Client) -> tuple[bytes, int]:
tuple[bytes, int]: tuple('api response','api status code')
"""

endpoint = f"/{uid}/reviews"
endpoint = f"{uid}/reviews"
r = client.get(url=endpoint)
return (r.content,r.status_code)
3 changes: 1 addition & 2 deletions src/vs_api/ovsx/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
from .info import *
from .search import *
from . import info, namespace, reviews, search
19 changes: 19 additions & 0 deletions src/vs_api/ovsx/models/namespace.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# type: ignore
from jsonobject import (
JsonObject,
StringProperty,
BooleanProperty,
ObjectProperty,
ListProperty,
)


class extension(JsonObject):
name = StringProperty()
url = StringProperty()

class namespace(JsonObject):
name = StringProperty()
extensions = ListProperty(ObjectProperty(extension))
verified = BooleanProperty()
access = StringProperty()
23 changes: 23 additions & 0 deletions src/vs_api/ovsx/models/reviews.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# type: ignore
from jsonobject import (
JsonObject,
StringProperty,
DecimalProperty,
ObjectProperty,
ListProperty,
)

class user(JsonObject):
loginName = StringProperty()
fullName = StringProperty()
avatarUrl = StringProperty()
homepage = StringProperty()
provider = StringProperty()

class review(JsonObject):
user=ObjectProperty(user)
comment= StringProperty()
rating = DecimalProperty()

class reviews(JsonObject):
reviews = ListProperty(ObjectProperty(review))
4 changes: 2 additions & 2 deletions src/vs_api/ovsx/models/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
)


class search_files(JsonObject):
class files(JsonObject):

download = StringProperty()
manifest = StringProperty()
Expand All @@ -26,7 +26,7 @@ class extension(JsonObject):
version = StringProperty()
avgRating = DecimalProperty()
downloadCount = IntegerProperty
files = ObjectProperty(search_files)
files = ObjectProperty(files)


class search(JsonObject):
Expand Down
80 changes: 63 additions & 17 deletions src/vs_api/ovsx/ovsx.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,61 +41,61 @@ def info(self, uid: str):
case _:
nd = NestedDict(json.loads(content))

res = models.info(
name=models.name(
res = models.info.info(
name=models.info.name(
trueName=nd.get(("name"),None),
displayName=nd.get(("displayName"),None),
),
publisher=models.publisher(
org=models.org(
publisher=models.info.publisher(
org=models.info.org(
name=nd.get(("namespace"),None),
access=nd.get(("namespaceAccess"),None),
verified=nd.get(("verified"),None),
unrelated=nd.get(("unrelatedPublisher"),None),
),
publishedBy=models.publishedBy(
publishedBy=models.info.publishedBy(
loginName=nd.get(("publishedBy", "loginName"),None),
fullName=nd.get(("publishedBy", "fullName"),None),
avatar=nd.get(("publishedBy", "avatarUrl"),None),
homepage=nd.get(("publishedBy", "homepage"),None),
provider=nd.get(("publishedBy", "provider"),None),
),
),
metadata=models.metadata(
general=models.general(
metadata=models.info.metadata(
general=models.info.general(
desc=nd.get(("description"),None),
version=nd.get(("version"),None),
platform=nd.get(("targetPlatform"),None),
License=nd.get(("license"),None),
preview=nd.get(("preview"),None),
preRelease=nd.get(("preRelease"),None),
),
classifcation=models.classifcation(
classifcation=models.info.classifcation(
categories=nd.get(("categories"),None),
kind=nd.get(("extensionKind"),None),
tags=nd.get(("tags"),None),
),
requirments=models.requirments(
requirments=models.info.requirments(
engine=nd.get(("engines", "vscode"),None),
deps=nd.get(("dependencies"),None),
bundled=nd.get(("bundledExtensions"),None),
),
rating=models.rating(
rating=models.info.rating(
reviewCount=nd.get(("reviewCount"),None),
avg=nd.get(("averageRating"),None),
),
downloads=models.downloads(
downloads=models.info.downloads(
count=nd.get(("downloadCount"),None),
),
),
files=models.files(
files=models.info.files(
download=nd.get(("files", "download"),None),
manifest=nd.get(("files", "manifest"),None),
readme=nd.get(("files", "readme"),None),
changelog=nd.get(("files", "changelog"),None),
icon=nd.get(("files", "icon"),None),
),
urls=models.urls(
urls=models.info.urls(
homepage=nd.get(("homepage"),None),
repo=nd.get(("repository"),None),
bugs=nd.get(("bugs"),None),
Expand All @@ -105,9 +105,55 @@ def info(self, uid: str):

def namespace(self, publisher: str): # -> models.namespace
content, code = api.namespace(publisher, self.client)
nd = NestedDict(json.loads(content))

def reviews(self, uid: types.uid): # -> models.reviews
match code:
case 404:
raise errors.PublisherNotFound(publisher,None)
case _:
ext_res = []
for extension in nd["extensions"]:
ext_res.append(
models.namespace.extension(
name=extension,
url=nd["extensions",extension],
)
)
res = models.namespace.namespace(
name=nd['name'],
extensions=ext_res,
verified=nd["verified"],
access=nd["access"],
)
return res
def reviews(self, uid: str): # -> models.reviews
uid = types.uid(uid)
content, code = api.reviews(uid.url(), self.client)
nd = NestedDict(json.loads(content))

match code:
case 404:
raise errors.ExtensionNotFound(uid,None)
case _:
rev_res = []
for review in nd['reviews']:
rev_res.append(
models.reviews.review(
user=models.reviews.user(
loginName= review.get(('user','loginName'),None),
fullName =review.get(('user','fullName'),None),
homepage=review.get(('user','homepage'),None),
provider =review.get(('user','provider'),None),
),
comment=review.get(('comment'),None),
rating=review.get(('rating'),None),
)
)

res = models.reviews.reviews(
reviews=rev_res
)
return res

def search(
self,
Expand All @@ -126,14 +172,14 @@ def search(
ext_res = []
for extension in nd["extensions"]:
ext_res.append(
models.extension(
models.search.extension(
name=extension.get(("name"),None),
displayName=extension.get(("displayName"),None),
desc=extension.get(("description"),None),
version=extension.get(("version"),None),
avgRating=extension.get(("averageRating"),None),
downloadCount=extension.get(("downloadCount"),None),
files=models.search_files(
files=models.search.files(
download=extension.get(("files", "download"),None),
manifest=extension.get(("files", "manifest"),None),
readme=extension.get(("files", "readme"),None),
Expand All @@ -143,7 +189,7 @@ def search(
)
)

res = models.search(
res = models.search.search(
totalSize=nd.get(("totalSize"),None),
extensions=ext_res
)
Expand Down
2 changes: 1 addition & 1 deletion src/vs_api/ovsx/types/_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class uid(str):
def url(self):
return f"/{self.replace('.','/')}"
return f"{self.replace('.','/')}"

category = Literal[
"",
Expand Down

0 comments on commit bc123ea

Please sign in to comment.