{"id":11609,"date":"2019-03-15T01:17:56","date_gmt":"2019-03-15T01:17:56","guid":{"rendered":"http:\/\/www.appservgrid.com\/paw92\/?p=11609"},"modified":"2019-03-15T01:17:56","modified_gmt":"2019-03-15T01:17:56","slug":"20-practical-python-libraries-for-every-python-programmer","status":"publish","type":"post","link":"https:\/\/www.appservgrid.com\/paw92\/index.php\/2019\/03\/15\/20-practical-python-libraries-for-every-python-programmer\/","title":{"rendered":"20 practical Python libraries for every Python programmer"},"content":{"rendered":"<h3>Web apps, web crawling, database access, GUI creation, parsing, image processing, and lots more\u2014these handy tools have you covered.<\/h3>\n<div class=\"lede-container\">\n<figure class=\"hero-img\"><img decoding=\"async\" src=\"https:\/\/images.techhive.com\/images\/article\/2015\/09\/library-100616524-large.jpg\" alt=\"20 practical Python libraries for every Python programmer\" \/><figcaption data-kiosked-context-name=\"kskdUIContext_9a76c0a45900a07171936267313aa46a\"><span class=\"credit\"><span class=\"credit\"><br \/>\n<\/span><\/span>Want a good reason for the smashing success of the Python programming language? Look no further than the massive collection of libraries available for Python, both native and third-party libraries. With so many Python libraries out there, though, it\u2019s no surprise that some don\u2019t get all the attention they deserve. Plus, programmers who work exclusively in one domain don\u2019t always know about the goodies available to them for other kinds of work.Here are 20 Python libraries you may have overlooked but are definitely worth your attention. These gems run the gamut of usefulness, simplifying everything from file system access, database programming, and working with cloud services to building lightweight web apps, creating GUIs, and working with images, ebooks, and Word files\u2014and much more besides. Some are well-known, others lesser-known, but all of these Python libraries deserve a place in your toolbox.<\/p>\n<div class=\"connatix\">\n<div id=\"cnx-video-image\">\n<div class=\"cnx-video-content\">\n<div class=\"resize-triggers\">\n<div class=\"contract-trigger\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<aside class=\"fakesidebar\"><strong>[ So, just\u00a0<a href=\"https:\/\/www.infoworld.com\/article\/3267565\/what-is-github-more-than-git-version-control-in-the-cloud.html\">what is GitHub<\/a>, exactly? \u2022 GitHub tutorial:\u00a0<a href=\"https:\/\/www.infoworld.com\/article\/3257671\/github-tutorial-get-started-with-github.html\">Get started with GitHub<\/a>. \u2022\u00a0<a href=\"https:\/\/www.infoworld.com\/resources\/61873\/application-development\/quick-guide-20-tips-and-tricks-git-github-users\">20 essential pointers for Git and GitHub<\/a>. \u2022\u00a0<a href=\"https:\/\/www.infoworld.com\/cms\/article\/https:\/www.infoworld.com\/article\/3263904\/whats-new-in-githubs-atom-text-editor.html\" rel=\"nofollow\">What\u2019s new in GitHub\u2019s Atom text editor<\/a>. | Keep up with hot topics in programming with InfoWorld\u2019s\u00a0<a href=\"https:\/\/www.infoworld.com\/newsletters\/signup.html\">App Dev Report newsletter<\/a>. ]<\/strong><\/aside>\n<h2><strong>Apache Libcloud<\/strong><\/h2>\n<p><strong>What Libcloud does:<\/strong>\u00a0Access multiple cloud providers through a single, consistent, unified API.<\/p>\n<p><strong>Why use Libcloud:<\/strong>\u00a0If the above description of\u00a0<a href=\"http:\/\/libcloud.apache.org\/\" rel=\"nofollow\">Apache Libcloud<\/a>\u00a0doesn\u2019t make you clap your hands for joy, then you haven\u2019t tried working with multiple clouds. Cloud providers all love to do things their way, making a unified mechanism for dealing with\u00a0<a href=\"https:\/\/libcloud.readthedocs.org\/en\/latest\/supported_providers.html\" rel=\"nofollow\">dozens of providers<\/a>\u00a0a huge timesaver and headache-soother. APIs are available for compute, storage, load balancing, and DNS, with support for Python 2.x and Python 3.x as well as PyPy, the performance-boosting JIT compiler for Python.<\/p>\n<h2><strong>Arrow<\/strong><\/h2>\n<p><strong>What Arrow does:<\/strong>\u00a0Cleaner handling of dates and times in Python.<\/p>\n<p><strong>Why use Arrow:<\/strong>\u00a0Dealing with time zones, date conversions, date formats, and all the rest is already a headache and a half. Throw in Python\u2019s standard library for date\/time work, and you get two headaches and a half.<\/p>\n<aside id=\"\" class=\"nativo-promo nativo-promo-1 smartphone\"><\/aside>\n<p><a href=\"https:\/\/github.com\/crsmithdev\/arrow\" rel=\"nofollow\">Arrow\u00a0<\/a>provides four big advantages. One, Arrow is a drop-in replacement for Python\u2019s datetime module, meaning that common function calls like\u00a0<code>.now()<\/code>\u00a0and\u00a0<code>.utcnow()<\/code>\u00a0work as expected. Two, Arrow provides methods for common needs like shifting and converting time zones. Three, Arrow provides \u201chumanized\u201d date\/time information\u2014such as being able to say something happened \u201can hour ago\u201d or will happen \u201cin two hours\u201d without much effort. Four, Arrow can localize date\/time information without breaking a sweat.<\/p>\n<p><strong><span style=\"color: #666666; font-size: 1.25rem;\">Behold<\/span><\/strong><\/p>\n<p><strong>What Behold does:<\/strong>\u00a0Robust support for print-style debugging in Python.<\/p>\n<p><strong>Why use Behold:<\/strong>\u00a0There is one simple way to debug in Python, or almost any programming language for that matter: Insert in-line\u00a0<code>print<\/code>\u00a0statements. But while print-debugging is a no-brainer in small programs, it\u2019s not so easy to get useful results within large, sprawling, multi-module projects.<\/p>\n<p><a href=\"https:\/\/github.com\/robdmc\/behold\" rel=\"nofollow\">Behold<\/a>\u00a0provides a toolkit for contextual debugging via print statements. It allows you to impose a uniform look on the output, tag the results so they can be sorted via searches or filters, and provide contexts across modules so that functions that originate in one module can be debugged properly in another. Behold handles many common Python-specific scenarios like printing an object\u2019s internal dictionary, unveiling nested attributes, and storing and reusing results for comparison at other points during the debugging process.<\/p>\n<h2><strong>Bottle<\/strong><\/h2>\n<p><strong>What Bottle does:<\/strong>\u00a0Lightweight and\u00a0<a href=\"https:\/\/klen.github.io\/py-frameworks-bench\/\" rel=\"nofollow\">fast\u00a0<\/a>web apps.<\/p>\n<p><strong>Why use Bottle:\u00a0<\/strong>When you want to throw together a quick RESTful API or use the bare bones of a web framework to build an app, capable yet tiny\u00a0<a href=\"http:\/\/bottlepy.org\/\" rel=\"nofollow\">Bottle<\/a>\u00a0gives you no more than you need. Routing, templates, access to request and response data, support for multiple server types from plain old CGI on up, and support for more advanced features like WebSockets\u2014it\u2019s all here. The amount of work needed to get started is likewise minimal, and Bottle\u2019s design is elegantly extensible when more advanced functions are needed.<strong>\u00a0<\/strong><\/p>\n<h2><strong>EbookLib<\/strong><\/h2>\n<p><strong>What EbookLib does:<\/strong>\u00a0Read and write .epub files.<\/p>\n<p><strong>Why use EbookLib:\u00a0<\/strong>Creating ebooks typically requires wrangling one command-line tool or another.\u00a0<a href=\"https:\/\/github.com\/aerkalov\/ebooklib\/\" rel=\"nofollow\">EbookLib<\/a>\u00a0provides management tools and APIs that simplify the process. It works with EPUB 2 and EPUB 3 files, with Kindle support under development.<\/p>\n<p>Provide the images and the text (the latter in HTML format), and EbookLib can assemble those pieces into an ebook complete with chapters, nested table of contents, images, HTML markup, and so on. Cover, spine, and stylesheet data are all supported, too. A plug-in system allows third parties to extend the library\u2019s behaviors.<\/p>\n<p>If you don\u2019t need everything EbookLib has to offer, try\u00a0<a href=\"https:\/\/github.com\/anqxyr\/mkepub\" rel=\"nofollow\">Mkepub<\/a>. Mkepub packs basic ebook assembly functionality in a library that is only a few kilobytes in size.\u00a0One minor drawback of Mkepub is that it requires Jinja2, which in turn requires the\u00a0<a href=\"http:\/\/www.lfd.uci.edu\/~gohlke\/pythonlibs\/#markupsafe\" rel=\"nofollow\">MarkupSafe<\/a>\u00a0library.<\/p>\n<h2><strong>Gooey<\/strong><\/h2>\n<p><strong>What Gooey does:<\/strong><strong>\u00a0<\/strong>Give a console-based Python program a platform-native GUI.<\/p>\n<p><strong>Why use Gooey:<\/strong><strong>\u00a0<\/strong>Presenting users, especially rank-and-file users, with a command-line interface is among the best ways to discourage use of your application. Few apart from the hardcore geek like figuring out what options to pass in and in what order.\u00a0<a href=\"https:\/\/github.com\/chriskiehl\/Gooey\" rel=\"nofollow\">Gooey<\/a>\u00a0takes arguments expected by the\u00a0<a href=\"https:\/\/docs.python.org\/2\/library\/argparse.html\" rel=\"nofollow\">argparse<\/a>\u00a0library and presents them to users as a GUI form, by way of the WxPython library. All options are\u00a0labeled and displayed with appropriate controls (such as a drop-down for a multi-option argument). Very little additional coding\u2014a single include and a single decorator\u2014is needed to make it work, assuming you\u2019re already using argparse.<\/p>\n<h2><strong>Invoke<\/strong><\/h2>\n<p><strong>What Invoke does:\u00a0<\/strong>\u201dPythonic remote execution\u201d \u2013 i.e., perform admin tasks using a Python library.<\/p>\n<p><strong>Why use Invoke:<\/strong>\u00a0Using Python as a replacement for common shell scripting tasks makes a world of sense.\u00a0<a href=\"http:\/\/www.pyinvoke.org\/\" rel=\"nofollow\">Invoke<\/a>\u00a0provides a high-level API for running shell commands and managing command-line tasks as if they were Python functions, allowing you to embed those tasks in your own code or elegantly build around them.<\/p>\n<h2><strong>Nuitka<\/strong><\/h2>\n<p><strong>What Nuitka does:\u00a0<\/strong>Compile Python into self-contained\u00a0C executables.<\/p>\n<p><strong>Why use Nuitka:<\/strong>\u00a0Like\u00a0<a href=\"https:\/\/www.infoworld.com\/article\/3250299\/what-is-cython-python-at-the-speed-of-c.html\">Cython<\/a>,\u00a0<a href=\"https:\/\/nuitka.net\/pages\/overview.html\" rel=\"nofollow\">Nuitka\u00a0<\/a>compiles Python into C. However, whereas Cython requires\u00a0its own custom syntax for best results, and focuses mainly on math and statistics applications, Nuitka works with any Python program as-is, compiles it into C, and produces a single-file executable, applying optimizations where it can along the way. Nuitka is still in its early stages, and many of the planned optimizations are still to come. Nevertheless, it\u2019s a convenient way to turn a Python script\u00a0into a speedy command-line app.<\/p>\n<h2><strong>Numba<\/strong><\/h2>\n<p><strong>What Numba does:\u00a0<\/strong>Selectively speed up math-intensive functions.<\/p>\n<p><strong>Why use Numba:\u00a0<\/strong>The Python world includes a whole subculture of packages for accelerating math operations. For example, NumPy works by\u00a0wrapping high-speed C libraries in a Python interface, and Cython compiles Python to C with optional typing for accelerated performance. But\u00a0<a href=\"http:\/\/numba.pydata.org\/\" rel=\"nofollow\">Numba<\/a>\u00a0is easily the most convenient, as it allows Python functions to be selectively accelerated\u00a0with nothing more than a decorator. For further speed boosts, you can\u00a0use common Python idioms to parallelize workloads, or\u00a0use SIMD or GPU instructions. Note that you can use NumPy with Numba, but in many cases Numba will outperform NumPy many times over.<\/p>\n<h2><strong>Peewee<\/strong><\/h2>\n<p><strong>What Peewee does:<\/strong><strong>\u00a0<\/strong>A tiny ORM (object-relational mapper) that supports SQLite, MySQL, and PostgreSQL, with many extensions.<\/p>\n<p><strong>Why use Peewee:<\/strong><strong>\u00a0<\/strong>Not everyone loves an ORM; some would rather leave schema modeling on the database side and be done with it. But for developers who don\u2019t want to touch databases, a well-constructed, unobtrusive ORM can be a godsend. And for developers who don\u2019t want an ORM as full-blown as\u00a0<a href=\"http:\/\/www.sqlalchemy.org\/\" rel=\"nofollow\">SQL Alchemy<\/a>,\u00a0<a href=\"https:\/\/github.com\/coleifer\/peewee\" rel=\"nofollow\">Peewee<\/a>\u00a0is a great fit.<\/p>\n<p>Peewee models are easy to construct, connect, and manipulate. Plus, many common query-manipulation functions, such as pagination, are built right in. More features are available as\u00a0<a href=\"http:\/\/docs.peewee-orm.com\/en\/latest\/peewee\/playhouse.html\" rel=\"nofollow\">add-ons<\/a>\u00a0including extensions for other databases, testing tools, and a schema migration system\u2014a feature even an ORM hater could learn to love. Note that the Peewee 3.x branch (the recommended edition)\u00a0is not completely\u00a0backward-compatible with previous versions of Peewee.<\/p>\n<h2><strong>Pillow<\/strong><\/h2>\n<p><strong>What Pillow does:<\/strong><strong>\u00a0<\/strong>Image processing without the pain.<\/p>\n<p><strong>Why use Pillow:<\/strong><strong>\u00a0<\/strong>Most Pythonistas who have performed image processing ought to be familiar with PIL (Python Imaging Library), but PIL is riddled with shortcomings and limitations, and it\u2019s updated infrequently.\u00a0<a href=\"http:\/\/python-pillow.github.io\/\" rel=\"nofollow\">Pillow<\/a>aims to be both easier to use\u00a0<em>and<\/em>\u00a0code-compatible with PIL via minimal changes. Extensions are included for talking to both native Windows imaging functions and Python\u2019s Tcl\/Tk-backed Tkinter GUI package. Pillow is available through\u00a0<a href=\"https:\/\/github.com\/python-pillow\/Pillow\" rel=\"nofollow\">GitHub<\/a>\u00a0or the\u00a0<a href=\"https:\/\/pypi.org\/project\/Pillow\/\" rel=\"nofollow\">PyPI<\/a>\u00a0repository.<\/p>\n<h2><strong>PyFilesystem<\/strong><\/h2>\n<p><strong>What PyFilesystem does:<\/strong>\u00a0A Pythonic interface to any file system \u2014\u00a0<em>any<\/em>\u00a0file system.<\/p>\n<p><strong>Why use PyFilesystem:\u00a0<\/strong>The fundamental idea behind\u00a0<a href=\"https:\/\/github.com\/PyFilesystem\/pyfilesystem2\" rel=\"nofollow\">PyFilesystem<\/a>\u00a0couldn\u2019t be simpler: Just as Python\u2019s\u00a0<strong>file<\/strong>\u00a0objects abstract a single file, PyFilesystem\u2019s\u00a0<strong>FS<\/strong>\u00a0objects abstract an entire file system. This doesn\u2019t mean only on-disk file systems, either. PyFilesystem also supports FTP directories, in-memory files ystems, file systems for locations defined by the OS (such as the user directory), and even combinations of the above overlaid onto each other.<\/p>\n<p>In addition to making it easier to write cross-platform code that manipulates files, PyFilesystem obviates the need to cobble together scripts from disparate parts of the standard library, mainly\u00a0os\u00a0and\u00a0io.\u00a0It\u00a0also provides utilities that one might otherwise need to create from scratch, like a tool for printing console-friendly tree views of a file system.<\/p>\n<h2><strong>Pygame<\/strong><\/h2>\n<p><strong>What Pygame does:<\/strong><strong>\u00a0<\/strong>Create video games, or game-quality front-ends, in Python.<\/p>\n<p><strong>Why use Pygame:<\/strong><strong>\u00a0<\/strong>If you think anyone outside of the game development world would ever bother with such a framework, think again.\u00a0<a href=\"http:\/\/pygame.org\/\" rel=\"nofollow\">Pygame<\/a>\u00a0is a handy way to work with many GUI-oriented behaviors that might otherwise demand a lot of heavy lifting: drawing canvas and sprite graphics, dealing with multichannel sound, handling windows and click events, detecting collisions, and so on. Not every app\u2014or even every GUI app\u2014will benefit from being built with Pygame, but you ought to take a close look at what Pygame provides. You might be surprised!<\/p>\n<h2><strong>Pyglet<\/strong><\/h2>\n<p><strong>What Pyglet does:<\/strong>\u00a0Cross-platform multimedia and window graphics in pure Python.<\/p>\n<p><strong>Why use Pyglet:<\/strong>\u00a0<a href=\"https:\/\/bitbucket.org\/pyglet\/pyglet\/wiki\/Home\" rel=\"nofollow\">Pyglet\u00a0<\/a>provides handy access to items that are tedious to implement from scratch for a GUI application: window functions, OpenGL graphics, audio and video playback, keyboard and mouse handling, and working with image files. Note that Pyglet doesn\u2019t provide UI widgets like buttons, toolbars, or menus, though.<\/p>\n<p>All of this is done through the native platform capabilities in\u00a0Windows, OS X, or Linux, so there are no binary dependencies; Pyglet is pure Python. It\u2019s also BSD-licensed, so it can be included in any commercial or open source project.<\/p>\n<h2><strong>PyInstaller<\/strong><\/h2>\n<p><strong>What PyInstaller does:\u00a0<\/strong>Package a Python script as a stand-alone executable.<\/p>\n<p><strong>Why use PyInstaller:\u00a0<\/strong>A common complaint with Python is that it\u2019s harder than it ought to be to distribute a script to other users.\u00a0<a href=\"https:\/\/www.pyinstaller.org\/\" rel=\"nofollow\">PyInstaller<\/a>\u00a0lets you package any Python script\u2014even scripts that include complex third-party modules with binaries, like NumPy\u2014and distribute it as a single-folder or single-file application. PyInstaller tends to pack more into that folder or file than is really needed, so the final results can be bulky. But that tendency can be overcome with practice, and the sheer convenience PyInstaller provides is hard to beat.<\/p>\n<h2><strong>PySimpleGUI<\/strong><\/h2>\n<p><strong>What PySimpleGUI does:\u00a0<\/strong>Creating GUIs in Python with a minimum of fuss.<\/p>\n<p><strong>Why use PySimpleGUI:\u00a0<\/strong>Python ships with the Tkinter library for creating GUIs, but Tkinter is not known for being easy to work with.\u00a0<a href=\"https:\/\/github.com\/MikeTheWatchGuy\/PySimpleGUI\" rel=\"nofollow\">PySimpleGUI<\/a>\u00a0wraps Tkinter with APIs that are far less exasperating. Many common effects, like a simple dialog box or pop-up menu, can be accomplished in a single line of code. The interfaces still have Tkinter\u2019s trademark look, though. If you want a more sophisticated look and feel you\u2019ll need to look elsewhere.<\/p>\n<h2><strong>Python-docx<\/strong><\/h2>\n<p><strong>What Python-docx does:<\/strong>\u00a0Programmatically manipulate Microsoft Word .docx files.<\/p>\n<p><strong>Why use Python-docx:<\/strong>\u00a0In theory, it should be easy to write scripts that create and update XML-style Microsoft Word documents. In practice, it is far from simple, due to all of the internal complexities of the .docx format.\u00a0<a href=\"https:\/\/github.com\/python-openxml\/python-docx\" rel=\"nofollow\">Python-docx<\/a>\u00a0lets you do an end run around all of those complexities, by providing a high-level API for working with .docx files.<\/p>\n<p>Python-docx lets you add or change text, images, tables, styles, document sections, and headers and footers. The library allows you to create new documents or change existing documents. Python-docx is a great way to pull raw text from Word files, or to avoid dealing with Word\u2019s own built-in automation functions.<\/p>\n<h2><strong>Scrapy<\/strong><\/h2>\n<p><strong>What Scrapy does:<\/strong><strong>\u00a0<\/strong>Screen scraping and web crawling.<\/p>\n<p><strong>Why use Scrapy:<\/strong><strong>\u00a0<\/strong><a href=\"http:\/\/scrapy.org\/\" rel=\"nofollow\">Scrapy<\/a>\u00a0makes scraping simple. Create a class that defines the items you want scraped and write some rules to extract that data from the page. The results can be exported as JSON, XML, CSV, or any number of other formats. The collected data can be saved raw or sanitized as it is imported.<\/p>\n<p>Scrapy can be extended to handle many other tasks, such as logging into a website and handling session cookies. Images, too, can be scraped up by Scrapy and associated with the captured content. The latest versions add direct connections to cloud services for storing scraped data,\u00a0re-usable proxy connections,\u00a0and better handling of esoteric HTML and HTTP behaviors.<\/p>\n<h2><strong>Sh<\/strong><\/h2>\n<p><strong>What Sh does:<\/strong><strong>\u00a0<\/strong>Call any external program, in a subprocess, and return the results to a Python program\u2014using the same syntax as if the program in question were a native Python function.<\/p>\n<div class=\"connatix\">\n<div id=\"cnx-video-image\">\n<div class=\"cnx-video-content\">\n<div class=\"resize-triggers\">\n<div class=\"contract-trigger\"><strong style=\"font-size: 1rem;\">Why use Sh:<\/strong><strong style=\"font-size: 1rem;\">\u00a0<\/strong><span style=\"font-size: 1rem;\">On any POSIX-compliant system,\u00a0<\/span><a style=\"font-size: 1rem;\" href=\"https:\/\/github.com\/amoffat\/sh\" rel=\"nofollow\">Sh<\/a><span style=\"font-size: 1rem;\">\u00a0is a godsend, allowing any command-line program available on that system to be used Pythonically. Not only are you freed from having to reinvent the wheel (why implement\u00a0<\/span><code>ping<\/code><span style=\"font-size: 1rem;\">\u00a0when it\u2019s right there in the OS?), but you no longer have to struggle with adding that functionality elegantly to your application. However, be forewarned: Sh provides\u00a0<\/span><em style=\"font-size: 1rem;\">no<\/em><span style=\"font-size: 1rem;\">\u00a0sanitization of the parameters that are passed through. Be sure never to pass along raw user input.<\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h2><strong>Splinter<\/strong><\/h2>\n<p><strong>What Splinter does:<\/strong>\u00a0Test web applications by automating browser actions.<\/p>\n<p><strong>Why you need it:\u00a0<\/strong>Let\u2019s face it, trying to automate web application testing is no one\u2019s idea of fun.\u00a0<a href=\"https:\/\/splinter.readthedocs.io\/en\/latest\/index.html\" rel=\"nofollow\">Splinter\u00a0<\/a>eliminates the low-level grunt work, invoking the browser, passing URLs, filling out forms, clicking buttons, and so on, automating the whole process from end to end.<\/p>\n<p>Splinter provides drivers to work with Chrome and Firefox, and it can use Selenium Remote\u00a0to control a browser running elsewhere. You can even manually execute JavaScript in the target browser.<\/p>\n<p><a style=\"font-size: 1rem;\" href=\"https:\/\/www.infoworld.com\/article\/3008915\/20-practical-python-libraries-for-every-python-programmer.html\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/p>\n<\/figcaption><\/figure>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Web apps, web crawling, database access, GUI creation, parsing, image processing, and lots more\u2014these handy tools have you covered. Want a good reason for the smashing success of the Python programming language? Look no further than the massive collection of libraries available for Python, both native and third-party libraries. With so many Python libraries out &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.appservgrid.com\/paw92\/index.php\/2019\/03\/15\/20-practical-python-libraries-for-every-python-programmer\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;20 practical Python libraries for every Python programmer&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-11609","post","type-post","status-publish","format-standard","hentry","category-linux"],"_links":{"self":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/11609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/comments?post=11609"}],"version-history":[{"count":1,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/11609\/revisions"}],"predecessor-version":[{"id":11610,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/posts\/11609\/revisions\/11610"}],"wp:attachment":[{"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/media?parent=11609"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/categories?post=11609"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appservgrid.com\/paw92\/index.php\/wp-json\/wp\/v2\/tags?post=11609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}