ipython中的Web2py选项卡完成对db和db.Field(DAL)不起作用

时间:2011-12-22 20:27:30

标签: web2py ipython

Ipython代码完成SEEMS正在为web2py工作但它不会留下建议以及我认为最有用的建议:

  • 在db.tab之后未列在建议中。
  • db.mytable.tab后
  • 字段未列在建议中。

我缺少什么?有没有人有什么建议?

这是说明我的意思的ipython会话。

E:\web2py>python web2py.py -M -S exp2
web2py Web Framework
Created by Massimo Di Pierro, Copyright 2007-2011
Version 1.99.2 (2011-09-26 06:55:33) stable
Database drivers available: SQLite3, pymysql
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.

IPython 0.10.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: db.
db.Field                          db.__module__                     db.get
db.Table                          db.__ne__                         db.has_key
db.__call__                       db.__new__                        db.import_from_csv_file
db.__class__                      db.__reduce__                     db.import_table_definitions
db.__cmp__                        db.__reduce_ex__                  db.items
db.__contains__                   db.__repr__                       db.iteritems
db.__delattr__                    db.__setattr__                    db.iterkeys
db.__delitem__                    db.__setitem__                    db.itervalues
db.__dict__                       db.__sizeof__                     db.keys
db.__doc__                        db.__str__                        db.parse_as_rest
db.__eq__                         db.__subclasshook__               db.pop
db.__format__                     db.__weakref__                    db.popitem
db.__ge__                         db._update_referenced_by          db.rollback
db.__getattr__                    db.check_reserved_keyword         db.set_folder
db.__getattribute__               db.clear                          db.setdefault
db.__getitem__                    db.commit                         db.smart_query
db.__gt__                         db.copy                           db.update
db.__hash__                       db.define_table                   db.values
db.__init__                       db.distributed_transaction_begin  db.viewitems
db.__iter__                       db.distributed_transaction_commit db.viewkeys
db.__le__                         db.executesql                     db.viewvalues
db.__len__                        db.export_to_csv_file
db.__lt__                         db.fromkeys

In [1]: db.tables
Out[1]:
['auth_user',
 'auth_group',
 'auth_membership',
 'auth_permission',
 'auth_event',
 'auth_cas',
 'su']

In [2]: db.su.
db.su.__call__             db.su.__iter__             db.su._create_references   db.su.iteritems
db.su.__class__            db.su.__le__               db.su._drop                db.su.iterkeys
db.su.__cmp__              db.su.__len__              db.su._filter_fields       db.su.itervalues
db.su.__contains__         db.su.__lt__               db.su._insert              db.su.keys
db.su.__delattr__          db.su.__module__           db.su._listify             db.su.on
db.su.__delitem__          db.su.__ne__               db.su._truncate            db.su.pop
db.su.__dict__             db.su.__new__              db.su._validate            db.su.popitem
db.su.__doc__              db.su.__reduce__           db.su.bulk_insert          db.su.setdefault
db.su.__eq__               db.su.__reduce_ex__        db.su.clear                db.su.truncate
db.su.__format__           db.su.__repr__             db.su.copy                 db.su.update
db.su.__ge__               db.su.__setattr__          db.su.drop                 db.su.update_or_insert
db.su.__getattr__          db.su.__setitem__          db.su.fromkeys             db.su.validate_and_insert
db.su.__getattribute__     db.su.__sizeof__           db.su.get                  db.su.values
db.su.__getitem__          db.su.__str__              db.su.has_key              db.su.viewitems
db.su.__gt__               db.su.__subclasshook__     db.su.import_from_csv_file db.su.viewkeys
db.su.__hash__             db.su.__weakref__          db.su.insert               db.su.viewvalues
db.su.__init__             db.su._build_query         db.su.items                db.su.with_alias

In [2]: db.su.fields
Out[2]: ['id', 'k1', 'k2', 'k3', 'k4', 'k5', 'k6', 'k7', 'sufile', 'function']   

2 个答案:

答案 0 :(得分:4)

我刚刚承诺对web2py进行更改,以解决db.tables和db.table.fields的问题。感谢您发现此问题。如果您发现其他未显示的属性,请告诉我,我会尝试解决它。请使用web2py邮件列表或Google代码web2py问题跟踪器报告此问题,以便我们不必在各个地方寻找它们。 ; - )

答案 1 :(得分:2)

IPython的属性选项卡完成基于dir(带有一些额外的糖),因此它不会找到仅通过自定义__getattr__请求存在的属性,这对于代理来说尤其常见/远程对象代码,可能是web2py如何定义完成中缺少的属性。

除了建立如何定义可用名称的约定之外,我不知道检查这些事情的方法。

示例类,具有catcar属性:

class C(object):
    def __init__(self):
        self.cat = 'tabby'
        self._car = 'edsel'

    def __getattr__(self, attr):
        if attr == 'car':
            return self._car
        else:
            raise AttributeError(attr)

但此类的实例上的制表符只会显示cat,因为car仅在请求时定义。

有关详细信息,请参阅属性匹配代码for the completer以及其中使用的slightly extended版本的目录。