{"id":416,"date":"2009-01-07T01:08:26","date_gmt":"2009-01-07T08:08:26","guid":{"rendered":"https:\/\/dubinko.info\/blog\/?p=416"},"modified":"2009-01-07T01:10:45","modified_gmt":"2009-01-07T08:10:45","slug":"on-porting-webpath-to-python-3k","status":"publish","type":"post","link":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/","title":{"rendered":"On porting WebPath to Python 3k"},"content":{"rendered":"<p>I&#8217;ve started looking into porting the <a href=\"https:\/\/sourceforge.net\/projects\/webpath\">WebPath<\/a> code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from <a href=\"http:\/\/www.dabeaz.com\/ply\/\">PLY<\/a>. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the remarkable David Beazley to blow that assumption out of the water: the latest version of lex.py from <a href=\"http:\/\/code.google.com\/p\/ply\/source\/browse\/trunk\/ply\/lex.py\">SVN<\/a> works in both 2.x and 3.x.<\/p>\n<p>From there the included 2to3 tool was easy enough to run. (Relatively more difficult was getting 2.6 and 3.0 versions of Python frameworks installed on Mac, but even that wasn&#8217;t too bad.) The tool made some moderate changes, and I can run the unit tests, and a few even pass!<\/p>\n<p>The primary remaining problem stems from code where the documentation is a little unclear, and my inexperience is severe. The part of the code in platonicweb.py that reads nasty, grotty HTML via Tidy and produces a clean DOM throws an exception every time. Seems to be a mismatch between String and Byte (encoded string) types, but manifested as a failed XML parse. Sans exception handling, the code looks like:<\/p>\n<pre>    page <span class=\"hl sym\">=<\/span> urllib<span class=\"hl sym\">.<\/span>request<span class=\"hl sym\">.<\/span><span class=\"hl kwd\">urlopen<\/span><span class=\"hl sym\">(<\/span>fullurl<span class=\"hl sym\">)<\/span>\r\n    markup <span class=\"hl sym\">=<\/span> page<span class=\"hl sym\">.<\/span><span class=\"hl kwd\">read<\/span><span class=\"hl sym\">()<\/span>\r\n    dom <span class=\"hl sym\">=<\/span> <span class=\"hl kwd\">xml.dom.minidom.parseString<\/span><span class=\"hl sym\">(<\/span>markup<span class=\"hl sym\">)<\/span><\/pre>\n<p>urlopen() returns a file-like object, but the docs didn&#8217;t seem clear on whether it&#8217;s like a file opened in byte or string mode. In any case, I&#8217;m almost certainly doing it wrong. Suggestions?<\/p>\n<p>-m<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[27,24],"tags":[608,612,610,613,609,614,607,1164,606,531,611,244,1153],"class_list":["post-416","post","type-post","status-publish","format-standard","hentry","category-languages","category-python","tag-2to3","tag-byte","tag-exception","tag-lex","tag-parse","tag-ply","tag-porting","tag-python","tag-python3","tag-python3k","tag-string","tag-webpath","tag-xml"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"I&#039;ve started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"mdubinko\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"MicahLogic Queryopticon | Yields undecidable when preceded by its quotation\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"On porting WebPath to Python 3k | MicahLogic Queryopticon\" \/>\n\t\t<meta property=\"og:description\" content=\"I&#039;ve started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2009-01-07T08:08:26+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2009-01-07T08:10:45+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"On porting WebPath to Python 3k | MicahLogic Queryopticon\" \/>\n\t\t<meta name=\"twitter:description\" content=\"I&#039;ve started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#article\",\"name\":\"On porting WebPath to Python 3k | MicahLogic Queryopticon\",\"headline\":\"On porting WebPath to Python 3k\",\"author\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\"},\"datePublished\":\"2009-01-07T01:08:26-07:00\",\"dateModified\":\"2009-01-07T01:10:45-07:00\",\"inLanguage\":\"en-US\",\"commentCount\":1,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#webpage\"},\"articleSection\":\"languages, python, 2to3, byte, exception, lex, parse, ply, porting, python, python3, python3k, string, webpath, xml\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/#listItem\",\"name\":\"software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/#listItem\",\"position\":2,\"name\":\"software\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/python\\\/#listItem\",\"name\":\"python\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/python\\\/#listItem\",\"position\":3,\"name\":\"python\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/python\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#listItem\",\"name\":\"On porting WebPath to Python 3k\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/#listItem\",\"name\":\"software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#listItem\",\"position\":4,\"name\":\"On porting WebPath to Python 3k\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/python\\\/#listItem\",\"name\":\"python\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\",\"name\":\"MicahLogic Queryopticon\",\"description\":\"Yields undecidable when preceded by its quotation\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"mdubinko\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c1160c0ab9ce581a55013f96fd61356e166ffc9a00666a5062bc8121922fcdcd?s=96&d=retro&r=g\",\"width\":96,\"height\":96,\"caption\":\"mdubinko\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#webpage\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/\",\"name\":\"On porting WebPath to Python 3k | MicahLogic Queryopticon\",\"description\":\"I've started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/01\\\/on-porting-webpath-to-python-3k\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2009-01-07T01:08:26-07:00\",\"dateModified\":\"2009-01-07T01:10:45-07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/\",\"name\":\"MicahLogic Queryopticon\",\"description\":\"Yields undecidable when preceded by its quotation\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"On porting WebPath to Python 3k | MicahLogic Queryopticon","description":"I've started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the","canonical_url":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#article","name":"On porting WebPath to Python 3k | MicahLogic Queryopticon","headline":"On porting WebPath to Python 3k","author":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/dubinko.info\/blog\/#organization"},"datePublished":"2009-01-07T01:08:26-07:00","dateModified":"2009-01-07T01:10:45-07:00","inLanguage":"en-US","commentCount":1,"mainEntityOfPage":{"@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#webpage"},"isPartOf":{"@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#webpage"},"articleSection":"languages, python, 2to3, byte, exception, lex, parse, ply, porting, python, python3, python3k, string, webpath, xml"},{"@type":"BreadcrumbList","@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog#listItem","position":1,"name":"Home","item":"https:\/\/dubinko.info\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/#listItem","name":"software"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/#listItem","position":2,"name":"software","item":"https:\/\/dubinko.info\/blog\/tags\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/python\/#listItem","name":"python"},"previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/python\/#listItem","position":3,"name":"python","item":"https:\/\/dubinko.info\/blog\/tags\/software\/python\/","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#listItem","name":"On porting WebPath to Python 3k"},"previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/#listItem","name":"software"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#listItem","position":4,"name":"On porting WebPath to Python 3k","previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/python\/#listItem","name":"python"}}]},{"@type":"Organization","@id":"https:\/\/dubinko.info\/blog\/#organization","name":"MicahLogic Queryopticon","description":"Yields undecidable when preceded by its quotation","url":"https:\/\/dubinko.info\/blog\/"},{"@type":"Person","@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author","url":"https:\/\/dubinko.info\/blog\/author\/admin\/","name":"mdubinko","image":{"@type":"ImageObject","@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/c1160c0ab9ce581a55013f96fd61356e166ffc9a00666a5062bc8121922fcdcd?s=96&d=retro&r=g","width":96,"height":96,"caption":"mdubinko"}},{"@type":"WebPage","@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#webpage","url":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/","name":"On porting WebPath to Python 3k | MicahLogic Queryopticon","description":"I've started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/dubinko.info\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/#breadcrumblist"},"author":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"datePublished":"2009-01-07T01:08:26-07:00","dateModified":"2009-01-07T01:10:45-07:00"},{"@type":"WebSite","@id":"https:\/\/dubinko.info\/blog\/#website","url":"https:\/\/dubinko.info\/blog\/","name":"MicahLogic Queryopticon","description":"Yields undecidable when preceded by its quotation","inLanguage":"en-US","publisher":{"@id":"https:\/\/dubinko.info\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"MicahLogic Queryopticon | Yields undecidable when preceded by its quotation","og:type":"article","og:title":"On porting WebPath to Python 3k | MicahLogic Queryopticon","og:description":"I've started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the","og:url":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/","article:published_time":"2009-01-07T08:08:26+00:00","article:modified_time":"2009-01-07T08:10:45+00:00","twitter:card":"summary","twitter:title":"On porting WebPath to Python 3k | MicahLogic Queryopticon","twitter:description":"I've started looking into porting the WebPath code (and eventually XForms Validator) over to Python 3. The first step is external libraries, of which there is only one. WebPath uses the lex.py module from PLY. I had got it into my head that Python 2.x and 3.x were thoroughly incompatible, but leave it to the"},"aioseo_meta_data":{"post_id":"416","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-02-04 08:08:15","updated":"2025-12-10 03:13:17","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\/tags\/software\/\" title=\"software\">software<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\/tags\/software\/python\/\" title=\"python\">python<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tOn porting WebPath to Python 3k\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/dubinko.info\/blog"},{"label":"software","link":"https:\/\/dubinko.info\/blog\/tags\/software\/"},{"label":"python","link":"https:\/\/dubinko.info\/blog\/tags\/software\/python\/"},{"label":"On porting WebPath to Python 3k","link":"https:\/\/dubinko.info\/blog\/2009\/01\/on-porting-webpath-to-python-3k\/"}],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8eo8l-6I","jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/comments?post=416"}],"version-history":[{"count":0,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/416\/revisions"}],"wp:attachment":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/media?parent=416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/categories?post=416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/tags?post=416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}