Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Seperated Links from JSON API into its own file #30

Merged
merged 7 commits into from
Jun 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion optimade/server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@

from .deps import EntryListingQueryParams
from .collections import MongoCollection
from .models.jsonapi import Link, Links
from .models.jsonapi import Link
from .models.modified_jsonapi import Links
from .models.structures import StructureResource
from .models.baseinfo import BaseInfoResource, BaseInfoAttributes
from .models.toplevel import OptimadeResponseMeta, OptimadeResponseMetaQuery, OptimadeStructureResponseMany, OptimadeInfoResponse, OptimadeProvider, OptimadeErrorResponse
Expand Down
10 changes: 0 additions & 10 deletions optimade/server/models/errors.py

This file was deleted.

17 changes: 15 additions & 2 deletions optimade/server/models/jsonapi.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
"""
This module should reproduce https://jsonapi.org/schema
"""

from typing import Optional, Set, Union, Dict, Any
from pydantic import BaseModel, UrlStr, constr

class Meta(Dict[str, Any]):
"""Non-standard meta-information that can not be represented as an attribute or relationship."""

class Link(BaseModel):
href: UrlStr
meta: Optional[dict]

class Links(BaseModel):
next: Optional[Union[UrlStr,Link]]
base_url: Optional[Union[UrlStr,Link]]
self: Optional[Union[UrlStr,Link]]
about: Optional[Union[UrlStr, Link]]

class JsonAPI(BaseModel):
version: str
Expand All @@ -35,6 +38,7 @@ class Error(BaseModel):
detail: Optional[str]
source: Optional[Source]
meta: Optional[dict]
links: Optional[Links]

class Failure(BaseModel):
errors: Set[Error]
Expand Down Expand Up @@ -65,6 +69,15 @@ class Relationship(BaseModel):
data: Optional[Union[Linkage, Set[Linkage]]]
meta: Optional[dict]

# class Empty(None):
# """Describes an empty to-one relationship."""

class RelationshipToOne(Linkage):
"""References to other resource objects in a to-one (\"relationship\"). Relationships can be specified by including a member in a resource's links object."""

class RelationshipToMany(Set[Linkage]):
"""An array of objects each containing \"type\" and \"id\" members for to-many relationships."""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a question: is it necessary to escape quotation marks here?
Does it otherwise break the JSON?
I would have thought pydantic could be a bit more clever...


rel_pat_prop = constr(regex=r"^(?!id$|type$)\\w[-\\w_]*$")
class Relationships(BaseModel):
items : Optional[Dict[rel_pat_prop, Relationship]]
Expand Down
21 changes: 21 additions & 0 deletions optimade/server/models/modified_jsonapi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
"""
Modified jsonapi for OptimadeAPI
"""
from optimade.server.models import jsonapi
from datetime import datetime
from pydantic import UrlStr, BaseModel
from typing import Optional, Union, Any

class Attributes(jsonapi.Attributes):
local_id: UrlStr
lad_modified: datetime
immutable_id: Optional[UrlStr]

class ErrorLinks(BaseModel):
about: Union[jsonapi.Link, UrlStr]

class Error(jsonapi.Error):
links: Optional[ErrorLinks]

class Links(jsonapi.Links):
base_rul: Optional[Union[jsonapi.Link, UrlStr]]
7 changes: 4 additions & 3 deletions optimade/server/models/toplevel.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@

from pydantic import BaseModel, validator, UrlStr, Schema

from optimade.server.models.jsonapi import Link, Links, Resource
from optimade.server.models.jsonapi import Link, Resource, RelationshipToMany
from optimade.server.models.modified_jsonapi import Links, Attributes
from optimade.server.models.structures import StructureResource
from .baseinfo import BaseInfoResource
from optimade.server.models.util import NonnegativeInt
from .errors import ErrorMsg
from .modified_jsonapi import Error
from .jsonapi import Success, Failure


Expand Down Expand Up @@ -142,7 +143,7 @@ class OptimadeStructureResponseMany(Success):

class OptimadeErrorResponse(Failure):
meta: Optional[OptimadeResponseMeta]
errors: List[ErrorMsg]
errors: List[Error]


class OptimadeInfoResponse(Success):
Expand Down