platzky 0.2.4__py3-none-any.whl → 0.2.6__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.
- platzky/__init__.py +1 -1
- platzky/blog/blog.py +1 -3
- platzky/config.py +2 -1
- platzky/db/db.py +13 -13
- platzky/db/google_json_db.py +1 -3
- platzky/db/graph_ql_db.py +49 -16
- platzky/db/json_db.py +17 -18
- platzky/models.py +3 -2
- platzky/platzky.py +1 -6
- platzky/plugins/redirections/entrypoint.py +4 -8
- platzky/plugins/sendmail/entrypoint.py +2 -6
- platzky/seo/seo.py +4 -9
- platzky/templates/base.html +2 -8
- platzky/templates/head_meta.html +1 -2
- {platzky-0.2.4.dist-info → platzky-0.2.6.dist-info}/METADATA +1 -1
- {platzky-0.2.4.dist-info → platzky-0.2.6.dist-info}/RECORD +17 -17
- {platzky-0.2.4.dist-info → platzky-0.2.6.dist-info}/WHEEL +0 -0
platzky/__init__.py
CHANGED
platzky/blog/blog.py
CHANGED
|
@@ -35,9 +35,7 @@ def create_blog_blueprint(db, blog_prefix: str, locale_func):
|
|
|
35
35
|
@blog.route("/feed", methods=["GET"])
|
|
36
36
|
def get_feed():
|
|
37
37
|
lang = locale_func()
|
|
38
|
-
response = make_response(
|
|
39
|
-
render_template("feed.xml", posts=db.get_all_posts(lang))
|
|
40
|
-
)
|
|
38
|
+
response = make_response(render_template("feed.xml", posts=db.get_all_posts(lang)))
|
|
41
39
|
response.headers["Content-Type"] = "application/xml"
|
|
42
40
|
return response
|
|
43
41
|
|
platzky/config.py
CHANGED
platzky/db/db.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
1
2
|
from functools import partial
|
|
2
3
|
from typing import Any, Callable
|
|
3
4
|
|
|
4
5
|
from pydantic import BaseModel, Field
|
|
5
6
|
|
|
6
|
-
from
|
|
7
|
-
from ..models import MenuItem, Post, Page, Color
|
|
7
|
+
from ..models import Color, MenuItem, Page, Post
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class DB(ABC):
|
|
@@ -14,7 +14,7 @@ class DB(ABC):
|
|
|
14
14
|
|
|
15
15
|
def __init_subclass__(cls, *args, **kw):
|
|
16
16
|
"""Check that all methods defined in the subclass exist in the superclasses.
|
|
17
|
-
This is to prevent subclasses from
|
|
17
|
+
This is to prevent subclasses from splitting up DB interface.
|
|
18
18
|
"""
|
|
19
19
|
super().__init_subclass__(*args, **kw)
|
|
20
20
|
for name in cls.__dict__:
|
|
@@ -28,7 +28,7 @@ class DB(ABC):
|
|
|
28
28
|
f"Method {name} defined in {cls.__name__} does not exist in superclasses"
|
|
29
29
|
)
|
|
30
30
|
|
|
31
|
-
def extend(self, function_name: str, function: Callable) -> None:
|
|
31
|
+
def extend(self, function_name: str, function: Callable[..., Any]) -> None:
|
|
32
32
|
"""
|
|
33
33
|
Add a function to the DB object. The function must take the DB object as first parameter.
|
|
34
34
|
|
|
@@ -37,9 +37,7 @@ class DB(ABC):
|
|
|
37
37
|
function (Callable): The function to add to the DB object.
|
|
38
38
|
"""
|
|
39
39
|
if not callable(function):
|
|
40
|
-
raise ValueError(
|
|
41
|
-
f"The provided func for '{function_name}' is not callable."
|
|
42
|
-
)
|
|
40
|
+
raise ValueError(f"The provided func for '{function_name}' is not callable.")
|
|
43
41
|
try:
|
|
44
42
|
bound_function = partial(function, self)
|
|
45
43
|
setattr(self, function_name, bound_function)
|
|
@@ -71,27 +69,29 @@ class DB(ABC):
|
|
|
71
69
|
pass
|
|
72
70
|
|
|
73
71
|
@abstractmethod
|
|
74
|
-
def get_logo_url(
|
|
72
|
+
def get_logo_url(
|
|
73
|
+
self,
|
|
74
|
+
) -> str: # TODO provide alternative text along with the URL of logo
|
|
75
75
|
pass
|
|
76
76
|
|
|
77
77
|
@abstractmethod
|
|
78
|
-
def
|
|
78
|
+
def get_favicon_url(self) -> str:
|
|
79
79
|
pass
|
|
80
80
|
|
|
81
81
|
@abstractmethod
|
|
82
|
-
def
|
|
82
|
+
def get_primary_color(self) -> Color:
|
|
83
83
|
pass
|
|
84
84
|
|
|
85
85
|
@abstractmethod
|
|
86
|
-
def
|
|
86
|
+
def get_secondary_color(self) -> Color:
|
|
87
87
|
pass
|
|
88
88
|
|
|
89
89
|
@abstractmethod
|
|
90
|
-
def
|
|
90
|
+
def get_plugins_data(self) -> list[Any]:
|
|
91
91
|
pass
|
|
92
92
|
|
|
93
93
|
@abstractmethod
|
|
94
|
-
def
|
|
94
|
+
def get_font(self) -> str:
|
|
95
95
|
pass
|
|
96
96
|
|
|
97
97
|
|
platzky/db/google_json_db.py
CHANGED
|
@@ -22,9 +22,7 @@ def db_from_config(config: GoogleJsonDbConfig):
|
|
|
22
22
|
|
|
23
23
|
def get_db(config):
|
|
24
24
|
google_json_db_config = GoogleJsonDbConfig.model_validate(config)
|
|
25
|
-
return GoogleJsonDb(
|
|
26
|
-
google_json_db_config.bucket_name, google_json_db_config.source_blob_name
|
|
27
|
-
)
|
|
25
|
+
return GoogleJsonDb(google_json_db_config.bucket_name, google_json_db_config.source_blob_name)
|
|
28
26
|
|
|
29
27
|
|
|
30
28
|
def get_blob(bucket_name, source_blob_name):
|
platzky/db/graph_ql_db.py
CHANGED
|
@@ -5,8 +5,8 @@ from gql import Client, gql
|
|
|
5
5
|
from gql.transport.aiohttp import AIOHTTPTransport
|
|
6
6
|
from pydantic import Field
|
|
7
7
|
|
|
8
|
-
from .db import DB, DBConfig
|
|
9
8
|
from ..models import Color, Post
|
|
9
|
+
from .db import DB, DBConfig
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def db_config_type():
|
|
@@ -58,9 +58,7 @@ class GraphQL(DB):
|
|
|
58
58
|
self.module_name = "graph_ql_db"
|
|
59
59
|
self.db_name = "GraphQLDb"
|
|
60
60
|
full_token = "bearer " + token
|
|
61
|
-
transport = AIOHTTPTransport(
|
|
62
|
-
url=endpoint, headers={"Authorization": full_token}
|
|
63
|
-
)
|
|
61
|
+
transport = AIOHTTPTransport(url=endpoint, headers={"Authorization": full_token})
|
|
64
62
|
self.client = Client(transport=transport)
|
|
65
63
|
super().__init__()
|
|
66
64
|
|
|
@@ -97,9 +95,7 @@ class GraphQL(DB):
|
|
|
97
95
|
}
|
|
98
96
|
"""
|
|
99
97
|
)
|
|
100
|
-
raw_ql_posts = self.client.execute(all_posts, variable_values={"lang": lang})[
|
|
101
|
-
"posts"
|
|
102
|
-
]
|
|
98
|
+
raw_ql_posts = self.client.execute(all_posts, variable_values={"lang": lang})["posts"]
|
|
103
99
|
|
|
104
100
|
return [Post.model_validate(_standarize_post(post)) for post in raw_ql_posts]
|
|
105
101
|
|
|
@@ -127,7 +123,7 @@ class GraphQL(DB):
|
|
|
127
123
|
slug
|
|
128
124
|
author {
|
|
129
125
|
name
|
|
130
|
-
}
|
|
126
|
+
}
|
|
131
127
|
contentInRichText {
|
|
132
128
|
markdown
|
|
133
129
|
html
|
|
@@ -191,9 +187,7 @@ class GraphQL(DB):
|
|
|
191
187
|
}
|
|
192
188
|
"""
|
|
193
189
|
)
|
|
194
|
-
return self.client.execute(post, variable_values={"tag": tag, "lang": lang})[
|
|
195
|
-
"posts"
|
|
196
|
-
]
|
|
190
|
+
return self.client.execute(post, variable_values={"tag": tag, "lang": lang})["posts"]
|
|
197
191
|
|
|
198
192
|
def add_comment(self, author_name, comment, post_slug):
|
|
199
193
|
add_comment = gql(
|
|
@@ -224,7 +218,39 @@ class GraphQL(DB):
|
|
|
224
218
|
return str("")
|
|
225
219
|
|
|
226
220
|
def get_logo_url(self):
|
|
227
|
-
|
|
221
|
+
logo = gql(
|
|
222
|
+
"""
|
|
223
|
+
query myquery {
|
|
224
|
+
logos(stage: PUBLISHED) {
|
|
225
|
+
logo {
|
|
226
|
+
alternateText
|
|
227
|
+
image {
|
|
228
|
+
url
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
"""
|
|
234
|
+
)
|
|
235
|
+
try:
|
|
236
|
+
return self.client.execute(logo)["logos"][0]["logo"]["image"]["url"]
|
|
237
|
+
except IndexError:
|
|
238
|
+
return ""
|
|
239
|
+
|
|
240
|
+
def get_favicon_url(self):
|
|
241
|
+
favicon = gql(
|
|
242
|
+
"""
|
|
243
|
+
query myquery {
|
|
244
|
+
favicons(stage: PUBLISHED) {
|
|
245
|
+
favicon {
|
|
246
|
+
url
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
"""
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
return self.client.execute(favicon)["favicons"][0]["favicon"]["url"]
|
|
228
254
|
|
|
229
255
|
def get_primary_color(self) -> Color:
|
|
230
256
|
return Color()
|
|
@@ -232,8 +258,15 @@ class GraphQL(DB):
|
|
|
232
258
|
def get_secondary_color(self):
|
|
233
259
|
return Color()
|
|
234
260
|
|
|
235
|
-
def get_site_content(self):
|
|
236
|
-
return ""
|
|
237
|
-
|
|
238
261
|
def get_plugins_data(self):
|
|
239
|
-
|
|
262
|
+
plugins_data = gql(
|
|
263
|
+
"""
|
|
264
|
+
query MyQuery {
|
|
265
|
+
pluginConfigs(stage: PUBLISHED) {
|
|
266
|
+
name
|
|
267
|
+
config
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
"""
|
|
271
|
+
)
|
|
272
|
+
return self.client.execute(plugins_data)["pluginConfigs"]
|
platzky/db/json_db.py
CHANGED
|
@@ -3,8 +3,8 @@ from typing import Any, Dict
|
|
|
3
3
|
|
|
4
4
|
from pydantic import Field
|
|
5
5
|
|
|
6
|
-
from .db import DB, DBConfig
|
|
7
6
|
from ..models import MenuItem, Post
|
|
7
|
+
from .db import DB, DBConfig
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def db_config_type():
|
|
@@ -34,13 +34,13 @@ class Json(DB):
|
|
|
34
34
|
def get_all_posts(self, lang):
|
|
35
35
|
return [
|
|
36
36
|
Post.model_validate(post)
|
|
37
|
-
for post in self.
|
|
37
|
+
for post in self._get_site_content().get("posts", ())
|
|
38
38
|
if post["language"] == lang
|
|
39
39
|
]
|
|
40
40
|
|
|
41
41
|
def get_post(self, slug: str) -> Post:
|
|
42
42
|
"""Returns a post matching the given slug."""
|
|
43
|
-
all_posts = self.
|
|
43
|
+
all_posts = self._get_site_content().get("posts")
|
|
44
44
|
if all_posts is None:
|
|
45
45
|
raise ValueError("Posts data is missing")
|
|
46
46
|
wanted_post = next((post for post in all_posts if post["slug"] == slug), None)
|
|
@@ -51,40 +51,39 @@ class Json(DB):
|
|
|
51
51
|
# TODO: add test for non-existing page
|
|
52
52
|
def get_page(self, slug):
|
|
53
53
|
list_of_pages = (
|
|
54
|
-
page
|
|
55
|
-
for page in self.get_site_content().get("pages")
|
|
56
|
-
if page["slug"] == slug
|
|
54
|
+
page for page in self._get_site_content().get("pages") if page["slug"] == slug
|
|
57
55
|
)
|
|
58
56
|
page = Post.model_validate(next(list_of_pages))
|
|
59
57
|
return page
|
|
60
58
|
|
|
61
59
|
def get_menu_items(self) -> list[MenuItem]:
|
|
62
|
-
menu_items_raw = self.
|
|
60
|
+
menu_items_raw = self._get_site_content().get("menu_items", [])
|
|
63
61
|
menu_items_list = [MenuItem.model_validate(x) for x in menu_items_raw]
|
|
64
62
|
return menu_items_list
|
|
65
63
|
|
|
66
64
|
def get_posts_by_tag(self, tag, lang):
|
|
67
|
-
return (
|
|
68
|
-
post for post in self.get_site_content()["posts"] if tag in post["tags"]
|
|
69
|
-
)
|
|
65
|
+
return (post for post in self._get_site_content()["posts"] if tag in post["tags"])
|
|
70
66
|
|
|
71
|
-
def
|
|
67
|
+
def _get_site_content(self):
|
|
72
68
|
content = self.data.get("site_content")
|
|
73
69
|
if content is None:
|
|
74
70
|
raise Exception("Content should not be None")
|
|
75
71
|
return content
|
|
76
72
|
|
|
77
73
|
def get_logo_url(self):
|
|
78
|
-
return self.
|
|
74
|
+
return self._get_site_content().get("logo_url", "")
|
|
75
|
+
|
|
76
|
+
def get_favicon_url(self):
|
|
77
|
+
return self._get_site_content().get("favicon_url", "")
|
|
79
78
|
|
|
80
79
|
def get_font(self) -> str:
|
|
81
|
-
return self.
|
|
80
|
+
return self._get_site_content().get("font", "")
|
|
82
81
|
|
|
83
82
|
def get_primary_color(self):
|
|
84
|
-
return self.
|
|
83
|
+
return self._get_site_content().get("primary_color", "white")
|
|
85
84
|
|
|
86
85
|
def get_secondary_color(self):
|
|
87
|
-
return self.
|
|
86
|
+
return self._get_site_content().get("secondary_color", "navy")
|
|
88
87
|
|
|
89
88
|
def add_comment(self, author_name, comment, post_slug):
|
|
90
89
|
comment = {
|
|
@@ -95,10 +94,10 @@ class Json(DB):
|
|
|
95
94
|
|
|
96
95
|
post_index = next(
|
|
97
96
|
i
|
|
98
|
-
for i in range(len(self.
|
|
99
|
-
if self.
|
|
97
|
+
for i in range(len(self._get_site_content()["posts"]))
|
|
98
|
+
if self._get_site_content()["posts"][i]["slug"] == post_slug
|
|
100
99
|
)
|
|
101
|
-
self.
|
|
100
|
+
self._get_site_content()["posts"][post_index]["comments"].append(comment)
|
|
102
101
|
|
|
103
102
|
def get_plugins_data(self):
|
|
104
103
|
return self.data.get("plugins", [])
|
platzky/models.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
from pydantic import BaseModel
|
|
2
1
|
import datetime
|
|
2
|
+
|
|
3
3
|
import humanize
|
|
4
|
+
from pydantic import BaseModel
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class Image(BaseModel):
|
|
@@ -40,7 +41,7 @@ class Post(BaseModel):
|
|
|
40
41
|
def __lt__(self, other):
|
|
41
42
|
if isinstance(other, Post):
|
|
42
43
|
return self.date < other.date
|
|
43
|
-
|
|
44
|
+
raise NotImplementedError("Posts can only be compared with other posts")
|
|
44
45
|
|
|
45
46
|
|
|
46
47
|
Page = Post
|
platzky/platzky.py
CHANGED
|
@@ -87,12 +87,6 @@ def create_engine(config: Config, db) -> Engine:
|
|
|
87
87
|
session["language"] = lang
|
|
88
88
|
return redirect(request.referrer)
|
|
89
89
|
|
|
90
|
-
@app.route("/logo", methods=["GET"])
|
|
91
|
-
def logo():
|
|
92
|
-
return redirect(
|
|
93
|
-
"https://www.problematy.pl/wp-content/uploads/2023/08/kolor_poziom.png"
|
|
94
|
-
)
|
|
95
|
-
|
|
96
90
|
def url_link(x: str) -> str:
|
|
97
91
|
return urllib.parse.quote(x, safe="")
|
|
98
92
|
|
|
@@ -108,6 +102,7 @@ def create_engine(config: Config, db) -> Engine:
|
|
|
108
102
|
"url_link": url_link,
|
|
109
103
|
"menu_items": app.db.get_menu_items(),
|
|
110
104
|
"logo_url": app.db.get_logo_url(),
|
|
105
|
+
"favicon_url": app.db.get_favicon_url(),
|
|
111
106
|
"font": app.db.get_font(),
|
|
112
107
|
"primary_color": app.db.get_primary_color(),
|
|
113
108
|
"secondary_color": app.db.get_secondary_color(),
|
|
@@ -27,8 +27,7 @@ def graph_ql_db_get_redirections(self):
|
|
|
27
27
|
"""
|
|
28
28
|
)
|
|
29
29
|
return {
|
|
30
|
-
x["source"]: x["destination"]
|
|
31
|
-
for x in self.client.execute(redirections)["redirections"]
|
|
30
|
+
x["source"]: x["destination"] for x in self.client.execute(redirections)["redirections"]
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
|
|
@@ -37,11 +36,8 @@ class Redirection(BaseModel):
|
|
|
37
36
|
destiny: str
|
|
38
37
|
|
|
39
38
|
|
|
40
|
-
def parse_redirections(config: dict) -> list[Redirection]:
|
|
41
|
-
return [
|
|
42
|
-
Redirection(source=source, destiny=destiny)
|
|
43
|
-
for source, destiny in config.items()
|
|
44
|
-
]
|
|
39
|
+
def parse_redirections(config: dict[str, str]) -> list[Redirection]:
|
|
40
|
+
return [Redirection(source=source, destiny=destiny) for source, destiny in config.items()]
|
|
45
41
|
|
|
46
42
|
|
|
47
43
|
def setup_routes(app, redirections):
|
|
@@ -62,7 +58,7 @@ def redirect_with_name(destiny, code, name):
|
|
|
62
58
|
return named_redirect
|
|
63
59
|
|
|
64
60
|
|
|
65
|
-
def process(app, config: dict) -> object:
|
|
61
|
+
def process(app, config: dict[str, str]) -> object:
|
|
66
62
|
redirections = parse_redirections(config)
|
|
67
63
|
setup_routes(app, redirections)
|
|
68
64
|
return app
|
|
@@ -3,12 +3,8 @@ import smtplib
|
|
|
3
3
|
from pydantic import BaseModel, Field
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
def send_mail(
|
|
7
|
-
|
|
8
|
-
):
|
|
9
|
-
full_message = (
|
|
10
|
-
f"From: {sender_email}\nTo: {receiver_email}\nSubject: {subject}\n\n{message}"
|
|
11
|
-
)
|
|
6
|
+
def send_mail(sender_email, password, smtp_server, port, receiver_email, subject, message):
|
|
7
|
+
full_message = f"From: {sender_email}\nTo: {receiver_email}\nSubject: {subject}\n\n{message}"
|
|
12
8
|
server = smtplib.SMTP_SSL(smtp_server, port)
|
|
13
9
|
server.ehlo()
|
|
14
10
|
server.login(sender_email, password)
|
platzky/seo/seo.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import typing as t
|
|
2
2
|
import urllib.parse
|
|
3
3
|
from os.path import dirname
|
|
4
|
+
|
|
4
5
|
from flask import Blueprint, current_app, make_response, render_template, request
|
|
5
6
|
|
|
6
7
|
|
|
@@ -14,9 +15,7 @@ def create_seo_blueprint(db, config: dict[str, t.Any]):
|
|
|
14
15
|
|
|
15
16
|
@seo.route("/robots.txt")
|
|
16
17
|
def robots():
|
|
17
|
-
robots_response = render_template(
|
|
18
|
-
"robots.txt", domain=request.host, mimetype="text/plain"
|
|
19
|
-
)
|
|
18
|
+
robots_response = render_template("robots.txt", domain=request.host, mimetype="text/plain")
|
|
20
19
|
response = make_response(robots_response)
|
|
21
20
|
response.headers["Content-Type"] = "text/plain"
|
|
22
21
|
return response
|
|
@@ -45,12 +44,8 @@ def create_seo_blueprint(db, config: dict[str, t.Any]):
|
|
|
45
44
|
static_urls = list()
|
|
46
45
|
for rule in current_app.url_map.iter_rules():
|
|
47
46
|
if not str(rule).startswith("/admin") and not str(rule).startswith("/user"):
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
and "GET" in rule.methods
|
|
51
|
-
and len(rule.arguments) == 0
|
|
52
|
-
):
|
|
53
|
-
url = {"loc": f"{host_base}{str(rule)}"}
|
|
47
|
+
if rule.methods is not None and "GET" in rule.methods and len(rule.arguments) == 0:
|
|
48
|
+
url = {"loc": f"{host_base}{rule!s}"}
|
|
54
49
|
static_urls.append(url)
|
|
55
50
|
|
|
56
51
|
# Dynamic routes with dynamic content
|
platzky/templates/base.html
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<link rel="stylesheet" href="https://unpkg.com/leaflet.markercluster@1.5.3/dist/MarkerCluster.Default.css" />
|
|
12
12
|
<link rel="stylesheet" href="{{ font.url }}">
|
|
13
13
|
{% endblock %}
|
|
14
|
-
<title>{% block title %}
|
|
14
|
+
<title>{% block title %}{{app_name}}{% endblock %}</title>
|
|
15
15
|
<meta name="description" content=" {% block description %} {% endblock %} ">
|
|
16
16
|
<style>
|
|
17
17
|
html,
|
|
@@ -98,13 +98,7 @@
|
|
|
98
98
|
<i class="fas fa-sliders-h"></i>
|
|
99
99
|
</button>
|
|
100
100
|
{% endif %}
|
|
101
|
-
<a class="navbar-brand" href="/">
|
|
102
|
-
{% if logo_url %}
|
|
103
|
-
<img src="{{ logo_url }}" class="logo" >
|
|
104
|
-
{% else %}
|
|
105
|
-
{{ _(app_name) }}
|
|
106
|
-
{% endif %}
|
|
107
|
-
</a>
|
|
101
|
+
<a class="navbar-brand" href="/">{% if logo_url %}<img src="{{ logo_url }}" class="logo">{% else %}{{_(app_name)}}{% endif %}</a>
|
|
108
102
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"
|
|
109
103
|
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
|
110
104
|
<i class="fas fa-bars"></i>
|
platzky/templates/head_meta.html
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
<meta charset="utf-8">
|
|
3
3
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
4
4
|
<link rel="alternate" hreflang="{{ current_language }}" href="{{ request.base_url }}"/>
|
|
5
|
-
<link rel="shortcut icon" href="{{
|
|
6
|
-
|
|
5
|
+
<link rel="shortcut icon" href="{{ favicon_url }}" type="image/x-icon">
|
|
7
6
|
<link rel="canonical" href="{{ request.base_url }}"/>
|
|
8
7
|
|
|
9
8
|
<!-- Bootstrap CSS -->
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
platzky/__init__.py,sha256=
|
|
1
|
+
platzky/__init__.py,sha256=cEAqMh-FU8mbfCzFQaWMhKX4lDjoxDiQ9S4hTNsSOMg,160
|
|
2
2
|
platzky/blog/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
platzky/blog/blog.py,sha256=
|
|
3
|
+
platzky/blog/blog.py,sha256=caBUewnwd6QrJDv20m4JDfDDjiVu7hM0AJnoTyCdwM4,3009
|
|
4
4
|
platzky/blog/comment_form.py,sha256=4lkNJ_S_2DZmJBbz-NPDqahvy2Zz5AGNH2spFeGIop4,513
|
|
5
|
-
platzky/config.py,sha256=
|
|
5
|
+
platzky/config.py,sha256=WStlXnvoa9sCGPqKW6FuN1GIcp_MIV08FjPME9TD7x4,2204
|
|
6
6
|
platzky/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
platzky/db/db.py,sha256=
|
|
7
|
+
platzky/db/db.py,sha256=SayR69Nxs9aGMfYumLyLIH0LVLVmwiQt9WAICq59gng,2709
|
|
8
8
|
platzky/db/db_loader.py,sha256=CuEiXxhIa4bFMm0vi7ugzm7j3WycilGRKCU6smgIImE,905
|
|
9
|
-
platzky/db/google_json_db.py,sha256=
|
|
10
|
-
platzky/db/graph_ql_db.py,sha256=
|
|
11
|
-
platzky/db/json_db.py,sha256=
|
|
9
|
+
platzky/db/google_json_db.py,sha256=IgfCER7oJ4I_WD4TjhvFFL0voUj6EfeoaVWdoEcHTdA,1499
|
|
10
|
+
platzky/db/graph_ql_db.py,sha256=aIqRxPV-Txr5MY2-qVALby9fHyIvWgvSz2t24M9SNRI,7343
|
|
11
|
+
platzky/db/json_db.py,sha256=AtZoTcM6S2ZHo19rxkCi4h4E4INGieZ4W6H5O2iormA,3246
|
|
12
12
|
platzky/db/json_file_db.py,sha256=UQ8TadELmqOzj_tgNfmzhtCkDkMAgcB9vaUy0GQXUY4,1010
|
|
13
|
-
platzky/models.py,sha256
|
|
14
|
-
platzky/platzky.py,sha256
|
|
13
|
+
platzky/models.py,sha256=-IIlyeLzACeTUpzuzvzJYxtT57E6wRiERoRgXJYMMtY,1502
|
|
14
|
+
platzky/platzky.py,sha256=-01WVpSxZz96NoilFB_2ispHLRrquCsMR9p3F7Tyf1s,4525
|
|
15
15
|
platzky/plugin_loader.py,sha256=KYLDSEd_hseAgBuSbikerU_IFx-YmcYK5UwYw7kla2E,1106
|
|
16
16
|
platzky/plugins/google-tag-manager/entrypoint.py,sha256=yY5UqFvSdj3tt2upwNS8JkTrKcrbwlaaE2XQ6sRiGLc,1011
|
|
17
|
-
platzky/plugins/redirections/entrypoint.py,sha256=
|
|
18
|
-
platzky/plugins/sendmail/entrypoint.py,sha256=
|
|
19
|
-
platzky/seo/seo.py,sha256=
|
|
17
|
+
platzky/plugins/redirections/entrypoint.py,sha256=yoqHsRLqRALdICs5_UMSREkfEo1Lbsjj9tqEA7dsseg,1555
|
|
18
|
+
platzky/plugins/sendmail/entrypoint.py,sha256=16GszfLaYhVUSuCdL4SPVKYN9-mONp-hK5ZWSiLluPo,1215
|
|
19
|
+
platzky/seo/seo.py,sha256=l59Ol56YfJB4bk4IzypYVASYCjLrjJqXRXMIcc4EUZY,2606
|
|
20
20
|
platzky/static/blog.css,sha256=jF-8ykgpbPp58SCUqygBhCm4o7ggULojbxpnk6Jbx3c,7895
|
|
21
21
|
platzky/templates/404.html,sha256=EheoLSWylOscLH8FmcMA4c6Jw14i5HkSvE_GXzGIrUo,78
|
|
22
|
-
platzky/templates/base.html,sha256=
|
|
22
|
+
platzky/templates/base.html,sha256=6ZunlASdsCv9n0PWZBznQrRBKsnmWYRPweX9Ml-EhCo,4931
|
|
23
23
|
platzky/templates/blog.html,sha256=aPl-DzLX85bHv7tN8UjlABR086PUJ9IGlGbIBioFHGA,1281
|
|
24
24
|
platzky/templates/body_meta.html,sha256=au61f54ZK8SdovSpoUROjyy5fi3K6n_N5P-QjW7S5-8,526
|
|
25
25
|
platzky/templates/feed.xml,sha256=I9cz7vnxx-TfbLIDHFXfrC3S2Nt9B6PrWf3u4zSIi78,863
|
|
26
|
-
platzky/templates/head_meta.html,sha256=
|
|
26
|
+
platzky/templates/head_meta.html,sha256=tpwNeaxQwlM6Gnmz1v2fboxqbm0qYPDP-fYeeTSKPKI,1349
|
|
27
27
|
platzky/templates/home.html,sha256=nqoVVvaNBd1ceun6KOZB_eY20xf4Mjtu8LTl1Q_Ap6c,3900
|
|
28
28
|
platzky/templates/page.html,sha256=8tS9K5dXfCKItvOlpEuURnWohnWjs6WW6zeBJFLARUM,647
|
|
29
29
|
platzky/templates/post.html,sha256=GSgjIZsOQKtNx3cEbquSjZ5L4whPnG6MzRyoq9k4B8Q,1906
|
|
30
30
|
platzky/templates/robots.txt,sha256=2_j2tiYtYJnzZUrANiX9pvBxyw5Dp27fR_co18BPEJ0,116
|
|
31
31
|
platzky/templates/sitemap.xml,sha256=iIJZ91_B5ZuNLCHsRtsGKZlBAXojOTP8kffqKLacgvs,578
|
|
32
32
|
platzky/www_handler.py,sha256=pF6Rmvem1sdVqHD7z3RLrDuG-CwAqfGCti50_NPsB2w,725
|
|
33
|
-
platzky-0.2.
|
|
34
|
-
platzky-0.2.
|
|
35
|
-
platzky-0.2.
|
|
33
|
+
platzky-0.2.6.dist-info/METADATA,sha256=maIpLxUQ2j_GtjB1KTkY0LC4obJoildhpkrWZTNVCag,1591
|
|
34
|
+
platzky-0.2.6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
35
|
+
platzky-0.2.6.dist-info/RECORD,,
|
|
File without changes
|