wordpress-markdown-blog-loader 1.7.0__tar.gz → 1.7.3__tar.gz

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 (24) hide show
  1. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/PKG-INFO +2 -2
  2. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/README.md +1 -1
  3. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/pyproject.toml +1 -1
  4. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/api.py +2 -2
  5. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/html_to_gutenberg.py +19 -0
  6. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader.egg-info/PKG-INFO +2 -2
  7. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/tests/test_html_to_gutenberg.py +21 -1
  8. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/LICENSE +0 -0
  9. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/setup.cfg +0 -0
  10. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/__init__.py +0 -0
  11. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/__main__.py +0 -0
  12. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/blog.py +0 -0
  13. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/check_links.py +0 -0
  14. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/download.py +0 -0
  15. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/name_to_email.py +0 -0
  16. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/new.py +0 -0
  17. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/remove_newlines.py +0 -0
  18. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader/upload.py +0 -0
  19. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader.egg-info/SOURCES.txt +0 -0
  20. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader.egg-info/dependency_links.txt +0 -0
  21. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader.egg-info/entry_points.txt +0 -0
  22. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader.egg-info/requires.txt +0 -0
  23. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/src/wordpress_markdown_blog_loader.egg-info/top_level.txt +0 -0
  24. {wordpress_markdown_blog_loader-1.7.0 → wordpress_markdown_blog_loader-1.7.3}/tests/test_blog.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wordpress-markdown-blog-loader
3
- Version: 1.7.0
3
+ Version: 1.7.3
4
4
  Summary: load markdown blogs into wordpress
5
5
  Author-email: Mark van Holsteijn <markvanholsteijn@binx.io>
6
6
  License: APL2
@@ -119,7 +119,7 @@ alias wp-md='docker run \
119
119
  -v $HOME:$HOME \
120
120
  -v $HOME/.wordpress.ini:/root/.wordpress.ini \
121
121
  -v $PWD:/$PWD \
122
- -w $PWD ghcr.io/binxio/wordpress-markdown-blog-loader:1.7.0
122
+ -w $PWD ghcr.io/binxio/wordpress-markdown-blog-loader:1.7.3
123
123
  ```'
124
124
  Assuming that your WordPress app password is stored in the 1password Private vault under the name `wordpress app password`
125
125
 
@@ -68,7 +68,7 @@ alias wp-md='docker run \
68
68
  -v $HOME:$HOME \
69
69
  -v $HOME/.wordpress.ini:/root/.wordpress.ini \
70
70
  -v $PWD:/$PWD \
71
- -w $PWD ghcr.io/binxio/wordpress-markdown-blog-loader:1.7.0
71
+ -w $PWD ghcr.io/binxio/wordpress-markdown-blog-loader:1.7.3
72
72
  ```'
73
73
  Assuming that your WordPress app password is stored in the 1password Private vault under the name `wordpress app password`
74
74
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "wordpress-markdown-blog-loader"
7
- version = "1.7.0"
7
+ version = "1.7.3"
8
8
  authors = [{name = "Mark van Holsteijn", email = "markvanholsteijn@binx.io"}]
9
9
  license = {text = "APL2"}
10
10
  description = "load markdown blogs into wordpress"
@@ -286,11 +286,11 @@ class PermissionDenied(Exception):
286
286
  class Wordpress(object):
287
287
  def __init__(self, host: Optional[str] = None):
288
288
  self.endpoint = WordpressEndpoint.load(host)
289
-
289
+ self.app_version = os.getenv("APP_VERSION", "0.0.0")
290
290
  self._media: List[Medium] = {}
291
291
  self.headers = {
292
292
  "accept": "application/json",
293
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Safari/605.1.15",
293
+ "User-Agent": "wordpress-blog-uploader/" + self.app_version
294
294
  }
295
295
  self.session = requests.Session()
296
296
 
@@ -14,6 +14,8 @@ def _wrap_in_gutenberg_comments(element):
14
14
  return _wrap_list(element)
15
15
  if element.name == "img":
16
16
  return _wrap_image(element)
17
+ if element.name == "blockquote":
18
+ return _wrap_quote(element)
17
19
  return str(element)
18
20
 
19
21
 
@@ -21,6 +23,23 @@ def _wrap_paragraph(element):
21
23
  return f"<!-- wp:paragraph -->\n{str(element)}\n<!-- /wp:paragraph -->"
22
24
 
23
25
 
26
+ def _wrap_quote(element):
27
+ element["class"] = ["wp-block-quote"]
28
+ # Wrap nested elements
29
+ for child in list(element.contents):
30
+ if isinstance(child, (NavigableString, Comment)):
31
+ continue
32
+
33
+ # We need to wrap the child in Gutenberg comments
34
+ # Since _wrap_in_gutenberg_comments returns a string,
35
+ # we replace the child with a NavigableString of that result
36
+ wrapped_child = _wrap_in_gutenberg_comments(child)
37
+ if wrapped_child != str(child):
38
+ child.replace_with(BeautifulSoup(wrapped_child, "html.parser"))
39
+
40
+ return f"<!-- wp:quote -->\n{str(element)}\n<!-- /wp:quote -->"
41
+
42
+
24
43
  def _wrap_heading(element):
25
44
  element["class"] = ["wp-block-heading"]
26
45
  return f"<!-- wp:heading -->\n{str(element)}\n<!-- /wp:heading -->"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wordpress-markdown-blog-loader
3
- Version: 1.7.0
3
+ Version: 1.7.3
4
4
  Summary: load markdown blogs into wordpress
5
5
  Author-email: Mark van Holsteijn <markvanholsteijn@binx.io>
6
6
  License: APL2
@@ -119,7 +119,7 @@ alias wp-md='docker run \
119
119
  -v $HOME:$HOME \
120
120
  -v $HOME/.wordpress.ini:/root/.wordpress.ini \
121
121
  -v $PWD:/$PWD \
122
- -w $PWD ghcr.io/binxio/wordpress-markdown-blog-loader:1.7.0
122
+ -w $PWD ghcr.io/binxio/wordpress-markdown-blog-loader:1.7.3
123
123
  ```'
124
124
  Assuming that your WordPress app password is stored in the 1password Private vault under the name `wordpress app password`
125
125
 
@@ -1,3 +1,4 @@
1
+ import re
1
2
  import unittest
2
3
  from bs4 import BeautifulSoup, NavigableString, Comment
3
4
 
@@ -8,6 +9,7 @@ from wordpress_markdown_blog_loader.html_to_gutenberg import (
8
9
  _wrap_list,
9
10
  _wrap_image,
10
11
  _wrap_in_gutenberg_comments,
12
+ _wrap_quote,
11
13
  convert,
12
14
  )
13
15
 
@@ -91,6 +93,25 @@ class TestGutenbergWrapFunctions(unittest.TestCase):
91
93
  res = _wrap_in_gutenberg_comments(span_elem)
92
94
  self.assertEqual(res, "<span>custom</span>")
93
95
 
96
+ def test_wrap_in_gutenberg_quote(self):
97
+ soup = BeautifulSoup("<blockquote>quotie quote</blockquote>", "html.parser")
98
+ elem = soup.blockquote
99
+ result = _wrap_quote(elem)
100
+ self.assertEqual(result, '<!-- wp:quote -->\n<blockquote class="wp-block-quote">quotie quote</blockquote>\n<!-- /wp:quote -->')
101
+
102
+ def test_wrap_quote_nested_elements(self):
103
+ html = "<blockquote><p>Quote line 1</p><p>Quote line 2</p></blockquote>"
104
+ soup = BeautifulSoup(html, "html.parser")
105
+ elem = soup.blockquote
106
+ result = _wrap_quote(elem)
107
+
108
+ # Expected behavior: child paragraphs should be wrapped in Gutenberg comments
109
+ self.assertIn("<!-- wp:paragraph -->", result)
110
+ self.assertIn("<p>Quote line 1</p>", result)
111
+ self.assertIn("<p>Quote line 2</p>", result)
112
+ self.assertTrue(result.startswith("<!-- wp:quote -->"))
113
+ self.assertTrue(result.endswith("<!-- /wp:quote -->"))
114
+
94
115
 
95
116
  import unittest
96
117
 
@@ -133,6 +154,5 @@ class TestConvertFunction(unittest.TestCase):
133
154
  self.assertIn("<!-- wp:heading -->", result)
134
155
  self.assertIn("<!-- wp:code -->", result)
135
156
 
136
-
137
157
  if __name__ == "__main__":
138
158
  unittest.main()