$NetBSD: patch-library_grt_src_grtpp__shell__python__help.cpp,v 1.1 2013/03/03 04:54:26 joerg Exp $ --- library/grt/src/grtpp_shell_python_help.cpp.orig 2013-02-28 22:36:13.000000000 +0000 +++ library/grt/src/grtpp_shell_python_help.cpp @@ -36,149 +36,149 @@ struct HelpTopic static HelpTopic help_topics[]= { {"grt", -" GRT (Generic RunTime) is internal system used by Workbench to hold model"NL -"document data and allow plugins and modules to interface between each other,"NL -"with the Workbench application and the model."NL -" Workbench model data (diagrams, schemas, tables etc) is stored in a hierarchy"NL -"of objects that can be accessed by any plugin. To allow that, the data is"NL -"represented in 6 different datatypes that can be accessed from any language"NL -"supported: integers, doubles, strings, dicts, lists and objects."NL -" When working from Python, simple data types (integers, doubles and strings) are"NL -"seen as normal Python values of the corresponding type."NL -" Lists and dicts are kept in their internal representation but can be mostly"NL -"treated as Python lists and dicts, meaning you can index lists and get items from"NL -"dicts with the usual Python syntax (ie aList[0], len(aList), aDict['key'] etc)."NL -" Objects contain data fields and methods, but the GRT only recognizes objects"NL -"from a pre-registered class hierarchy. You can see the list of existing classes in"NL -"the 'grt' module in the 'classes' list or in the Classes tab in the Scripting Shell"NL -"window."NL -" Workbench document data is kept in a tree-like structure that you can access and"NL -"modify from Python. However, it is easy to corrupt a document beyond repair, so be"NL -"careful when modifying the GRT tree for models and always make backups. Read-only"NL -"access to the tree is safe and sufficient for many purposes."NL -NL -" In Python, the GRT tree root node can be accessed as grt.root"NL -" Some examples of nodes that can be of interest:"NL -NL -" grt.root.wb.doc.physicalModels[0].catalog.schemata"NL -" list of schemas in the open model"NL -" grt.root.wb.doc.physicalModels[0].diagrams"NL -" list of diagrams in the model"NL -" grt.root.wb.options"NL -" Workbench options and other state data"NL -NL -" While you cannot create new classes in the GRT from Python, you can create"NL -"modules and plugins that are usable from other Workbench parts, including from"NL -"other languages. See the corresponding help topics for more information about"NL -"calling and writing your own modules."NL +" GRT (Generic RunTime) is internal system used by Workbench to hold model" NL +"document data and allow plugins and modules to interface between each other," NL +"with the Workbench application and the model." NL +" Workbench model data (diagrams, schemas, tables etc) is stored in a hierarchy" NL +"of objects that can be accessed by any plugin. To allow that, the data is" NL +"represented in 6 different datatypes that can be accessed from any language" NL +"supported: integers, doubles, strings, dicts, lists and objects." NL +" When working from Python, simple data types (integers, doubles and strings) are" NL +"seen as normal Python values of the corresponding type." NL +" Lists and dicts are kept in their internal representation but can be mostly" NL +"treated as Python lists and dicts, meaning you can index lists and get items from" NL +"dicts with the usual Python syntax (ie aList[0], len(aList), aDict['key'] etc)." NL +" Objects contain data fields and methods, but the GRT only recognizes objects" NL +"from a pre-registered class hierarchy. You can see the list of existing classes in" NL +"the 'grt' module in the 'classes' list or in the Classes tab in the Scripting Shell" NL +"window." NL +" Workbench document data is kept in a tree-like structure that you can access and" NL +"modify from Python. However, it is easy to corrupt a document beyond repair, so be" NL +"careful when modifying the GRT tree for models and always make backups. Read-only" NL +"access to the tree is safe and sufficient for many purposes." NL +NL +" In Python, the GRT tree root node can be accessed as grt.root" NL +" Some examples of nodes that can be of interest:" NL +NL +" grt.root.wb.doc.physicalModels[0].catalog.schemata" NL +" list of schemas in the open model" NL +" grt.root.wb.doc.physicalModels[0].diagrams" NL +" list of diagrams in the model" NL +" grt.root.wb.options" NL +" Workbench options and other state data" NL +NL +" While you cannot create new classes in the GRT from Python, you can create" NL +"modules and plugins that are usable from other Workbench parts, including from" NL +"other languages. See the corresponding help topics for more information about" NL +"calling and writing your own modules." NL NL -" For practical tips and examples on how to write scripts, see 'scripting'."NL -" For more information about GRT Objects, see 'objects'"NL +" For practical tips and examples on how to write scripts, see 'scripting'." NL +" For more information about GRT Objects, see 'objects'" NL NL }, {"objects", "" }, {"scripting", -" To execute a Python script against the loaded model, you can simply input it"NL -"in the Scripting Shell entry box. For doing quick tests and exploring it will be"NL -"the quickest way. If you have a script file you want to execute, you can execute"NL -"it through the 'Scripting -> Run Workbench Script File' menu item."NL -NL -" If you have a script that is used often or that you want to distribute to other"NL -"people, you may consider turning it into a plugin. A plugin will be accessible from"NL -"the Workbench UI in the main menu or in certain context menus for model objects,"NL -"depending on how you register it. See the 'plugins' section for more info about this."NL -" You can also put your scripts in a library of plain Python functions, and invoke"NL -"them from the Scripting Shell. By placing the library in the libraries folder in your"NL -"user's Workbench data folder (you can see its path printed in the Workbench Shell) it"NL -"will automatically loaded when Workbench starts. This is a more flexible approach as"NL -"you can easily pass any kind of argument to your scripts with little coding effort."NL -NL -" Samples"NL -" -------"NL -" The following are some sample snippets for things you can do in Workbench,"NL -"to view them type '? keyword'"NL -NL -" iter.figures - iterate through figures in the diagram"NL -" iter.tables - iterate through tables in the 1st schema in the model"NL -" chcolor - change color of all figures matching some criteria"NL -" lowercase - rename titles of all tables and columns to lower case only"NL +" To execute a Python script against the loaded model, you can simply input it" NL +"in the Scripting Shell entry box. For doing quick tests and exploring it will be" NL +"the quickest way. If you have a script file you want to execute, you can execute" NL +"it through the 'Scripting -> Run Workbench Script File' menu item." NL +NL +" If you have a script that is used often or that you want to distribute to other" NL +"people, you may consider turning it into a plugin. A plugin will be accessible from" NL +"the Workbench UI in the main menu or in certain context menus for model objects," NL +"depending on how you register it. See the 'plugins' section for more info about this." NL +" You can also put your scripts in a library of plain Python functions, and invoke" NL +"them from the Scripting Shell. By placing the library in the libraries folder in your" NL +"user's Workbench data folder (you can see its path printed in the Workbench Shell) it" NL +"will automatically loaded when Workbench starts. This is a more flexible approach as" NL +"you can easily pass any kind of argument to your scripts with little coding effort." NL +NL +" Samples" NL +" -------" NL +" The following are some sample snippets for things you can do in Workbench," NL +"to view them type '? keyword'" NL +NL +" iter.figures - iterate through figures in the diagram" NL +" iter.tables - iterate through tables in the 1st schema in the model" NL +" chcolor - change color of all figures matching some criteria" NL +" lowercase - rename titles of all tables and columns to lower case only" NL " " }, {"iter.figures", -"# iterate over figures from a diagram and prints some information about them"NL -"def iter_figures(diagram):"NL -" for figure in diagram.figures:"NL -" print '%s %s (%i,%i)'%(figure.__grtclassname__, figure.name, figure.left, figure.top)"NL +"# iterate over figures from a diagram and prints some information about them" NL +"def iter_figures(diagram):" NL +" for figure in diagram.figures:" NL +" print '%s %s (%i,%i)'%(figure.__grtclassname__, figure.name, figure.left, figure.top)" NL NL -"iter_figures(grt.root.wb.doc.physicalModels[0].diagrams[0])"NL +"iter_figures(grt.root.wb.doc.physicalModels[0].diagrams[0])" NL }, {"iter.tables", -"# iterate over database tables in a given schema and print columns and foreign keys"NL -"def iter_tables(schema):"NL -" for table in schema.tables:"NL -" print '%s <%s>' % (table.name, table.tableEngine)"NL -" print 'Columns:'"NL -" for column in table.columns:"NL -" print '%s%s : %s' % (column.name, table.isPrimaryKeyColumn(column) and 'PK' or '', column.formattedType())"NL -" print 'Foreign Keys:'"NL -" for fk in table.foreignKeys:"NL -" print '%s' % fk.name"NL +"# iterate over database tables in a given schema and print columns and foreign keys" NL +"def iter_tables(schema):" NL +" for table in schema.tables:" NL +" print '%s <%s>' % (table.name, table.tableEngine)" NL +" print 'Columns:'" NL +" for column in table.columns:" NL +" print '%s%s : %s' % (column.name, table.isPrimaryKeyColumn(column) and 'PK' or '', column.formattedType())" NL +" print 'Foreign Keys:'" NL +" for fk in table.foreignKeys:" NL +" print '%s' % fk.name" NL NL -"iter_tables(grt.root.wb.doc.physicalModels[0].catalog.schemata[0])"NL +"iter_tables(grt.root.wb.doc.physicalModels[0].catalog.schemata[0])" NL }, {"chcolor", -"# change color of all figures in diagram of a given class"NL -"def change_color(diagram, klass, new_color):"NL -" for figure in diagram.figures:"NL -" if figure.__grtclassname__ == klass:"NL -" figure.color = new_color"NL +"# change color of all figures in diagram of a given class" NL +"def change_color(diagram, klass, new_color):" NL +" for figure in diagram.figures:" NL +" if figure.__grtclassname__ == klass:" NL +" figure.color = new_color" NL NL -"change_color(grt.root.wb.doc.physicalModels[0].diagrams[0], 'workbench.physical.TableFigure', '#aa8844')"NL +"change_color(grt.root.wb.doc.physicalModels[0].diagrams[0], 'workbench.physical.TableFigure', '#aa8844')" NL }, {"lowercase", -"# change name of all tables to lowercase"NL -"def change_table_names(function, schema=None):"NL -" if schema is None:"NL -" schema = grt.root.wb.doc.physicalModels[0].catalog.schemata[0]"NL -" for table in schema.tables:"NL -" s = function(table.name)"NL -" if s != table.name:"NL -" table.name = s"NL +"# change name of all tables to lowercase" NL +"def change_table_names(function, schema=None):" NL +" if schema is None:" NL +" schema = grt.root.wb.doc.physicalModels[0].catalog.schemata[0]" NL +" for table in schema.tables:" NL +" s = function(table.name)" NL +" if s != table.name:" NL +" table.name = s" NL NL -"change_table_names(lambda name: name.lower())"NL +"change_table_names(lambda name: name.lower())" NL }, {"modules", -" In the GRT, modules are libraries with a list of functions that are exported for use"NL -"by code in other modules, scripts or Workbench itself. Modules can be currently written"NL -"in C++, Lua and Python but the datatypes used in arguments and return value must be GRT"NL -"types."NL -" To export certain functions from a Python source file as a module, you need to do the"NL -"following:"NL -"- the file must be placed in the user modules folder. You can see its path in the"NL -"scripting shell window as 'Looking for user plugins in ...'. You can also install it"NL -"using the Scripting -> Install Plugin/Module File... menu command."NL -"- the filename must have the _grt.py suffix (ex: my_modules_grt.py)"NL -"- define some module metadata using the DefineModule function in the 'wb' module:"NL -"from wb import *"NL -"ModuleInfo = DefineModule(name='MyStuff', author='me', version='1.0')"NL -"- functions to be exported must have their signature declared with the export decorator"NL -"in the previously created ModuleInfo object:"NL -"@ModuleInfo.export(grt.INT, grt.STRING)"NL -"def checkString(s):"NL +" In the GRT, modules are libraries with a list of functions that are exported for use" NL +"by code in other modules, scripts or Workbench itself. Modules can be currently written" NL +"in C++, Lua and Python but the datatypes used in arguments and return value must be GRT" NL +"types." NL +" To export certain functions from a Python source file as a module, you need to do the" NL +"following:" NL +"- the file must be placed in the user modules folder. You can see its path in the" NL +"scripting shell window as 'Looking for user plugins in ...'. You can also install it" NL +"using the Scripting -> Install Plugin/Module File... menu command." NL +"- the filename must have the _grt.py suffix (ex: my_modules_grt.py)" NL +"- define some module metadata using the DefineModule function in the 'wb' module:" NL +"from wb import *" NL +"ModuleInfo = DefineModule(name='MyStuff', author='me', version='1.0')" NL +"- functions to be exported must have their signature declared with the export decorator" NL +"in the previously created ModuleInfo object:" NL +"@ModuleInfo.export(grt.INT, grt.STRING)" NL +"def checkString(s):" NL "..." -" The arguments to export is a list of GRT type names, starting with the"NL -"return type of the function, followed by 0 or more argument types. The allowed type"NL -"names are (note that they are in the grt module, which must be imported):"NL -" - grt.INT integer values; also used for boolean values"NL -" - grt.DOUBLE floating point numeric values"NL -" - grt.STRING UTF-8 or ASCII string data"NL -" - grt.DICT a key/value dictionary value; keys must be strings"NL -" - grt.LIST a list of other values. You may specify the type of the contents as"NL -" a tuple in the form (grt.LIST, ), ex: (grt.LIST, grt.STRING) for a list"NL -"of strings or (grt.LIST, grt.classes.db_Table) for a list of db.Table objects"NL -" - grt.OBJECT an instance of a GRT object or a GRT class object, from grt.classes"NL +" The arguments to export is a list of GRT type names, starting with the" NL +"return type of the function, followed by 0 or more argument types. The allowed type" NL +"names are (note that they are in the grt module, which must be imported):" NL +" - grt.INT integer values; also used for boolean values" NL +" - grt.DOUBLE floating point numeric values" NL +" - grt.STRING UTF-8 or ASCII string data" NL +" - grt.DICT a key/value dictionary value; keys must be strings" NL +" - grt.LIST a list of other values. You may specify the type of the contents as" NL +" a tuple in the form (grt.LIST, ), ex: (grt.LIST, grt.STRING) for a list" NL +"of strings or (grt.LIST, grt.classes.db_Table) for a list of db.Table objects" NL +" - grt.OBJECT an instance of a GRT object or a GRT class object, from grt.classes" NL }, {"plugins", "" @@ -191,28 +191,28 @@ void grt_shell_show_python_help(grt::GRT { if (!command || !*command) grt->send_output( - "Help Topics"NL - "-----------"NL - "grt General information about the Workbench runtime"NL - "scripting Practical information when working on scripts and modules for Workbench"NL - "wbdata Summary about Workbench model data organization"NL - "modules Information about Workbench module usage"NL - "plugins Information about writing Plugins and Modules for Workbench"NL - "Type '? ' to get help on the topic."NL + "Help Topics" NL + "-----------" NL + "grt General information about the Workbench runtime" NL + "scripting Practical information when working on scripts and modules for Workbench" NL + "wbdata Summary about Workbench model data organization" NL + "modules Information about Workbench module usage" NL + "plugins Information about writing Plugins and Modules for Workbench" NL + "Type '? ' to get help on the topic." NL NL - "Custom Python Modules"NL - "---------------------"NL - "grt Module to work with Workbench runtime (grt) objects"NL - " grt.root The root object in the internal Workbench object hierarchy"NL - " grt.modules Location where Workbench modules are available"NL - " grt.classes List of classes known to the GRT system"NL - "mforms A Module to access the cross-platform UI toolkit used in some Workbench features"NL - "wb Utility module for creating Workbench plugins"NL + "Custom Python Modules" NL + "---------------------" NL + "grt Module to work with Workbench runtime (grt) objects" NL + " grt.root The root object in the internal Workbench object hierarchy" NL + " grt.modules Location where Workbench modules are available" NL + " grt.classes List of classes known to the GRT system" NL + "mforms A Module to access the cross-platform UI toolkit used in some Workbench features" NL + "wb Utility module for creating Workbench plugins" NL NL - "Type 'help()' to get information about a module, object or function."NL - "'dir()' will give a quick list of methods an object has."NL - "For an introductory tutorial on the Python language, visit http://docs.python.org/tutorial/"NL - "For general Python and library reference documentation, visit http://python.org/doc/"NL + "Type 'help()' to get information about a module, object or function." NL + "'dir()' will give a quick list of methods an object has." NL + "For an introductory tutorial on the Python language, visit http://docs.python.org/tutorial/" NL + "For general Python and library reference documentation, visit http://python.org/doc/" NL ); else {