Using with iPython ========================================= Link has been designed to work with iPython to make development and data exploration easier. Tab Completion ----------------- **Object Tab Completion** One of the nice features of link is that you can tab complete into your config. For instance:: In [1]: from link import lnk In [2]: lnk. lnk.dbs lnk.apis lnk.config lnk.fresh In [2]: lnk.dbs. lnk.dbs.config lnk.my_db1 Even though these are not objects yet, ipython knows what objects are available and will show them in your completion. **Wrapped Function Tab completion** This feature is a little strange at first. all Wrappers have a _wrapped object. The _wrapped object is what it is "wrapping". In the case of an APIRequestWrapper, we are wrapping the Requests Session object:: In [15]: api._wrapped Out[15]: Requests is an extremely flexible package for interacting with apis, and making http requests. So, I wanted to make sure that I was not taking away from the functionality of this package. Rather, making it easy to use this package by injecting in your configuration (like username, password and custom auth). Another fancy iPython trick is when you tab complete you object, you will see all the available functions and properties of the _wrapped object.:: In [16]: api. api.apikey api.cert api.delete api.hooks api.password api.prefetch api.requests api.timeout api.auth api.clear_session api.get api.init_poolmanager api.patch api.proxies api.response_wrapper api.user api.authenticate api.config api.head api.options api.poolmanager api.put api.run_command api.verify api.base_url api.cookies api.headers api.params api.post api.request api.secret api.wrap_name # this is a method of the _wrapped requests Session object # but seems as though it belongs to api in tab completion and when you # call it In [19]: api.delete Out[19]: > Note, if your wrapper and the _wrapped object have the same function, your function will override the _wrapped function. Lazy Environments -------------------- I like using iPython while I am developing, sometimes when I am not even developing in python. If you noticed, my configuration includes all the resources I use all the time. Yet, I am using aliases to use the commandline tools for things like mysql, sqlite, postgres...curl...vertica...netezza... Really, almost anything you can wrap. It would be nice if i could somehow use what I have configured in ipython to use the command-line tool. Just call your Wrapper like a function:: In [22]: my_db = lnk.dbs.my_sqlitedb In [23]: my_db() SQLite version 3.7.7 2011-06-25 16:35:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> sqlite> .exit In [24]: Same with mysql:: In [24]: my_db = lnk.dbs.my_mysql In [25]: my_db() Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1876 Server version: 5.5.24 MySQL Community Server (GPL) Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show tables.... mysql> exit In [26]: When you exit you are right back in your ipython session, like nothing happened at all.