2011-12-22 53 views
2

IPython的代码完成似乎是工作的web2py但它留下过建议和非常那些我认为是最有帮助的:web2py的标签完成不为DB和db.Field(DAL)工作

  • db.tab后,没有列在建议中。
  • after 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'] 

回答

4

我只是在web2py中改变主干,这将解决您的问题db.tables和db.table.fields。感谢您发现这个问题。如果您发现其他未显示的属性,请告诉我,我会尽力解决它。请使用web2py邮件列表或谷歌代码web2py问题跟踪器报告此问题,以便我们不必在各个地方搜索它们。 ;-)

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版本的dir。

+0

您可以通过为相关对象添加自定义完成程序来解决此问题。例如。我为熊猫添加了这个代码:https://github.com/wesm/pandas/blob/master/pandas/core/frame.py#L3676 – 2011-12-26 14:55:57