Skip to content

Releases: pyblish/pyblish-qml

0.2.8

07 Apr 10:57
Compare
Choose a tag to compare

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

untitled

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

31 Mar 07:21
Compare
Choose a tag to compare

Version 0.2.7

Main event; Terminal 2.0!

Detailed log messages

untitled

Filterable logging levels

untitled

  • Known issue: You currently can't exclude multiple levels, even though it looks like you can.

Global filter

untitled

In-terminal plug-in documentation

untitled

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

23 Mar 13:59
Compare
Choose a tag to compare

Version 0.2.6

  • Process now properly dies when parent dies
  • Known issue from 0.2.5 resolved; showing an already shown GUI
  • State 1.0 (See #60)
  • Refactoring

0.2.5

09 Mar 18:32
Compare
Choose a tag to compare

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

01 Mar 15:49
Compare
Choose a tag to compare

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

18 Feb 14:09
Compare
Choose a tag to compare

Version 0.2.3

  • Module consolidation (QML)

Version 0.2.2

  • Refactoring
  • Succeeded items now appear in green

Version 0.2.1

  • Publishing now stops upon failed validation
  • Errors are visualised
  • Added Stop button
  • Added Reset button

0.2.0

15 Feb 12:15
Compare
Choose a tag to compare

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.