Releases: pyblish/pyblish-qml
0.2.8
This is mainly a maintenance update in an effort to improve stability and lay the ground for further development, and implemented #71 and #37 along the way.
Version 0.2.8
Here is the full changelist.
- Feature: Repair
- Feature: Compatible plug-ins updates interactively as you toggle instances.
- Feature: Records and exceptions are embedded into the context object
- Bugfix: Failing Selectors won't prohibit Extraction.
- Enhancement: You can't close while publishing.
- Enhancement: You can't crash the GUI. I dare you.
- API: Added util.register_vendor_libraries
- API: Added util.deregister_vendor_libraries
- API: Changed util.invoke -> util.async
Repair
Upon a plug-in failing, a repair option is provided is the plug-in provides an implementation for repair.
class MyPlugin(...):
def repair_context(self, context):
...
def repair_instance(self, instance):
...
Caveat
Repairing a plug-in will attempt to repair instances that have any failures, even failures that did not originate from the given plug-in.
For example - PluginA causes an error in InstanceA, whereas PluginB causes and error in InstanceB. Repairing either will cause both instances to be repaired.
Finer control is planned for the upcoming Property Panel 2.0
Records and Exceptions
Everything printed to the terminal is now also accessible via the context object in the form of Results
dictionaries.
A Result
dictionary is just that, a Python dictionary of a particular layout and this layout can be found here.
And accessed like this.
# List of Result dictionaries.
results = context.data("results")
assert isinstance(results, list)
A little background on how these are injected; in a nutshell, for every process that takes place between a Plug-in and an Instance, a Result
is generated. The Result
then consists of a success
message, along with any logging and exceptions raised during processing. Refer to the schema above for a full view on all data you have access to.
In practice, you may choose to make use of this data in a plug-in that runs last; such as Conform plug-in.
class ConformRecords(pyblish.api.Conformer):
...
def process_context(self, context):
with open("results.json", "w") as f:
json.dump(context.data("results"), f)
If you are instead interested in exceptions, you can implement a post-validator.
class PostValidator(pyblish.api.Validator):
order = pyblish.api.Validator.order + 0.5
The implementation remains the same, but will this time be written regardless of errors. One may be useful for archiving and metadata, whereas the other may serve as debugging resources.
0.2.7
Version 0.2.7
Main event; Terminal 2.0!
Detailed log messages
Filterable logging levels
- Known issue: You currently can't exclude multiple levels, even though it looks like you can.
Global filter
In-terminal plug-in documentation
Full changelist
- Feature: Terminal 2.0
- Feature: Selectors are now part of the GUI
- Feature: Plug-in documentation is now (brutally) parsed
- Performance: GUI shows up before processing selectors.
- Bugfix: Plug-ins now only processes the Context once
- API: Added Pyblish.AwesomeIcon
- API: Added util.invoke
0.2.6
0.2.5
Version 0.2.5
- Preloading
- Performance enhancement (deferred requests)
Known issues:
1. Showing an already visible GUI will cause the GUI
to re-appear once closed.
2. GUI may not appear gracefully under Windows using Aero
or Windows 8, but may instead pop into place.
0.2.4 - Property Page
Version 0.2.4
- Implementing basic Properties page
- Implementing independent Endpoint server for testing
- Added Pyblish.TextArea
- Added Pyblish.ActionBar
- Added Pyblish.Action
- Added Pyblish.IconButton
- Improved feedback when clicking
- Improved feedback when hovering
- Made package executable
- Fixed issue 155
- Fixed issue 156
- Fixed issue 158
- Refactoring
0.2.3
0.2.0
Version 0.2.0
- Swapped controller from QML to Python
- Performance enhancements; the GUI now rivals non-GUI modes.
- Simplified terminal output; it now resembles non-GUI output
- Simplified backend; no more thread-per-process
- Temporarily switched to native OS window; this should help GUI appearing behind windows
- Temporarily disabled pause/stop buttons; to stop, close the GUI.
Processing performance
For comparison; publishing from the current Pyblish QML is exponentially slower than in this version. The formula looks something like this.
plugin: Time for plugin to process
polling: Fixed interval for polling between Maya and QML (20ms)
timeTaken: (plugin + polling) * numberOfPlugins
Which means that even if a plug-in took 0.002 ms to complete, which isn't uncommon, it would still have taken QML at least 20 ms to hear about its completion.
Whereas in 0.2.0
it looks like this.
timeTaken: plugin * numberOfPlugins
No more polling means native speed; like when running pyblish.main.publish()
.
Bootup time
Before this release, booting up took around 3-4 seconds. It now takes ~0.8 seconds.