Завершение вкладки Web2py в ipython не работает для db и db.Field (DAL) - PullRequest
2 голосов
/ 23 декабря 2011

Завершение кода Ipython СЛЕДУЕТ работать на 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 ]

4 голосов
/ 24 декабря 2011

Я просто поручил создать изменения в web2py, которые решат вашу проблему для db.tables и db.table.fields. Спасибо, что обнаружили эту проблему. Если вы найдете другие атрибуты, которые не отображаются, дайте мне знать, и я постараюсь устранить их. Чтобы сообщить об этой проблеме, воспользуйтесь списком рассылки web2py или системой отслеживания проблем с кодом Google web2py, чтобы нам не приходилось искать их в разных местах. ; -)

2 голосов
/ 24 декабря 2011

Завершение атрибутов IPython для вкладок основано на dir (с небольшим дополнительным сахаром), поэтому он не найдет атрибуты, которые существуют только по запросу через пользовательский __getattr__, что особенно характерно для кода прокси / удаленного объекта и, вероятно, как web2py определяет атрибуты, отсутствующие в дополнениях.

Я не знаю способа осмотреть эти вещи, кроме установления соглашения о том, как определять доступные имена.

Пример класса, который имеет рабочие атрибуты cat и 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, поскольку car определяется только тогда, когда его запрашивают.

Для получения дополнительной информации см. Код соответствия атрибута для завершителя и слегка расширенную версию dir, используемую в нем.

...