wordlift-client 1.134.0__py3-none-any.whl → 1.135.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. wordlift_client/__init__.py +10 -2
  2. wordlift_client/api/audit_api.py +15 -3
  3. wordlift_client/api_client.py +1 -1
  4. wordlift_client/configuration.py +1 -1
  5. wordlift_client/models/__init__.py +9 -1
  6. wordlift_client/models/audit_data.py +27 -11
  7. wordlift_client/models/automation_issue.py +110 -0
  8. wordlift_client/models/automation_readiness.py +16 -5
  9. wordlift_client/models/bot_status.py +102 -0
  10. wordlift_client/models/content_freshness.py +106 -0
  11. wordlift_client/models/content_structure.py +10 -6
  12. wordlift_client/models/detected_schema.py +100 -0
  13. wordlift_client/models/error_response.py +5 -3
  14. wordlift_client/models/html_semantics.py +100 -0
  15. wordlift_client/models/image_accessibility.py +9 -7
  16. wordlift_client/models/internal_linking.py +100 -0
  17. wordlift_client/models/js_rendering.py +8 -17
  18. wordlift_client/models/quick_wins_result.py +110 -0
  19. wordlift_client/models/schema_recommendation.py +90 -0
  20. wordlift_client/models/seo_fundamentals.py +6 -3
  21. wordlift_client/models/site_files.py +25 -10
  22. wordlift_client/models/structured_data.py +28 -5
  23. wordlift_client/models/well_known_files.py +98 -0
  24. {wordlift_client-1.134.0.dist-info → wordlift_client-1.135.0.dist-info}/METADATA +1 -1
  25. {wordlift_client-1.134.0.dist-info → wordlift_client-1.135.0.dist-info}/RECORD +28 -19
  26. {wordlift_client-1.134.0.dist-info → wordlift_client-1.135.0.dist-info}/LICENSE +0 -0
  27. {wordlift_client-1.134.0.dist-info → wordlift_client-1.135.0.dist-info}/WHEEL +0 -0
  28. {wordlift_client-1.134.0.dist-info → wordlift_client-1.135.0.dist-info}/top_level.txt +0 -0
@@ -15,7 +15,7 @@
15
15
  """ # noqa: E501
16
16
 
17
17
 
18
- __version__ = "1.134.0"
18
+ __version__ = "1.135.0"
19
19
 
20
20
  # import apis into sdk package
21
21
  from wordlift_client.api.account_api import AccountApi
@@ -126,8 +126,10 @@ from wordlift_client.models.author_request import AuthorRequest
126
126
  from wordlift_client.models.authorization import Authorization
127
127
  from wordlift_client.models.authorization_status import AuthorizationStatus
128
128
  from wordlift_client.models.autocomplete_result import AutocompleteResult
129
+ from wordlift_client.models.automation_issue import AutomationIssue
129
130
  from wordlift_client.models.automation_readiness import AutomationReadiness
130
131
  from wordlift_client.models.batch_request import BatchRequest
132
+ from wordlift_client.models.bot_status import BotStatus
131
133
  from wordlift_client.models.botify_crawl_import_request import BotifyCrawlImportRequest
132
134
  from wordlift_client.models.build_authorize_uri_request import BuildAuthorizeUriRequest
133
135
  from wordlift_client.models.build_authorize_uri_response import BuildAuthorizeUriResponse
@@ -148,12 +150,14 @@ from wordlift_client.models.content_evaluation_response_quality_score_breakdown_
148
150
  from wordlift_client.models.content_evaluation_response_quality_score_breakdown_seo_top_entities_value_inner import ContentEvaluationResponseQualityScoreBreakdownSeoTopEntitiesValueInner
149
151
  from wordlift_client.models.content_expansion_request import ContentExpansionRequest
150
152
  from wordlift_client.models.content_expansion_response import ContentExpansionResponse
153
+ from wordlift_client.models.content_freshness import ContentFreshness
151
154
  from wordlift_client.models.content_generation import ContentGeneration
152
155
  from wordlift_client.models.content_generation_request import ContentGenerationRequest
153
156
  from wordlift_client.models.content_generation_stats import ContentGenerationStats
154
157
  from wordlift_client.models.content_structure import ContentStructure
155
158
  from wordlift_client.models.create_embeddings_input import CreateEmbeddingsInput
156
159
  from wordlift_client.models.create_url_inspection_request import CreateUrlInspectionRequest
160
+ from wordlift_client.models.detected_schema import DetectedSchema
157
161
  from wordlift_client.models.diagnostic_plugin import DiagnosticPlugin
158
162
  from wordlift_client.models.diagnostic_plugin_request import DiagnosticPluginRequest
159
163
  from wordlift_client.models.domain_validation_request import DomainValidationRequest
@@ -175,6 +179,7 @@ from wordlift_client.models.generate_sitemap_request import GenerateSitemapReque
175
179
  from wordlift_client.models.graphql_request import GraphqlRequest
176
180
  from wordlift_client.models.http_validation_error import HTTPValidationError
177
181
  from wordlift_client.models.html import Html
182
+ from wordlift_client.models.html_semantics import HtmlSemantics
178
183
  from wordlift_client.models.image import Image
179
184
  from wordlift_client.models.image_accessibility import ImageAccessibility
180
185
  from wordlift_client.models.include_exclude import IncludeExclude
@@ -184,6 +189,7 @@ from wordlift_client.models.internal_link import InternalLink
184
189
  from wordlift_client.models.internal_link_destination import InternalLinkDestination
185
190
  from wordlift_client.models.internal_link_request import InternalLinkRequest
186
191
  from wordlift_client.models.internal_link_source import InternalLinkSource
192
+ from wordlift_client.models.internal_linking import InternalLinking
187
193
  from wordlift_client.models.item import Item
188
194
  from wordlift_client.models.js_rendering import JsRendering
189
195
  from wordlift_client.models.kg_embedding_request import KgEmbeddingRequest
@@ -235,6 +241,7 @@ from wordlift_client.models.query_coverage_output import QueryCoverageOutput
235
241
  from wordlift_client.models.question_and_answer import QuestionAndAnswer
236
242
  from wordlift_client.models.question_and_answer_request import QuestionAndAnswerRequest
237
243
  from wordlift_client.models.quick_win import QuickWin
244
+ from wordlift_client.models.quick_wins_result import QuickWinsResult
238
245
  from wordlift_client.models.rank_entities import RankEntities
239
246
  from wordlift_client.models.record import Record
240
247
  from wordlift_client.models.render_request import RenderRequest
@@ -247,10 +254,10 @@ from wordlift_client.models.response1 import Response1
247
254
  from wordlift_client.models.response2 import Response2
248
255
  from wordlift_client.models.rule import Rule
249
256
  from wordlift_client.models.rule_request import RuleRequest
257
+ from wordlift_client.models.schema_recommendation import SchemaRecommendation
250
258
  from wordlift_client.models.scope import Scope
251
259
  from wordlift_client.models.seo_fundamentals import SeoFundamentals
252
260
  from wordlift_client.models.site_files import SiteFiles
253
- from wordlift_client.models.site_files_bot_access import SiteFilesBotAccess
254
261
  from wordlift_client.models.sitemap_import_request import SitemapImportRequest
255
262
  from wordlift_client.models.smart_content import SmartContent
256
263
  from wordlift_client.models.smart_content_request import SmartContentRequest
@@ -284,6 +291,7 @@ from wordlift_client.models.web_page_import_response import WebPageImportRespons
284
291
  from wordlift_client.models.webpage_properties import WebpageProperties
285
292
  from wordlift_client.models.website import Website
286
293
  from wordlift_client.models.website_search import WebsiteSearch
294
+ from wordlift_client.models.well_known_files import WellKnownFiles
287
295
  from wordlift_client.models.what_operand_lhs import WhatOperandLhs
288
296
  from wordlift_client.models.what_operator import WhatOperator
289
297
  from wordlift_client.models.when_operator import WhenOperator
@@ -57,7 +57,7 @@ class AuditApi:
57
57
  ) -> AuditResponse:
58
58
  """Website Audit
59
59
 
60
- Performs a comprehensive SEO and AI-readiness audit of a specified URL. The audit analyzes: - Site files (robots.txt, llms.txt) - SEO fundamentals (title, description, headings) - Structured data (Schema.org, JSON-LD) - Content structure and semantic HTML - Image accessibility - Automation readiness for AI agents - JavaScript rendering and bot accessibility Returns an overall score (0-100) and detailed recommendations for improvement.
60
+ Performs a comprehensive SEO and AI-readiness audit of a specified URL. The audit analyzes: - Site files (robots.txt, llms.txt, .well-known directory) - SEO fundamentals (title, description, headings) - Structured data (Schema.org, JSON-LD, Microdata) - Content structure and semantic HTML - Image accessibility - Automation readiness for AI agents - JavaScript rendering and bot accessibility - Content freshness (legacy field, status Unknown) - Internal linking (legacy field, status Unknown) - HTML semantics (legacy field, status Unknown) Returns an overall score (0-100) and detailed recommendations for improvement.
61
61
 
62
62
  :param audit_request: (required)
63
63
  :type audit_request: AuditRequest
@@ -93,8 +93,12 @@ class AuditApi:
93
93
 
94
94
  _response_types_map: Dict[str, Optional[str]] = {
95
95
  '200': "AuditResponse",
96
+ '400': "ErrorResponse",
96
97
  '401': "ErrorResponse",
98
+ '403': "ErrorResponse",
99
+ '404': "ErrorResponse",
97
100
  '422': "ValidationError1",
101
+ '500': "ErrorResponse",
98
102
  }
99
103
  response_data = await self.api_client.call_api(
100
104
  *_param,
@@ -126,7 +130,7 @@ class AuditApi:
126
130
  ) -> ApiResponse[AuditResponse]:
127
131
  """Website Audit
128
132
 
129
- Performs a comprehensive SEO and AI-readiness audit of a specified URL. The audit analyzes: - Site files (robots.txt, llms.txt) - SEO fundamentals (title, description, headings) - Structured data (Schema.org, JSON-LD) - Content structure and semantic HTML - Image accessibility - Automation readiness for AI agents - JavaScript rendering and bot accessibility Returns an overall score (0-100) and detailed recommendations for improvement.
133
+ Performs a comprehensive SEO and AI-readiness audit of a specified URL. The audit analyzes: - Site files (robots.txt, llms.txt, .well-known directory) - SEO fundamentals (title, description, headings) - Structured data (Schema.org, JSON-LD, Microdata) - Content structure and semantic HTML - Image accessibility - Automation readiness for AI agents - JavaScript rendering and bot accessibility - Content freshness (legacy field, status Unknown) - Internal linking (legacy field, status Unknown) - HTML semantics (legacy field, status Unknown) Returns an overall score (0-100) and detailed recommendations for improvement.
130
134
 
131
135
  :param audit_request: (required)
132
136
  :type audit_request: AuditRequest
@@ -162,8 +166,12 @@ class AuditApi:
162
166
 
163
167
  _response_types_map: Dict[str, Optional[str]] = {
164
168
  '200': "AuditResponse",
169
+ '400': "ErrorResponse",
165
170
  '401': "ErrorResponse",
171
+ '403': "ErrorResponse",
172
+ '404': "ErrorResponse",
166
173
  '422': "ValidationError1",
174
+ '500': "ErrorResponse",
167
175
  }
168
176
  response_data = await self.api_client.call_api(
169
177
  *_param,
@@ -195,7 +203,7 @@ class AuditApi:
195
203
  ) -> RESTResponseType:
196
204
  """Website Audit
197
205
 
198
- Performs a comprehensive SEO and AI-readiness audit of a specified URL. The audit analyzes: - Site files (robots.txt, llms.txt) - SEO fundamentals (title, description, headings) - Structured data (Schema.org, JSON-LD) - Content structure and semantic HTML - Image accessibility - Automation readiness for AI agents - JavaScript rendering and bot accessibility Returns an overall score (0-100) and detailed recommendations for improvement.
206
+ Performs a comprehensive SEO and AI-readiness audit of a specified URL. The audit analyzes: - Site files (robots.txt, llms.txt, .well-known directory) - SEO fundamentals (title, description, headings) - Structured data (Schema.org, JSON-LD, Microdata) - Content structure and semantic HTML - Image accessibility - Automation readiness for AI agents - JavaScript rendering and bot accessibility - Content freshness (legacy field, status Unknown) - Internal linking (legacy field, status Unknown) - HTML semantics (legacy field, status Unknown) Returns an overall score (0-100) and detailed recommendations for improvement.
199
207
 
200
208
  :param audit_request: (required)
201
209
  :type audit_request: AuditRequest
@@ -231,8 +239,12 @@ class AuditApi:
231
239
 
232
240
  _response_types_map: Dict[str, Optional[str]] = {
233
241
  '200': "AuditResponse",
242
+ '400': "ErrorResponse",
234
243
  '401': "ErrorResponse",
244
+ '403': "ErrorResponse",
245
+ '404': "ErrorResponse",
235
246
  '422': "ValidationError1",
247
+ '500': "ErrorResponse",
236
248
  }
237
249
  response_data = await self.api_client.call_api(
238
250
  *_param,
@@ -89,7 +89,7 @@ class ApiClient:
89
89
  self.default_headers[header_name] = header_value
90
90
  self.cookie = cookie
91
91
  # Set default User-Agent.
92
- self.user_agent = 'OpenAPI-Generator/1.134.0/python'
92
+ self.user_agent = 'OpenAPI-Generator/1.135.0/python'
93
93
  self.client_side_validation = configuration.client_side_validation
94
94
 
95
95
  async def __aenter__(self):
@@ -426,7 +426,7 @@ conf = wordlift_client.Configuration(
426
426
  "OS: {env}\n"\
427
427
  "Python Version: {pyversion}\n"\
428
428
  "Version of the API: 1.0\n"\
429
- "SDK Package Version: 1.134.0".\
429
+ "SDK Package Version: 1.135.0".\
430
430
  format(env=sys.platform, pyversion=sys.version)
431
431
 
432
432
  def get_host_settings(self):
@@ -41,8 +41,10 @@ from wordlift_client.models.author_request import AuthorRequest
41
41
  from wordlift_client.models.authorization import Authorization
42
42
  from wordlift_client.models.authorization_status import AuthorizationStatus
43
43
  from wordlift_client.models.autocomplete_result import AutocompleteResult
44
+ from wordlift_client.models.automation_issue import AutomationIssue
44
45
  from wordlift_client.models.automation_readiness import AutomationReadiness
45
46
  from wordlift_client.models.batch_request import BatchRequest
47
+ from wordlift_client.models.bot_status import BotStatus
46
48
  from wordlift_client.models.botify_crawl_import_request import BotifyCrawlImportRequest
47
49
  from wordlift_client.models.build_authorize_uri_request import BuildAuthorizeUriRequest
48
50
  from wordlift_client.models.build_authorize_uri_response import BuildAuthorizeUriResponse
@@ -63,12 +65,14 @@ from wordlift_client.models.content_evaluation_response_quality_score_breakdown_
63
65
  from wordlift_client.models.content_evaluation_response_quality_score_breakdown_seo_top_entities_value_inner import ContentEvaluationResponseQualityScoreBreakdownSeoTopEntitiesValueInner
64
66
  from wordlift_client.models.content_expansion_request import ContentExpansionRequest
65
67
  from wordlift_client.models.content_expansion_response import ContentExpansionResponse
68
+ from wordlift_client.models.content_freshness import ContentFreshness
66
69
  from wordlift_client.models.content_generation import ContentGeneration
67
70
  from wordlift_client.models.content_generation_request import ContentGenerationRequest
68
71
  from wordlift_client.models.content_generation_stats import ContentGenerationStats
69
72
  from wordlift_client.models.content_structure import ContentStructure
70
73
  from wordlift_client.models.create_embeddings_input import CreateEmbeddingsInput
71
74
  from wordlift_client.models.create_url_inspection_request import CreateUrlInspectionRequest
75
+ from wordlift_client.models.detected_schema import DetectedSchema
72
76
  from wordlift_client.models.diagnostic_plugin import DiagnosticPlugin
73
77
  from wordlift_client.models.diagnostic_plugin_request import DiagnosticPluginRequest
74
78
  from wordlift_client.models.domain_validation_request import DomainValidationRequest
@@ -90,6 +94,7 @@ from wordlift_client.models.generate_sitemap_request import GenerateSitemapReque
90
94
  from wordlift_client.models.graphql_request import GraphqlRequest
91
95
  from wordlift_client.models.http_validation_error import HTTPValidationError
92
96
  from wordlift_client.models.html import Html
97
+ from wordlift_client.models.html_semantics import HtmlSemantics
93
98
  from wordlift_client.models.image import Image
94
99
  from wordlift_client.models.image_accessibility import ImageAccessibility
95
100
  from wordlift_client.models.include_exclude import IncludeExclude
@@ -99,6 +104,7 @@ from wordlift_client.models.internal_link import InternalLink
99
104
  from wordlift_client.models.internal_link_destination import InternalLinkDestination
100
105
  from wordlift_client.models.internal_link_request import InternalLinkRequest
101
106
  from wordlift_client.models.internal_link_source import InternalLinkSource
107
+ from wordlift_client.models.internal_linking import InternalLinking
102
108
  from wordlift_client.models.item import Item
103
109
  from wordlift_client.models.js_rendering import JsRendering
104
110
  from wordlift_client.models.kg_embedding_request import KgEmbeddingRequest
@@ -150,6 +156,7 @@ from wordlift_client.models.query_coverage_output import QueryCoverageOutput
150
156
  from wordlift_client.models.question_and_answer import QuestionAndAnswer
151
157
  from wordlift_client.models.question_and_answer_request import QuestionAndAnswerRequest
152
158
  from wordlift_client.models.quick_win import QuickWin
159
+ from wordlift_client.models.quick_wins_result import QuickWinsResult
153
160
  from wordlift_client.models.rank_entities import RankEntities
154
161
  from wordlift_client.models.record import Record
155
162
  from wordlift_client.models.render_request import RenderRequest
@@ -162,10 +169,10 @@ from wordlift_client.models.response1 import Response1
162
169
  from wordlift_client.models.response2 import Response2
163
170
  from wordlift_client.models.rule import Rule
164
171
  from wordlift_client.models.rule_request import RuleRequest
172
+ from wordlift_client.models.schema_recommendation import SchemaRecommendation
165
173
  from wordlift_client.models.scope import Scope
166
174
  from wordlift_client.models.seo_fundamentals import SeoFundamentals
167
175
  from wordlift_client.models.site_files import SiteFiles
168
- from wordlift_client.models.site_files_bot_access import SiteFilesBotAccess
169
176
  from wordlift_client.models.sitemap_import_request import SitemapImportRequest
170
177
  from wordlift_client.models.smart_content import SmartContent
171
178
  from wordlift_client.models.smart_content_request import SmartContentRequest
@@ -199,6 +206,7 @@ from wordlift_client.models.web_page_import_response import WebPageImportRespons
199
206
  from wordlift_client.models.webpage_properties import WebpageProperties
200
207
  from wordlift_client.models.website import Website
201
208
  from wordlift_client.models.website_search import WebsiteSearch
209
+ from wordlift_client.models.well_known_files import WellKnownFiles
202
210
  from wordlift_client.models.what_operand_lhs import WhatOperandLhs
203
211
  from wordlift_client.models.what_operator import WhatOperator
204
212
  from wordlift_client.models.when_operator import WhenOperator
@@ -23,10 +23,13 @@ from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_v
23
23
  from typing import Any, ClassVar, Dict, List, Optional
24
24
  from typing_extensions import Annotated
25
25
  from wordlift_client.models.automation_readiness import AutomationReadiness
26
+ from wordlift_client.models.content_freshness import ContentFreshness
26
27
  from wordlift_client.models.content_structure import ContentStructure
28
+ from wordlift_client.models.html_semantics import HtmlSemantics
27
29
  from wordlift_client.models.image_accessibility import ImageAccessibility
30
+ from wordlift_client.models.internal_linking import InternalLinking
28
31
  from wordlift_client.models.js_rendering import JsRendering
29
- from wordlift_client.models.quick_win import QuickWin
32
+ from wordlift_client.models.quick_wins_result import QuickWinsResult
30
33
  from wordlift_client.models.seo_fundamentals import SeoFundamentals
31
34
  from wordlift_client.models.site_files import SiteFiles
32
35
  from wordlift_client.models.structured_data import StructuredData
@@ -41,19 +44,23 @@ class AuditData(BaseModel):
41
44
  domain: Optional[StrictStr] = Field(default=None, description="The base domain of the audited URL")
42
45
  timestamp: Optional[datetime] = Field(default=None, description="ISO 8601 timestamp of when the audit was performed")
43
46
  overall_score: Optional[Annotated[int, Field(le=100, strict=True, ge=0)]] = Field(default=None, description="Overall SEO and AI-readiness score (0-100)", alias="overallScore")
44
- summary: Optional[StrictStr] = Field(default=None, description="High-level summary of the audit findings")
47
+ score: Optional[Annotated[int, Field(le=100, strict=True, ge=0)]] = Field(default=None, description="Legacy field - same as overallScore")
48
+ summary: Optional[StrictStr] = Field(default=None, description="High-level summary of the audit findings in markdown format")
45
49
  site_files: Optional[SiteFiles] = Field(default=None, alias="siteFiles")
46
50
  seo_fundamentals: Optional[SeoFundamentals] = Field(default=None, alias="seoFundamentals")
47
51
  structured_data: Optional[StructuredData] = Field(default=None, alias="structuredData")
48
52
  content_structure: Optional[ContentStructure] = Field(default=None, alias="contentStructure")
49
53
  image_accessibility: Optional[ImageAccessibility] = Field(default=None, alias="imageAccessibility")
54
+ html_semantics: Optional[HtmlSemantics] = Field(default=None, alias="htmlSemantics")
55
+ content_freshness: Optional[ContentFreshness] = Field(default=None, alias="contentFreshness")
56
+ internal_linking: Optional[InternalLinking] = Field(default=None, alias="internalLinking")
50
57
  automation_readiness: Optional[AutomationReadiness] = Field(default=None, alias="automationReadiness")
51
58
  js_rendering: Optional[JsRendering] = Field(default=None, alias="jsRendering")
52
- quick_wins: Optional[List[QuickWin]] = Field(default=None, alias="quickWins")
59
+ quick_wins: Optional[QuickWinsResult] = Field(default=None, alias="quickWins")
53
60
  status: Optional[StrictStr] = Field(default=None, description="Status of the audit process")
54
61
  account_id: Optional[StrictInt] = Field(default=None, description="Account ID associated with the audit", alias="accountId")
55
62
  account_url: Optional[StrictStr] = Field(default=None, description="Account URL associated with the audit", alias="accountUrl")
56
- __properties: ClassVar[List[str]] = ["url", "domain", "timestamp", "overallScore", "summary", "siteFiles", "seoFundamentals", "structuredData", "contentStructure", "imageAccessibility", "automationReadiness", "jsRendering", "quickWins", "status", "accountId", "accountUrl"]
63
+ __properties: ClassVar[List[str]] = ["url", "domain", "timestamp", "overallScore", "score", "summary", "siteFiles", "seoFundamentals", "structuredData", "contentStructure", "imageAccessibility", "htmlSemantics", "contentFreshness", "internalLinking", "automationReadiness", "jsRendering", "quickWins", "status", "accountId", "accountUrl"]
57
64
 
58
65
  @field_validator('status')
59
66
  def status_validate_enum(cls, value):
@@ -119,19 +126,24 @@ class AuditData(BaseModel):
119
126
  # override the default output from pydantic by calling `to_dict()` of image_accessibility
120
127
  if self.image_accessibility:
121
128
  _dict['imageAccessibility'] = self.image_accessibility.to_dict()
129
+ # override the default output from pydantic by calling `to_dict()` of html_semantics
130
+ if self.html_semantics:
131
+ _dict['htmlSemantics'] = self.html_semantics.to_dict()
132
+ # override the default output from pydantic by calling `to_dict()` of content_freshness
133
+ if self.content_freshness:
134
+ _dict['contentFreshness'] = self.content_freshness.to_dict()
135
+ # override the default output from pydantic by calling `to_dict()` of internal_linking
136
+ if self.internal_linking:
137
+ _dict['internalLinking'] = self.internal_linking.to_dict()
122
138
  # override the default output from pydantic by calling `to_dict()` of automation_readiness
123
139
  if self.automation_readiness:
124
140
  _dict['automationReadiness'] = self.automation_readiness.to_dict()
125
141
  # override the default output from pydantic by calling `to_dict()` of js_rendering
126
142
  if self.js_rendering:
127
143
  _dict['jsRendering'] = self.js_rendering.to_dict()
128
- # override the default output from pydantic by calling `to_dict()` of each item in quick_wins (list)
129
- _items = []
144
+ # override the default output from pydantic by calling `to_dict()` of quick_wins
130
145
  if self.quick_wins:
131
- for _item in self.quick_wins:
132
- if _item:
133
- _items.append(_item.to_dict())
134
- _dict['quickWins'] = _items
146
+ _dict['quickWins'] = self.quick_wins.to_dict()
135
147
  return _dict
136
148
 
137
149
  @classmethod
@@ -148,15 +160,19 @@ class AuditData(BaseModel):
148
160
  "domain": obj.get("domain"),
149
161
  "timestamp": obj.get("timestamp"),
150
162
  "overallScore": obj.get("overallScore"),
163
+ "score": obj.get("score"),
151
164
  "summary": obj.get("summary"),
152
165
  "siteFiles": SiteFiles.from_dict(obj["siteFiles"]) if obj.get("siteFiles") is not None else None,
153
166
  "seoFundamentals": SeoFundamentals.from_dict(obj["seoFundamentals"]) if obj.get("seoFundamentals") is not None else None,
154
167
  "structuredData": StructuredData.from_dict(obj["structuredData"]) if obj.get("structuredData") is not None else None,
155
168
  "contentStructure": ContentStructure.from_dict(obj["contentStructure"]) if obj.get("contentStructure") is not None else None,
156
169
  "imageAccessibility": ImageAccessibility.from_dict(obj["imageAccessibility"]) if obj.get("imageAccessibility") is not None else None,
170
+ "htmlSemantics": HtmlSemantics.from_dict(obj["htmlSemantics"]) if obj.get("htmlSemantics") is not None else None,
171
+ "contentFreshness": ContentFreshness.from_dict(obj["contentFreshness"]) if obj.get("contentFreshness") is not None else None,
172
+ "internalLinking": InternalLinking.from_dict(obj["internalLinking"]) if obj.get("internalLinking") is not None else None,
157
173
  "automationReadiness": AutomationReadiness.from_dict(obj["automationReadiness"]) if obj.get("automationReadiness") is not None else None,
158
174
  "jsRendering": JsRendering.from_dict(obj["jsRendering"]) if obj.get("jsRendering") is not None else None,
159
- "quickWins": [QuickWin.from_dict(_item) for _item in obj["quickWins"]] if obj.get("quickWins") is not None else None,
175
+ "quickWins": QuickWinsResult.from_dict(obj["quickWins"]) if obj.get("quickWins") is not None else None,
160
176
  "status": obj.get("status"),
161
177
  "accountId": obj.get("accountId"),
162
178
  "accountUrl": obj.get("accountUrl")
@@ -0,0 +1,110 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ WordLift API
5
+
6
+ WordLift API
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Contact: hello@wordlift.io
10
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
11
+
12
+ Do not edit the class manually.
13
+ """ # noqa: E501
14
+
15
+
16
+ from __future__ import annotations
17
+ import pprint
18
+ import re # noqa: F401
19
+ import json
20
+
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class AutomationIssue(BaseModel):
27
+ """
28
+ AutomationIssue
29
+ """ # noqa: E501
30
+ priority: Optional[StrictStr] = Field(default=None, description="Priority level of the issue")
31
+ criterion: Optional[StrictStr] = Field(default=None, description="WCAG or accessibility criterion reference")
32
+ what: Optional[StrictStr] = Field(default=None, description="Description of the issue")
33
+ where: Optional[StrictStr] = Field(default=None, description="Location of the issue on the page")
34
+ why: Optional[StrictStr] = Field(default=None, description="Why this issue matters")
35
+ how: Optional[StrictStr] = Field(default=None, description="How to fix the issue")
36
+ compliance: Optional[StrictStr] = Field(default=None, description="Compliance impact description")
37
+ __properties: ClassVar[List[str]] = ["priority", "criterion", "what", "where", "why", "how", "compliance"]
38
+
39
+ @field_validator('priority')
40
+ def priority_validate_enum(cls, value):
41
+ """Validates the enum"""
42
+ if value is None:
43
+ return value
44
+
45
+ if value not in set(['P1', 'P2', 'P3', 'P4']):
46
+ raise ValueError("must be one of enum values ('P1', 'P2', 'P3', 'P4')")
47
+ return value
48
+
49
+ model_config = ConfigDict(
50
+ populate_by_name=True,
51
+ validate_assignment=True,
52
+ protected_namespaces=(),
53
+ )
54
+
55
+
56
+ def to_str(self) -> str:
57
+ """Returns the string representation of the model using alias"""
58
+ return pprint.pformat(self.model_dump(by_alias=True))
59
+
60
+ def to_json(self) -> str:
61
+ """Returns the JSON representation of the model using alias"""
62
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
63
+ return json.dumps(self.to_dict())
64
+
65
+ @classmethod
66
+ def from_json(cls, json_str: str) -> Optional[Self]:
67
+ """Create an instance of AutomationIssue from a JSON string"""
68
+ return cls.from_dict(json.loads(json_str))
69
+
70
+ def to_dict(self) -> Dict[str, Any]:
71
+ """Return the dictionary representation of the model using alias.
72
+
73
+ This has the following differences from calling pydantic's
74
+ `self.model_dump(by_alias=True)`:
75
+
76
+ * `None` is only added to the output dict for nullable fields that
77
+ were set at model initialization. Other fields with value `None`
78
+ are ignored.
79
+ """
80
+ excluded_fields: Set[str] = set([
81
+ ])
82
+
83
+ _dict = self.model_dump(
84
+ by_alias=True,
85
+ exclude=excluded_fields,
86
+ exclude_none=True,
87
+ )
88
+ return _dict
89
+
90
+ @classmethod
91
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
92
+ """Create an instance of AutomationIssue from a dict"""
93
+ if obj is None:
94
+ return None
95
+
96
+ if not isinstance(obj, dict):
97
+ return cls.model_validate(obj)
98
+
99
+ _obj = cls.model_validate({
100
+ "priority": obj.get("priority"),
101
+ "criterion": obj.get("criterion"),
102
+ "what": obj.get("what"),
103
+ "where": obj.get("where"),
104
+ "why": obj.get("why"),
105
+ "how": obj.get("how"),
106
+ "compliance": obj.get("compliance")
107
+ })
108
+ return _obj
109
+
110
+
@@ -20,6 +20,8 @@ import json
20
20
 
21
21
  from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
22
22
  from typing import Any, ClassVar, Dict, List, Optional
23
+ from typing_extensions import Annotated
24
+ from wordlift_client.models.automation_issue import AutomationIssue
23
25
  from typing import Optional, Set
24
26
  from typing_extensions import Self
25
27
 
@@ -27,10 +29,11 @@ class AutomationReadiness(BaseModel):
27
29
  """
28
30
  AutomationReadiness
29
31
  """ # noqa: E501
32
+ score: Optional[Annotated[int, Field(le=10, strict=True, ge=0)]] = Field(default=None, description="Numeric score for automation readiness (0-10)")
30
33
  status: Optional[StrictStr] = None
31
34
  explanation: Optional[StrictStr] = None
32
- issues: Optional[List[StrictStr]] = Field(default=None, description="List of issues affecting automation readiness")
33
- __properties: ClassVar[List[str]] = ["status", "explanation", "issues"]
35
+ issues: Optional[List[AutomationIssue]] = Field(default=None, description="List of structured automation readiness issues")
36
+ __properties: ClassVar[List[str]] = ["score", "status", "explanation", "issues"]
34
37
 
35
38
  @field_validator('status')
36
39
  def status_validate_enum(cls, value):
@@ -38,8 +41,8 @@ class AutomationReadiness(BaseModel):
38
41
  if value is None:
39
42
  return value
40
43
 
41
- if value not in set(['Good', 'Needs Improvement', 'Poor']):
42
- raise ValueError("must be one of enum values ('Good', 'Needs Improvement', 'Poor')")
44
+ if value not in set(['Good', 'Needs Improvement', 'Poor', 'Unknown']):
45
+ raise ValueError("must be one of enum values ('Good', 'Needs Improvement', 'Poor', 'Unknown')")
43
46
  return value
44
47
 
45
48
  model_config = ConfigDict(
@@ -81,6 +84,13 @@ class AutomationReadiness(BaseModel):
81
84
  exclude=excluded_fields,
82
85
  exclude_none=True,
83
86
  )
87
+ # override the default output from pydantic by calling `to_dict()` of each item in issues (list)
88
+ _items = []
89
+ if self.issues:
90
+ for _item in self.issues:
91
+ if _item:
92
+ _items.append(_item.to_dict())
93
+ _dict['issues'] = _items
84
94
  return _dict
85
95
 
86
96
  @classmethod
@@ -93,9 +103,10 @@ class AutomationReadiness(BaseModel):
93
103
  return cls.model_validate(obj)
94
104
 
95
105
  _obj = cls.model_validate({
106
+ "score": obj.get("score"),
96
107
  "status": obj.get("status"),
97
108
  "explanation": obj.get("explanation"),
98
- "issues": obj.get("issues")
109
+ "issues": [AutomationIssue.from_dict(_item) for _item in obj["issues"]] if obj.get("issues") is not None else None
99
110
  })
100
111
  return _obj
101
112
 
@@ -0,0 +1,102 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ WordLift API
5
+
6
+ WordLift API
7
+
8
+ The version of the OpenAPI document: 1.0
9
+ Contact: hello@wordlift.io
10
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
11
+
12
+ Do not edit the class manually.
13
+ """ # noqa: E501
14
+
15
+
16
+ from __future__ import annotations
17
+ import pprint
18
+ import re # noqa: F401
19
+ import json
20
+
21
+ from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
22
+ from typing import Any, ClassVar, Dict, List, Optional
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class BotStatus(BaseModel):
27
+ """
28
+ BotStatus
29
+ """ # noqa: E501
30
+ name: Optional[StrictStr] = Field(default=None, description="Name of the bot (e.g., GPTBot, Claude-Web, Googlebot)")
31
+ vendor: Optional[StrictStr] = Field(default=None, description="Vendor of the bot (e.g., OpenAI, Anthropic, Google)")
32
+ status: Optional[StrictStr] = Field(default=None, description="Access status for this bot")
33
+ __properties: ClassVar[List[str]] = ["name", "vendor", "status"]
34
+
35
+ @field_validator('status')
36
+ def status_validate_enum(cls, value):
37
+ """Validates the enum"""
38
+ if value is None:
39
+ return value
40
+
41
+ if value not in set(['Allowed', 'Blocked']):
42
+ raise ValueError("must be one of enum values ('Allowed', 'Blocked')")
43
+ return value
44
+
45
+ model_config = ConfigDict(
46
+ populate_by_name=True,
47
+ validate_assignment=True,
48
+ protected_namespaces=(),
49
+ )
50
+
51
+
52
+ def to_str(self) -> str:
53
+ """Returns the string representation of the model using alias"""
54
+ return pprint.pformat(self.model_dump(by_alias=True))
55
+
56
+ def to_json(self) -> str:
57
+ """Returns the JSON representation of the model using alias"""
58
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
59
+ return json.dumps(self.to_dict())
60
+
61
+ @classmethod
62
+ def from_json(cls, json_str: str) -> Optional[Self]:
63
+ """Create an instance of BotStatus from a JSON string"""
64
+ return cls.from_dict(json.loads(json_str))
65
+
66
+ def to_dict(self) -> Dict[str, Any]:
67
+ """Return the dictionary representation of the model using alias.
68
+
69
+ This has the following differences from calling pydantic's
70
+ `self.model_dump(by_alias=True)`:
71
+
72
+ * `None` is only added to the output dict for nullable fields that
73
+ were set at model initialization. Other fields with value `None`
74
+ are ignored.
75
+ """
76
+ excluded_fields: Set[str] = set([
77
+ ])
78
+
79
+ _dict = self.model_dump(
80
+ by_alias=True,
81
+ exclude=excluded_fields,
82
+ exclude_none=True,
83
+ )
84
+ return _dict
85
+
86
+ @classmethod
87
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
88
+ """Create an instance of BotStatus from a dict"""
89
+ if obj is None:
90
+ return None
91
+
92
+ if not isinstance(obj, dict):
93
+ return cls.model_validate(obj)
94
+
95
+ _obj = cls.model_validate({
96
+ "name": obj.get("name"),
97
+ "vendor": obj.get("vendor"),
98
+ "status": obj.get("status")
99
+ })
100
+ return _obj
101
+
102
+