[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24605] trunk/blender: - access console languages as modules rather then having the py operator call an operator

Campbell Barton ideasman42 at gmail.com
Tue Nov 17 13:21:41 CET 2009


Revision: 24605
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24605
Author:   campbellbarton
Date:     2009-11-17 13:21:41 +0100 (Tue, 17 Nov 2009)

Log Message:
-----------
- access console languages as modules rather then having the py operator call an operator
- workaround for __getattr__ existing for types that dont support it

Modified Paths:
--------------
    trunk/blender/release/scripts/op/console_python.py
    trunk/blender/release/scripts/op/console_shell.py
    trunk/blender/release/scripts/ui/space_console.py
    trunk/blender/source/blender/makesrna/intern/rna_main.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/release/scripts/op/console_python.py
===================================================================
--- trunk/blender/release/scripts/op/console_python.py	2009-11-17 10:57:49 UTC (rev 24604)
+++ trunk/blender/release/scripts/op/console_python.py	2009-11-17 12:21:41 UTC (rev 24605)
@@ -66,160 +66,130 @@
     return console, stdout, stderr
 
 
-class PyConsoleExec(bpy.types.Operator):
-    '''Execute the current console line as a python expression.'''
-    bl_idname = "console.execute_" + language_id
-    bl_label = "Console Execute"
-    bl_register = False
+# Both prompts must be the same length
+PROMPT = '>>> '
+PROMPT_MULTI = '... '
 
-    # Both prompts must be the same length
-    PROMPT = '>>> '
-    PROMPT_MULTI = '... '
+def execute(context):
+    sc = context.space_data
 
-    # is this working???
-    '''
-    def poll(self, context):
-        return (context.space_data.type == 'PYTHON')
-    '''
-    # its not :|
+    try:
+        line = sc.history[-1].line
+    except:
+        return ('CANCELLED',)
 
-    def execute(self, context):
-        sc = context.space_data
+    if sc.console_type != 'PYTHON':
+        return ('CANCELLED',)
 
-        try:
-            line = sc.history[-1].line
-        except:
-            return ('CANCELLED',)
+    console, stdout, stderr = get_console(hash(context.region))
 
-        if sc.console_type != 'PYTHON':
-            return ('CANCELLED',)
+    # Hack, useful but must add some other way to access
+    #if "C" not in console.locals:
+    console.locals["C"] = context
 
-        console, stdout, stderr = get_console(hash(context.region))
+    # redirect output
+    sys.stdout = stdout
+    sys.stderr = stderr
 
-        # Hack, useful but must add some other way to access
-        #if "C" not in console.locals:
-        console.locals["C"] = context
+    # run the console
+    if not line.strip():
+        line_exec = '\n'  # executes a multiline statement
+    else:
+        line_exec = line
 
-        # redirect output
-        sys.stdout = stdout
-        sys.stderr = stderr
+    is_multiline = console.push(line_exec)
 
-        # run the console
-        if not line.strip():
-            line_exec = '\n'  # executes a multiline statement
-        else:
-            line_exec = line
+    stdout.seek(0)
+    stderr.seek(0)
 
-        is_multiline = console.push(line_exec)
+    output = stdout.read()
+    output_err = stderr.read()
 
-        stdout.seek(0)
-        stderr.seek(0)
+    # cleanup
+    sys.stdout = sys.__stdout__
+    sys.stderr = sys.__stderr__
+    sys.last_traceback = None
 
-        output = stdout.read()
-        output_err = stderr.read()
+    # So we can reuse, clear all data
+    stdout.truncate(0)
+    stderr.truncate(0)
 
-        # cleanup
-        sys.stdout = sys.__stdout__
-        sys.stderr = sys.__stderr__
-        sys.last_traceback = None
+    bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
 
-        # So we can reuse, clear all data
-        stdout.truncate(0)
-        stderr.truncate(0)
+    if is_multiline:
+        sc.prompt = PROMPT_MULTI
+    else:
+        sc.prompt = PROMPT
 
-        bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
+    # insert a new blank line
+    bpy.ops.console.history_append(text="", current_character=0,
+        remove_duplicates=True)
 
-        if is_multiline:
-            sc.prompt = self.PROMPT_MULTI
-        else:
-            sc.prompt = self.PROMPT
+    # Insert the output into the editor
+    # not quite correct because the order might have changed,
+    # but ok 99% of the time.
+    if output:
+        add_scrollback(output, 'OUTPUT')
+    if output_err:
+        add_scrollback(output_err, 'ERROR')
 
-        # insert a new blank line
-        bpy.ops.console.history_append(text="", current_character=0,
-            remove_duplicates=True)
+    return ('FINISHED',)
 
-        # Insert the output into the editor
-        # not quite correct because the order might have changed,
-        # but ok 99% of the time.
-        if output:
-            add_scrollback(output, 'OUTPUT')
-        if output_err:
-            add_scrollback(output_err, 'ERROR')
 
-        return ('FINISHED',)
+def autocomplete(context):
+    from console import intellisense
 
+    sc = context.space_data
 
-class PyConsoleAutocomplete(bpy.types.Operator):
-    '''Evaluate the namespace up until the cursor and give a list of
-    options or complete the name if there is only one.'''
-    bl_idname = "console.autocomplete_" + language_id
-    bl_label = "Python Console Autocomplete"
-    bl_register = False
+    console = get_console(hash(context.region))[0]
+    
+    current_line = sc.history[-1]
+    line = current_line.line
 
-    def poll(self, context):
-        return context.space_data.console_type == 'PYTHON'
+    if not console:
+        return ('CANCELLED',)
 
-    def execute(self, context):
-        from console import intellisense
+    if sc.console_type != 'PYTHON':
+        return ('CANCELLED',)
 
-        sc = context.space_data
+    # This function isnt aware of the text editor or being an operator
+    # just does the autocomp then copy its results back
+    current_line.line, current_line.current_character, scrollback = \
+        intellisense.expand(
+            line=current_line.line,
+            cursor=current_line.current_character,
+            namespace=console.locals,
+            private='-d' in sys.argv)
 
-        console = get_console(hash(context.region))[0]
-        
-        current_line = sc.history[-1]
-        line = current_line.line
+    # Now we need to copy back the line from blender back into the
+    # text editor. This will change when we dont use the text editor
+    # anymore
+    if scrollback:
+        add_scrollback(scrollback, 'INFO')
 
-        if not console:
-            return ('CANCELLED',)
+    context.area.tag_redraw()
 
-        if sc.console_type != 'PYTHON':
-            return ('CANCELLED',)
+    return ('FINISHED',)
 
-        # This function isnt aware of the text editor or being an operator
-        # just does the autocomp then copy its results back
-        current_line.line, current_line.current_character, scrollback = \
-            intellisense.expand(
-                line=current_line.line,
-                cursor=current_line.current_character,
-                namespace=console.locals,
-                private='-d' in sys.argv)
 
-        # Now we need to copy back the line from blender back into the
-        # text editor. This will change when we dont use the text editor
-        # anymore
-        if scrollback:
-            add_scrollback(scrollback, 'INFO')
+def banner(context):
+    sc = context.space_data
+    version_string = sys.version.strip().replace('\n', ' ')
 
-        context.area.tag_redraw()
+    add_scrollback(" * Python Interactive Console %s *" % version_string, 'OUTPUT')
+    add_scrollback("Command History:  Up/Down Arrow", 'OUTPUT')
+    add_scrollback("Cursor:           Left/Right Home/End", 'OUTPUT')
+    add_scrollback("Remove:           Backspace/Delete", 'OUTPUT')
+    add_scrollback("Execute:          Enter", 'OUTPUT')
+    add_scrollback("Autocomplete:     Ctrl+Space", 'OUTPUT')
+    add_scrollback("Ctrl +/-  Wheel:  Zoom", 'OUTPUT')
+    add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, Mathutils, Geometry, BGL", 'OUTPUT')
+    add_scrollback("", 'OUTPUT')
+    add_scrollback("", 'OUTPUT')
+    sc.prompt = PROMPT
 
-        return ('FINISHED',)
+    # Add context into the namespace for quick access
+    console = get_console(hash(context.region))[0]
+    console.locals["C"] = bpy.context
 
-
-class PyConsoleBanner(bpy.types.Operator):
-    bl_idname = "console.banner_" + language_id
-
-    def execute(self, context):
-        sc = context.space_data
-        version_string = sys.version.strip().replace('\n', ' ')
-
-        add_scrollback(" * Python Interactive Console %s *" % version_string, 'OUTPUT')
-        add_scrollback("Command History:  Up/Down Arrow", 'OUTPUT')
-        add_scrollback("Cursor:           Left/Right Home/End", 'OUTPUT')
-        add_scrollback("Remove:           Backspace/Delete", 'OUTPUT')
-        add_scrollback("Execute:          Enter", 'OUTPUT')
-        add_scrollback("Autocomplete:     Ctrl+Space", 'OUTPUT')
-        add_scrollback("Ctrl +/-  Wheel:  Zoom", 'OUTPUT')
-        add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, Mathutils, Geometry, BGL", 'OUTPUT')
-        add_scrollback("", 'OUTPUT')
-        add_scrollback("", 'OUTPUT')
-        sc.prompt = PyConsoleExec.PROMPT
-
-        # Add context into the namespace for quick access
-        console = get_console(hash(context.region))[0]
-        console.locals["C"] = bpy.context
-
-        return ('FINISHED',)
-
-bpy.ops.add(PyConsoleExec)
-bpy.ops.add(PyConsoleAutocomplete)
-bpy.ops.add(PyConsoleBanner)
+    return ('FINISHED',)

Modified: trunk/blender/release/scripts/op/console_shell.py
===================================================================
--- trunk/blender/release/scripts/op/console_shell.py	2009-11-17 10:57:49 UTC (rev 24604)
+++ trunk/blender/release/scripts/op/console_shell.py	2009-11-17 12:21:41 UTC (rev 24605)
@@ -41,73 +41,40 @@
 
     add_scrollback(output, style)
 
+PROMPT = '$ '
 
-class ShellConsoleExec(bpy.types.Operator):
-    '''Execute the current console line as a python expression.'''
-    bl_idname = "console.execute_" + language_id
-    bl_label = "Console Execute"
-    bl_register = False
 
-    # Both prompts must be the same length
-    PROMPT = '$ '
+def execute(context):
+    sc = context.space_data
 
-    # is this working???
-    '''
-    def poll(self, context):
-        return (context.space_data.type == 'PYTHON')
-    '''
-    # its not :|
-
-    def execute(self, context):
-        sc = context.space_data
-
-        try:
-            line = sc.history[-1].line
-        except:
-            return ('CANCELLED',)
-            
-        bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
+    try:
+        line = sc.history[-1].line
+    except:
+        return ('CANCELLED',)
         
-        shell_run(line)
-        
-        # insert a new blank line
-        bpy.ops.console.history_append(text="", current_character=0,
-            remove_duplicates=True)
+    bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT')
+    

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list