2011-12-22 5 views
2

Ipythonコード補完は、web2pyのために働いているようだが、それは提案や、私が最も有用だと思う非常にものをオフに残している:web2pyのタブ補完はデシベルとdb.Field(DAL)のために動作しません

  • db.tabの後に、テーブルは提案に記載されていません。
  • db.mytable.tabの後、フィールドは提案に記載されていません。

何が欠けていますか?誰にも何か提案はありますか?

ここはipythonのセッションで、どういう意味ですか?それは、プロキシ/リモートオブジェクトコードのために特に一般的である、唯一のカスタム__getattr__を経由して要求上に存在する属性を見つけることができませんので、属性の

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メーリングリストまたはgoogle code web2py issue trackerを使用して、さまざまな場所でそれらを探す必要はありません。 ;-)

2

IPythonのタブ補完は、(少し余分な砂糖)dirに基づいていますおそらくweb2pyが補完から欠落している属性をどのように定義しているかを示します。

私は、利用可能な名前を定義するための規約を確立する以外に、これらのことを調べる方法を知らない。 catcar属性取り組んでいる

例クラス、:それは要求されたときにcarにのみ定義されているため、このクラスのインスタンスに

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が表示されます。

詳細については、属性一致コードfor the completerと、そこに使用されているslightly extendedバージョンのdirを参照してください。

+0

関連するオブジェクトのカスタムコンプリータを追加することで、これをラウンドすることができます。例えば。私はこのコードをpandasに追加しました:https://github.com/wesm/pandas/blob/master/pandas/core/frame.py#L3676 –

関連する問題