{"id":1097,"date":"2013-08-15T02:05:03","date_gmt":"2013-08-15T02:05:03","guid":{"rendered":"http:\/\/blog.filipesaraiva.info\/?p=1097"},"modified":"2013-12-28T17:21:34","modified_gmt":"2013-12-28T17:21:34","slug":"cantor-dynamic-keywords-in-python-backend","status":"publish","type":"post","link":"https:\/\/filipe.saraiva.tec.br\/blog\/?p=1097","title":{"rendered":"Cantor &#8211; dynamic keywords in python backend"},"content":{"rendered":"<p style=\"text-align: justify;\">In <a href=\"http:\/\/blog.filipesaraiva.info\/?p=1086\" target=\"_blank\">previous post<\/a>, I mentioned about dynamic keywords in python backend. The idea is, after import a python module in Cantor workspace, functions, keywords, variables, and more from this module are load by Cantor and available to syntax highlighting and tab complete.<\/p>\n<p style=\"text-align: justify;\">This feature is implemented for now. You can test it compiling Cantor from <a href=\"https:\/\/projects.kde.org\/projects\/kde\/kdeedu\/cantor\/repository\/show?rev=python-backend\" target=\"_blank\">python-backend branch<\/a>.<\/p>\n<p style=\"text-align: justify;\">But, let me show more information about this feature.<\/p>\n<p style=\"text-align: justify;\">There are several ways to import a python module in python console. You have &#8220;import modulename&#8221;, &#8220;import modulename as modulevariable&#8221;, &#8220;from modulename import *&#8221;, &#8220;from modulename import function_1, function_2, &#8230;&#8221;, and more. Each import way causes different consequences to user experience.<\/p>\n<p style=\"text-align: justify;\">The four import ways mentioned in previous paragraph are supported by python backend. I will show these different import ways and how python backend behave for each one.<\/p>\n<p style=\"text-align: justify;\"><strong>import modulename<\/strong><\/p>\n<p style=\"text-align: justify;\"><strong><\/strong>The more basic import way. After this command, a variable named &#8220;modulename&#8221; is defined and the functions and more keywords of this module are available to access using &#8220;modulename.keyword&#8221;.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1104\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1104\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_import_modulename\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename-1024x575.png\" class=\"aligncenter size-large wp-image-1104\" alt=\"python_import_modulename\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><em>Tab Complete<\/em><em><\/em><\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename_highlighting.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1107\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1107\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_highlighting.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_import_modulename_highlighting\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_highlighting-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_highlighting-1024x575.png\" class=\"aligncenter size-large wp-image-1107\" alt=\"python_import_modulename_highlighting\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename_highlighting-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Syntax Highlighting<\/em><\/p>\n<p style=\"text-align: justify;\"><strong>import modulename as modulevariable<\/strong><\/p>\n<p style=\"text-align: justify;\">This way the user define a name &#8220;modulevariable&#8221; to reference &#8220;modulename&#8221;, and &#8220;modulename&#8221; is not defined. So, you can access the functions and more from &#8220;modulename&#8221; using &#8220;modulevariable.keyword&#8221;.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1105\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1105\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_import_modulename_as_modulevariable\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable-1024x575.png\" class=\"aligncenter size-large wp-image-1105\" alt=\"python_import_modulename_as_modulevariable\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Tab Complete<\/em><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable_highlithing.png\"> <img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1106\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1106\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable_highlithing.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_import_modulename_as_modulevariable_highlithing\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable_highlithing-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable_highlithing-1024x575.png\" class=\"aligncenter size-large wp-image-1106\" alt=\"python_import_modulename_as_modulevariable_highlithing\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_modulename_as_modulevariable_highlithing-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Syntax Highlighting<\/em><\/p>\n<p style=\"text-align: justify;\"><strong>from modulename import *<\/strong><\/p>\n<p style=\"text-align: justify;\">This way the user import all functions and keywords from &#8220;modulename&#8221; but anything variable is defined to access &#8220;modulename&#8221;. The functions of the module are accessed directly.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1098\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1098\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_from_modulename_import_all\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all-1024x575.png\" class=\"aligncenter size-large wp-image-1098\" alt=\"python_from_modulename_import_all\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Tab Complete<\/em><\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all_highlithing.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1099\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1099\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all_highlithing.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_from_modulename_import_all_highlithing\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all_highlithing-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all_highlithing-1024x575.png\" class=\"aligncenter size-large wp-image-1099\" alt=\"python_from_modulename_import_all_highlithing\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_all_highlithing-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Syntax Highlighting<\/em><\/p>\n<p style=\"text-align: justify;\"><strong>from modulename import function_1, function_2, &#8230;<\/strong><\/p>\n<p style=\"text-align: justify;\">The user import only specific functions from a &#8220;modulename&#8221;, no all functions.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1100\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1100\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_from_modulename_import_specific\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific-1024x575.png\" class=\"aligncenter size-large wp-image-1100\" alt=\"python_from_modulename_import_specific\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Tab Complete<\/em><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific_highlithing.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1101\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1101\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific_highlithing.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_from_modulename_import_specific_highlithing\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific_highlithing-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific_highlithing-1024x575.png\" class=\"aligncenter size-large wp-image-1101\" alt=\"python_from_modulename_import_specific_highlithing\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_from_modulename_import_specific_highlithing-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><em><\/em><\/p>\n<p style=\"text-align: center;\"><em>Syntax Highlighting<\/em><\/p>\n<p style=\"text-align: justify;\"><strong>Cantor plugin<\/strong><\/p>\n<p style=\"text-align: justify;\">I developed a Cantor plugin to import modules. This plugin open a dialog to user enter a modulename and, after press Ok, Cantor run &#8220;import modulename&#8221; and keywords are available. The diaglog is accessible by &#8220;Packaging&#8221; menu, in toolbar.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_cantor_plugin.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1102\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1102\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_cantor_plugin.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_import_cantor_plugin\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_cantor_plugin-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_cantor_plugin-1024x575.png\" class=\"aligncenter size-large wp-image-1102\" alt=\"python_import_cantor_plugin\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_cantor_plugin-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><em><\/em><\/p>\n<p style=\"text-align: center;\"><em>Cantor Plugin<\/em><\/p>\n<p style=\"text-align: justify;\"><strong>Handling Errors<\/strong><\/p>\n<p style=\"text-align: justify;\">The backend can identify several errors during import.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_errors.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1103\" data-permalink=\"https:\/\/filipe.saraiva.tec.br\/blog\/?attachment_id=1103\" data-orig-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_errors.png\" data-orig-size=\"1366,768\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"python_import_errors\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_errors-300x168.png\" data-large-file=\"https:\/\/filipe.saraiva.tec.br\/blog\/wp-content\/uploads\/2013\/08\/python_import_errors-1024x575.png\" class=\"aligncenter size-large wp-image-1103\" alt=\"python_import_errors\" src=\"http:\/\/blog.filipesaraiva.info\/wp-content\/uploads\/2013\/08\/python_import_errors-1024x575.png\" width=\"698\" height=\"375\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><em>Handling Errors<\/em><\/p>\n<p style=\"text-align: justify;\"><strong>Conclusions<\/strong><\/p>\n<p style=\"text-align: justify;\">Well, the feature is working and it is mature for use, however it don&#8217;t support all import ways in python. But, I think these five ways cover the most commons import ways used by most python scientific users.<\/p>\n<p style=\"text-align: justify;\">The important thing is, this feature enable python backend to support the several python modules, and no only scipy, numpy, and matplotlib, as<a href=\"http:\/\/blog.filipesaraiva.info\/?p=1083\" target=\"_blank\"> I proposed<\/a> in begin of this project.<\/p>\n<p style=\"text-align: justify;\">Let me know how you import a module in python. I will develop support to more import ways in future versions of the backend.<\/p>\n<p style=\"text-align: justify;\">For now, wait for more news of this project soon!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In previous post, I mentioned about dynamic keywords in python backend. The idea is, after import a python module in Cantor workspace, functions, keywords, variables, and more from this module are load by Cantor and available to syntax highlighting and tab complete. This feature is implemented for now. You can test it compiling Cantor from&hellip;&nbsp;<a href=\"https:\/\/filipe.saraiva.tec.br\/blog\/?p=1097\" class=\"\" rel=\"bookmark\">Continue a ler &raquo;<span class=\"screen-reader-text\">Cantor &#8211; dynamic keywords in python backend<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[58,48,11,47,101,26,51,109,104,41,52,108,80],"class_list":["post-1097","post","type-post","status-publish","format-standard","hentry","category-software-livre","tag-cantor","tag-comunidade","tag-desenvolvimento","tag-gsoc","tag-gsoc2013-python-backend","tag-kde","tag-planet-mageia-english","tag-planet-python","tag-planet-scipy","tag-planeta-psl-pi","tag-planetkde-english","tag-python","tag-python-backend"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1p2Jh-hH","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1097"}],"version-history":[{"count":2,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1097\/revisions"}],"predecessor-version":[{"id":1109,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1097\/revisions\/1109"}],"wp:attachment":[{"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/filipe.saraiva.tec.br\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}