Important
ERPpeek is no longer maintained. Please consider using Odooly instead.
- Add support for the JSON-RPC protocol. It is enabled if the
--serverargument contains the full path to the/jsonrpcendpoint. As an alternative, you can specify theprotocolin the configuration file. - Change the return value of :meth:`Model.browse` method if search domain is
an empty list. It returns an empty
RecordListexcept if some other argument is provided (e.g.all_users = model('res.users').browse([], limit=None)). Compatibility tip: you can restore the old behavior withModel._browse_compat = True. - Change the return value of
Client.read()andModel.read()methods if search domain is an empty list: it returnsFalse. - Improve error formatting for recent Odoo versions, in interactive mode.
- Refactor the construction of
Serviceproxies. - Drop compatibility with Python 2.6.
- Fully support Odoo 10 and Odoo 11.
- New method
Client.clone_databasebased onClient.db.duplicate_database. - Optional
loginandcountry_codearguments forClient.create_databasein Odoo 9+. - Use the
contextfor thesearchmethods. - Service
Client._reportis removed in Odoo 11. MethodsClient.report,Client.report_getandClient.render_reportare removed too. - More robust Python 2 detection logic.
- Do not parse long integers which overflow in XML-RPC.
- Add an optional
transportargument to theClientconstructor. This is useful for tweaking the SSL context or adding an optional timeout parameter. - Implement
==comparison forRecordListinstances. - Uninstall dependent add-ons in a single call.
- Do not install/uninstall add-ons if other actions are pending.
- Do not hang when the
Clientconstructor receives invalid arguments. - Fix
str(record)andprint(record)with non-ASCII names.
- Support using
--envand--usertogether to connect with a different user. - Adapt for Odoo 8.0 after change
cc4fba6on October 2014. - Do not interpret digits with leading
0as octal in search domain.
- Compatible with Odoo 8.0.
- New attribute
Client.contextto set the default context for high-levelModelandRecordmethods. - Use blocking RPC call in
Client.create_database. Asynchronous method is removed in Odoo. - Return the interactive namespace with
main(interact=False). It helps to integrate with third-party libraries, such as IPython. - Remove a duplicate
Logged in as ...line in interactive mode. - Remove the
search+name_getundocumented feature which has wrong behavior when applied to an emptyRecordList. - Do not prevent login if access to
Client.db.list()is denied.
- When a function or a method fails, raise an
erppeek.Errorinstead of printing a message and returningNone. - Switch to local mode when the command line argument points at the
server configuration, like
-c path/to/openerp-server.conf. - Local mode compatible with Odoo trunk: support both the old and the new API.
- Use shell-like parsing for
options =setting in local mode. - Function
start_openerp_servicesis replaced withstart_odoo_services: it is still compatible with OpenERP 6.1 and 7 and it accepts a list of options in the first argument, similar tosys.argv[1:]. - Search domains require square brackets. Usage without square brackets
was deprecated since 0.5, with
UserWarningalerts. - Implement addition of
RecordListof the same model. - Drop compatibility with Python 2.5.
- Change command line output to CSV format.
- Translate command line output according to LANG environment variable.
- Pretty print the list of modules.
- Do not report
Module(s) not foundwhen trying to install a module already installed.
- Return an appropriate error message when the client is not connected.
- Two similar
Recordfrom different connections do not compare equal. - Set the
PGAPPNAMEused for the PostgreSQL connection, in local mode. - Close PostgreSQL connections on exit, in local mode.
- Implement the context manager protocol.
- When switching to a different environment, with
Client.connect, invalidate the previous connection to avoid mistakes (interactive mode). - Avoid cluttering the globals in interactive mode.
- Close socket to avoid
ResourceWarningon Python 3. - The
get_poolhelper is only available in interactive mode and if the client is connected locally using theopenerppackage. - Clear the last exception before entering interactive mode, only needed on Python 2.
- Fix the
searchargsdomain parser for compatibility with Python 3.4.
- Advertize the
ModelandRecordparadigm in theusageprinted in interactive mode: it's far more easier to use, and available since 1.0. - In interactive mode, only inject four global names:
client,models,modelanddo. Other methods are available onModelandClientinstances (readsearchcountkeysfieldsaccess...). - Always clear the
Recordcache when an arbitrary method is called on thisRecord. - Implement
==comparison forRecordinstances. - New computed attributes
Record._external_idandRecordList._external_id, and new methodModel._get_external_ids(ids=None). - Better parsing of dates in search terms.
- Reject invalid
==operator in search terms. - Now the
str(...)of aRecordis always retrieved withname_get. Previously, the output was sometimes inconsistent. - Fix
TypeErrorwhen browsing duplicate ids. - Fix error with
Model.get(['field = value'], context={...}). - Workaround an issue with some models: always pass a list of ids
to
read. - Test the behaviour when
readis called with aFalseid: it happens when browsing aRecordListfor example.
- Extend
Model.getto retrieve a record byxml_id. - Fix AttributeError when reading a mix of valid and invalid records.
- Fix
dir()onRecordandRecordListto return all declared fields, and do not reportidfield twice. - Fix a crash with built-in OS X readline on Python 2.5 or 2.6.
- Remove deprecated
Record.client. - Fix compatibility with Python 3.
- Add optional argument
checkto theClient.modelmethod to bypass the verification in some cases, used to speed up the read methods. - Do not crash when mixing non-existing and existing records: return
always
Falsefor non-existing records.
- Compatible with OpenERP 7.
- Set the database name as thread attribute to print it in the log file (local mode only).
- Do not try to access private methods through RPC when resolving
attributes of the
Clientor anyRecordorRecordList.
- Add the
get_poolhelper when connected using theopenerplibrary. - Remove the leading slash on the
serveroption, if present. - Do not try to access private methods through RPC when reading attributes
of the
model(...).
- Fix reading
many2oneattribute onRecordListobject in local mode. - Fix occasional issue on login when switching database on the same server.
- Optimization: do not propagate the call to
RecordList.writeorRecordList.unlinkif the list is empty. - Clear the
Recordcache onRecord._send. - Expose the method
Record.refreshto clear the local cache.
- New: direct connection to a local server using the
openerplibrary. Usescheme = localandoptions = -c /path/to/openerp-server.confin the configuration.
- Fix method
Record._send.
- Implement exception chaining in
format_exceptionto print the original traceback. - Return a list of
Recordobjects when reading thereferencefield of aRecordListobject. - Fix reading attributes on
RecordListwith holes or gaps. - Accessing an empty
one2manyormany2manyattribute on aRecordreturns aRecordList. - New method
Model.getto retrieve a singleRecord. It raises aValueErrorif multiple records are found. - New method
Record._sendto send a workflow signal.
- Accept
RecordandRecordListattribute values when writing or creating records. - Improve the methods
writeandcreateofRecordandRecordListobjects to manageone2manyandmany2manyfields. - Return a
Recordwhen reading areferencefield. Implement thecreateandwritemethods for these fields. - Remove undocumented alias
Record.update.
- Add the special operators
=ilike,=ilike,=?and fix parsing of inequality operators>=and<=. - Fix the
RecordList.idattribute, and deprecateRecordList._ids. - Deprecate the
Record.clientattribute: useRecord._model.client. - Accessing an empty
many2oneattribute on aRecordListnow returns aRecordList. - Fix
TypeErrorwhen browsing non-existent records.
- Catch some malformed search domains before sending the RPC request.
- Preserve dictionary response when calling non standard
Recordmethods. - Expose the helper
format_exceptionwhich formats the errors received through XML-RPC. - Support XML-RPC through HTTPS with
scheme = httpsin theerppeek.iniconfiguration file. - Print an error message when
client.upgrade(...)does not find any module to upgrade.
- When using arbitrary methods on
Record, wrap theidin a list[id]. It fixes a recurring issue with poorly tested methods. - Do not read all records if the
RecordListis empty. - Fix the bad behaviour when switching to a different database.
- Order the results when using
readmethod withorder=argument. - Reading attributes of the sequence
<RecordList 'sea.fish,[2, 1, 2]'>will return an ordered sequence of three items. Previously it used to return an unordered sequence of two items. - Accept the
%(...)sformatting for the fields parameter of theRecord.readand theRecordList.readmethods too. - Add a tutorial to the documentation.
- Add the test suite for Python 2 and Python 3.
- Implement
len()forRecordListobjects. - Connect to the server even if the database is missing.
- Expose the method
Client.db.get_progress. - New method
Client.create_databasewhich wraps togetherClient.db.createandClient.db.get_progress. - Save the readline history in
~/.erppeek_history, only if the file already exists. - Enable auto-completion using
rlcompleterstandard module. - Raise an
AttributeErrorwhen assigning to a missing or read-only attribute.
- Enhance the
Model.browse()method to accept the same keyword arguments as theClient.search()method. - Fix the verbose level on
Client.connect(). - Fix the
Record.copy()method. - Fix the
Record.perm_read()method (workaround an OpenERP bug when dealing with single ids). - Drop the
--searchargument, because the search terms can be passed as positional arguments after the options. Explain it in the description. - Fix the shell command. Request the password interactively if it's not in the options and not in the configuration file.
- Add the
--verboseswitch to log the XML-RPC messages. Lines are truncated at 79 chars. Use-vvor-vvvto truncate at 179 or 9999 chars respectively. - Removed the
--writeswitch because it's not really useful. Use :meth:`Record.write` or :meth:`client.write` for example. - Stop raising RuntimeError when calling
Client.model(name). Simply print the message if the name does not match. - Fix
RecordList.read()andRecord.read()methods to accept the same diversity offieldsarguments as theClient.read()method. RecordList.read()andRecord.read()return instances ofRecordListandRecordfor relational fields.- Optimize: store the name of the
Recordwhen a relational field is accessed. - Fix message wording on module install or upgrade.
- Fix
Record.write()andRecord.unlink()methods. - Fix the caching of the
Modelkeys and fields and theRecordname.
- Fix
client.model()method. Addmodels()to theglobals()in interactive mode.
- Add the Active Record pattern for convenience. New classes :class:`Model`,
:class:`RecordList` and :class:`Record`. The :meth:`Client.model` method
now returns a single :class:`Model` instance. These models can be
reached using camel case attribute too. Example:
client.model('res.company')andclient.ResCompanyreturn the same :class:`Model`. - Refresh the list of modules before install or upgrade.
- List all modules which have
state not in ('uninstalled', 'uninstallable')when callingclient.modules(installed=True). - Add documentation.
- Fix
help(client)andrepr(...). - Add basic safeguards for argument types.
- Fix RuntimeError on connection.
- Support Python 3.
- Return Client method instead of function when calling
client.writeor similar. - Fix the case where :meth:`~Client.read()` is called with a single id.
- Implement
Client.__getattr__special attribute to call any object method, likeclient.write(obj, values). This is somewhat redundant withclient.execute(obj, 'write', values)and its interactive aliasdo(obj, 'write', values). - Add
--writeswitch to enable unsafe helpers:write,create,copyandunlink. - Tolerate domain without square brackets, but show a warning.
- Add long options
--searchfor-s,--interactfor-i.
- Workaround for
sys.excepthookignored, related to a Python issue.
- Add
--configand--versionswitches. - Improve documentation with session examples.
- Move the project from Launchpad to GitHub.
- Allow to switch user or database: methods
client.loginandclient.connect. - Allow
context=keyword argument. - Add
access(...)method. - Add
%(...)sformatting for the fields parameter of theread(...)method. - Refactor the interactive mode.
- Many improvements.
- Publish on PyPI.
- Initial release.