Skip to content

Commit

Permalink
Merge pull request #6 from npo-poms/feature/xsdata_new
Browse files Browse the repository at this point in the history
#3 alternative for pyxb -> xsdata
  • Loading branch information
mihxil authored Dec 13, 2021
2 parents 64d203f + b233f18 commit 7fa957d
Show file tree
Hide file tree
Showing 361 changed files with 14,513 additions and 69 deletions.
34 changes: 34 additions & 0 deletions .xsdata.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<Config xmlns="http://pypi.org/project/xsdata" version="21.12">
<Output maxLineLength="120">
<Package>npoapi.data</Package>
<Format repr="true" eq="true" order="false" unsafeHash="false" frozen="false" slots="false" kwOnly="false">dataclasses</Format>
<Structure>namespace-clusters</Structure>
<DocstringStyle>reStructuredText</DocstringStyle>
<RelativeImports>true</RelativeImports>
<CompoundFields>true</CompoundFields>
</Output>
<Conventions>
<ClassName case="pascalCase" safePrefix="type"/>
<FieldName case="snakeCase" safePrefix="value"/>
<ConstantName case="screamingSnakeCase" safePrefix="value"/>
<ModuleName case="snakeCase" safePrefix="mod"/>
<PackageName case="snakeCase" safePrefix="pkg"/>
</Conventions>
<Substitutions>
<Substitution type="package" search="^urn:vpro:media:2009$" replace="media"/>
<Substitution type="package" search="^urn:vpro:media:update:2009$" replace="media_update"/>
<Substitution type="package" search="^urn:vpro:shared:2009$" replace="shared"/>
<Substitution type="package" search="^urn:vpro:api:2013$" replace="api"/>
<Substitution type="package" search="^urn:vpro:api:constraint:media:2013$" replace="api_constraint_media"/>
<Substitution type="package" search="^urn:vpro:api:constraint:2014$" replace="api_constraint"/>
<Substitution type="package" search="^urn:vpro:api:constraint:page:2013$" replace="api_constraint_page"/>
<Substitution type="package" search="^urn:vpro:pages:2013$" replace="page"/>
<Substitution type="package" search="^urn:vpro:pages:update:2013$" replace="page_update"/>
<Substitution type="package" search="^urn:vpro:media:subtitles:2009$" replace="subtitles"/>
<Substitution type="package" search="^urn:vpro:gtaa:2017$" replace="thesaurus"/>
<Substitution type="package" search="^urn:vpro:media:search:2012$" replace="media_search"/>
<Substitution type="package" search="^urn:vpro:api:profile:2013$" replace="profile"/>
<Substitution type="package" search="^$" replace="empty"/>
</Substitutions>
</Config>
15 changes: 14 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ RS=https://rs-test.poms.omroep.nl/v1/
PAGESPUB=https://publish-test.pages.omroep.nl/
#PAGESPUB=http://localhost:8069/

XSDATA=xsdata generate


npoapi/xml/__init__.py: setup.py
pyxbgen \
--schema-location=$(POMS)schema/vproMedia.xsd --module media \
Expand All @@ -22,6 +25,12 @@ npoapi/xml/__init__.py: setup.py
--schema-location=$(RS)schema/combined.xsd --module poms \
--module-prefix=npoapi.xml

.PHONY: xsdata

xsdata: npoapi/model/__init__.py
npoapi/model/__init__.py: setup.py
$(XSDATA) $(RS)schema/combined.xsd

docker:
docker build -t mihxil/npo-pyapi:latest -f docker/Dockerfile .

Expand All @@ -37,5 +46,9 @@ docker-push:
docker-flask-push: docker-flask
docker image push docker.vpro.nl/mihxil/npo-pyapi-flask:latest

clean:

clean.data:
rm -rf npoapi/data/*

clean: clean.model
rm -rf npoapi/xml/*
8 changes: 8 additions & 0 deletions npoapi/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import http

import pyxb
from xsdata.formats.dataclass.serializers import XmlSerializer
from xsdata.formats.dataclass.serializers.config import SerializerConfig

import npoapi
from typing import Optional
Expand Down Expand Up @@ -348,9 +350,15 @@ def data_to_bytes(self, data, content_type:str = None) -> [bytearray, str]:
if data:
import pyxb
import xml.dom.minidom
import dataclasses
if data is None:
self.logger.warning("Data is none!")
elif dataclasses.is_dataclass(data):
serializer = XmlSerializer(config=SerializerConfig(pretty_print = False))
content_type = "application/xml"
data = serializer.render(data, ns_map={"api": 'urn:vpro:api:2013'}).encode("utf-8")
elif isinstance(data, pyxb.binding.basis.complexTypeDefinition):
self.logger.warning("pyxb is deprecated!")
content_type = "application/xml"
data = data.toxml("utf-8")
elif isinstance(data, xml.dom.minidom.Document):
Expand Down
7 changes: 7 additions & 0 deletions npoapi/data/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from .collection import Collection
from .collection_type import CollectionType

__all__ = [
"Collection",
"CollectionType",
]
211 changes: 211 additions & 0 deletions npoapi/data/api/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
from .abstract_facet_type import AbstractFacetType
from .association_search_type import AssociationSearchType
from .change import Change
from .change_type import ChangeType
from .date_facet_result_item_type import DateFacetResultItemType
from .date_range_facet_item_type import DateRangeFacetItemType
from .date_range_facets_type import DateRangeFacetsType
from .date_range_matcher_list_type import DateRangeMatcherListType
from .date_range_matcher_type import DateRangeMatcherType
from .date_range_preset_type_enum import DateRangePresetTypeEnum
from .duration_facet_result_item_type import DurationFacetResultItemType
from .duration_range_facet_item_type import DurationRangeFacetItemType
from .duration_range_facets_type import DurationRangeFacetsType
from .duration_range_matcher_list_type import DurationRangeMatcherListType
from .duration_range_matcher_type import DurationRangeMatcherType
from .error import Error
from .error_type import ErrorType
from .extended_matcher_type import ExtendedMatcherType
from .extended_media_facet_type import ExtendedMediaFacetType
from .extended_page_facet_type import ExtendedPageFacetType
from .extended_text_matcher_list_type import ExtendedTextMatcherListType
from .facet_order_type_enum import FacetOrderTypeEnum
from .facet_result_item import FacetResultItem
from .generic_media_search_result_type import GenericMediaSearchResultType
from .geo_location_search_type import GeoLocationSearchType
from .hightlight_type import HightlightType
from .match import Match
from .matcher_list import MatcherList
from .media_facet_type import MediaFacetType
from .media_facets_result_type import MediaFacetsResultType
from .media_facets_type import MediaFacetsType
from .media_form import MediaForm
from .media_form_type import MediaFormType
from .media_genre_facet_result_item_type import MediaGenreFacetResultItemType
from .media_geo_location_facet_result_item_type import MediaGeoLocationFacetResultItemType
from .media_relation_facet_list_type import MediaRelationFacetListType
from .media_relation_facet_type import MediaRelationFacetType
from .media_relation_search_list_type import MediaRelationSearchListType
from .media_relation_search_type import MediaRelationSearchType
from .media_result import MediaResult
from .media_result_type import MediaResultType
from .media_search_result import MediaSearchResult
from .media_search_result_type import MediaSearchResultType
from .media_search_results import MediaSearchResults
from .media_search_type import MediaSearchType
from .media_searchable_term_facet_type import MediaSearchableTermFacetType
from .media_sort_type import MediaSortType
from .media_sort_type_enum import MediaSortTypeEnum
from .media_title_facet_list_type import MediaTitleFacetListType
from .media_title_facet_type import MediaTitleFacetType
from .member_ref_facet_result_item_type import MemberRefFacetResultItemType
from .member_ref_facet_type import MemberRefFacetType
from .member_ref_search_type import MemberRefSearchType
from .named_term_facet_result_item_type import NamedTermFacetResultItemType
from .order_type_enum import OrderTypeEnum
from .page_association_search_list_type import PageAssociationSearchListType
from .page_facet_type import PageFacetType
from .page_facets_result_type import PageFacetsResultType
from .page_genre_facet_result_item_type import PageGenreFacetResultItemType
from .page_relation_facet_list_type import PageRelationFacetListType
from .page_relation_facet_type import PageRelationFacetType
from .page_relation_search_list_type import PageRelationSearchListType
from .page_relation_search_type import PageRelationSearchType
from .page_search_result import PageSearchResult
from .page_search_result_type import PageSearchResultType
from .page_search_results import PageSearchResults
from .page_searchable_term_facet_type import PageSearchableTermFacetType
from .page_sort_list_type import PageSortListType
from .page_sort_type import PageSortType
from .page_sort_type_enum import PageSortTypeEnum
from .pages_facets_type import PagesFacetsType
from .pages_form import PagesForm
from .pages_form_type import PagesFormType
from .pages_search_type import PagesSearchType
from .range_facet_result_item import RangeFacetResultItem
from .range_matcher_type import RangeMatcherType
from .redirect_entry import RedirectEntry
from .redirect_list import RedirectList
from .redirects import Redirects
from .result_type import ResultType
from .schedule_event_api_type import ScheduleEventApiType
from .schedule_event_search_type import ScheduleEventSearchType
from .schedule_form import ScheduleForm
from .schedule_form_type import ScheduleFormType
from .schedule_item import ScheduleItem
from .search_result_item import SearchResultItem
from .search_result_type import SearchResultType
from .simple_match_type import SimpleMatchType
from .simple_matcher_type import SimpleMatcherType
from .standard_match_type import StandardMatchType
from .subtitles_form import SubtitlesForm
from .subtitles_form_type import SubtitlesFormType
from .subtitles_search_type import SubtitlesSearchType
from .suggest_result import SuggestResult
from .suggest_result_type import SuggestResultType
from .suggestion import Suggestion
from .term_facet_result_item_type import TermFacetResultItemType
from .term_search_type import TermSearchType
from .text_facet_type import TextFacetType
from .text_matcher_list_type import TextMatcherListType
from .text_matcher_type import TextMatcherType
from .title_search_type import TitleSearchType
from .title_sort_order_type import TitleSortOrderType
from .total_qualifier import TotalQualifier

__all__ = [
"AbstractFacetType",
"AssociationSearchType",
"Change",
"ChangeType",
"DateFacetResultItemType",
"DateRangeFacetItemType",
"DateRangeFacetsType",
"DateRangeMatcherListType",
"DateRangeMatcherType",
"DateRangePresetTypeEnum",
"DurationFacetResultItemType",
"DurationRangeFacetItemType",
"DurationRangeFacetsType",
"DurationRangeMatcherListType",
"DurationRangeMatcherType",
"Error",
"ErrorType",
"ExtendedMatcherType",
"ExtendedMediaFacetType",
"ExtendedPageFacetType",
"ExtendedTextMatcherListType",
"FacetOrderTypeEnum",
"FacetResultItem",
"GenericMediaSearchResultType",
"GeoLocationSearchType",
"HightlightType",
"Match",
"MatcherList",
"MediaFacetType",
"MediaFacetsResultType",
"MediaFacetsType",
"MediaForm",
"MediaFormType",
"MediaGenreFacetResultItemType",
"MediaGeoLocationFacetResultItemType",
"MediaRelationFacetListType",
"MediaRelationFacetType",
"MediaRelationSearchListType",
"MediaRelationSearchType",
"MediaResult",
"MediaResultType",
"MediaSearchResult",
"MediaSearchResultType",
"MediaSearchResults",
"MediaSearchType",
"MediaSearchableTermFacetType",
"MediaSortType",
"MediaSortTypeEnum",
"MediaTitleFacetListType",
"MediaTitleFacetType",
"MemberRefFacetResultItemType",
"MemberRefFacetType",
"MemberRefSearchType",
"NamedTermFacetResultItemType",
"OrderTypeEnum",
"PageAssociationSearchListType",
"PageFacetType",
"PageFacetsResultType",
"PageGenreFacetResultItemType",
"PageRelationFacetListType",
"PageRelationFacetType",
"PageRelationSearchListType",
"PageRelationSearchType",
"PageSearchResult",
"PageSearchResultType",
"PageSearchResults",
"PageSearchableTermFacetType",
"PageSortListType",
"PageSortType",
"PageSortTypeEnum",
"PagesFacetsType",
"PagesForm",
"PagesFormType",
"PagesSearchType",
"RangeFacetResultItem",
"RangeMatcherType",
"RedirectEntry",
"RedirectList",
"Redirects",
"ResultType",
"ScheduleEventApiType",
"ScheduleEventSearchType",
"ScheduleForm",
"ScheduleFormType",
"ScheduleItem",
"SearchResultItem",
"SearchResultType",
"SimpleMatchType",
"SimpleMatcherType",
"StandardMatchType",
"SubtitlesForm",
"SubtitlesFormType",
"SubtitlesSearchType",
"SuggestResult",
"SuggestResultType",
"Suggestion",
"TermFacetResultItemType",
"TermSearchType",
"TextFacetType",
"TextMatcherListType",
"TextMatcherType",
"TitleSearchType",
"TitleSortOrderType",
"TotalQualifier",
]
9 changes: 9 additions & 0 deletions npoapi/data/api/abstract_facet_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from dataclasses import dataclass

__NAMESPACE__ = "urn:vpro:api:2013"


@dataclass
class AbstractFacetType:
class Meta:
name = "abstractFacetType"
33 changes: 33 additions & 0 deletions npoapi/data/api/association_search_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from dataclasses import dataclass, field
from typing import Optional
from .match import Match
from .text_matcher_list_type import TextMatcherListType

__NAMESPACE__ = "urn:vpro:api:2013"


@dataclass
class AssociationSearchType:
class Meta:
name = "associationSearchType"

urls: Optional[TextMatcherListType] = field(
default=None,
metadata={
"type": "Element",
"namespace": "urn:vpro:api:2013",
}
)
types: Optional[TextMatcherListType] = field(
default=None,
metadata={
"type": "Element",
"namespace": "urn:vpro:api:2013",
}
)
match: Optional[Match] = field(
default=None,
metadata={
"type": "Attribute",
}
)
11 changes: 11 additions & 0 deletions npoapi/data/api/change.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from dataclasses import dataclass
from .change_type import ChangeType

__NAMESPACE__ = "urn:vpro:api:2013"


@dataclass
class Change(ChangeType):
class Meta:
name = "change"
namespace = "urn:vpro:api:2013"
Loading

0 comments on commit 7fa957d

Please sign in to comment.