
I’d like to introduce the 1.0 alpha release of Pyblish.
Pyblish is a plug-in driven automation framework for content and solves the issue of maintaining a fixed level of quality throughout resources shared amongst artists within an organisation.
Some of its benefits are:
To get started, head on to the Guide.
The alpha comes with an Autodesk Maya integration, a few demo plugins and example scenes to help you get started. If you’ve got any questions, post here, comment at the bottom of The Guide or in the Usergroup. If you find anything missing or is wrong in the guide, either tell us about it or fork the repository in which it lies and submit a pull-request.
Coming up next is GUIs, various other integrations - like for Nuke and Houdini - along with extensions - such as for Asana and Open Metadata. But we need your help! If you’d like to be part of something great and want to contribute, speak up or contact me directly at mar...@abstractractory.io
Looking forward to seeing what you can make with it!
All the best,
Abstract Factory Ltd. and the Pyblish contributors
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD9UOSvcKRU-O0tBE6UZLE67MjTQjNvcnQSU%2By0dGiq1g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CACt6GrmCqCN1Ppb_9cOxHnMmO-R8RrFZwCCU-yhTnoyGgkxisA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Thanks Eduardo, let me know if you need any help!
On 15 September 2014 18:02, Eduardo Grana <eduard...@gmail.com> wrote:
Hey Marcus!This looks great, I'll be testing this asap.Thanks you, Abstract Factory Ltd. and the Pyblish contributors!Cheers,Eduardo
On Sun, Sep 14, 2014 at 2:36 PM, Marcus Ottosson <konstr...@gmail.com> wrote:
<logo_macaw_small.png>
--
--
Eduardo Graña
www.eduardograna.com.ar
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD2gdpKJJ2fw5-jH515Sb%3D7owocmvCWkbfDrMKSJ%2Bwb5Q%40mail.gmail.com.
Hey Brennan, thanks a lot for your kind words.
Your comment made me realise that we need a feature-list for Pyblish, so I’m putting one together now, but I can at least say that we’re very much on the same page.
Here’s some links about where we are at currently with the GUI.
I noticed you had ZeroMQ in your list of dependencies, how are you using that currently?
Currently, not at all. That is for our upcoming GUI. As the GUI runs as an external process, we use ZMQ for IPC to whichever host it spawned from.
We’ve recently been implementing ZeroRPC in some of your tools which has worked really well.
That’s great! I’d love to hear more about this.
I’m sure I could develop a plugin that fits in your system and uses ZeroRPC to interact with a host app.
That would be amazing. I’ve got things up and running using ZeroMQ one its own, but I’m sure things can be vastly improved.
I’ll be back with an update on the feature list! Thanks!
Best,
Marcus
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/C20ABA2D-6C9F-4124-B53F-A23D81CA415F%40moonbotstudios.com.
Preliminary feature list is up!
Going up in the guide once the copywriting has been refined, so let me know if anything is unclear!
Best,
Marcus
We’re looking for web-developers to implement the Pyblish web frontend. If you’re interested or know anyone who might be interested, point him or her our way! And if you have any thoughts, concerns or ideas about anything, speak up here.
More information here:

Best,
Marcus
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD9UOSvcKRU-O0tBE6UZLE67MjTQjNvcnQSU%2By0dGiq1g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--
Eduardo Graña
www.eduardograna.com.ar
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CACt6GrmCqCN1Ppb_9cOxHnMmO-R8RrFZwCCU-yhTnoyGgkxisA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD2gdpKJJ2fw5-jH515Sb%3D7owocmvCWkbfDrMKSJ%2Bwb5Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/C20ABA2D-6C9F-4124-B53F-A23D81CA415F%40moonbotstudios.com.
--
--
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/a046a0ed-bff4-4f72-a875-958207d27b17%40googlegroups.com.
--
You received this message because you are subscribed to a topic in the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/python_inside_maya/KF2wYEdqe5g/unsubscribe.
To unsubscribe from this group and all its topics, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOAUpC-d6b2FgbPr-8MJ69s7tSgqj_NM0i%3DsvU76orUbyw%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOCMvSqJ4A6ZMVoQVf2%3DCsnM1u_XUoEHWBpD_SiQO%3DPhWQ%40mail.gmail.com.You received this message because you are subscribed to a topic in the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/python_inside_maya/KF2wYEdqe5g/unsubscribe.
To unsubscribe from this group and all its topics, send an email to python_inside_m...@googlegroups.com.
but I’ll be glad to answer questions you may have.
That’s good enough for me! Thanks, Chad!
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/3def88af-0c2a-4811-8f52-ffadf2dbc528%40googlegroups.com.
I've used Django as well and enjoyed it. But if you don't need an ORM or integrated template engine for your project, and all the bells and whistles, then Django can be a pretty heavy framework. The benefit of Flask is that it is a micro-framework, so you are just going to get the basics like the routing. And then you use the extras that you want on top of that.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmODga9UckkckZGZqkKu_6F0hj%3DmYBFm-LZYjfoTkJXjUXg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA3ZAiVwCa9H-t-ue398z9jRHjYsZHmifNhT6z7PbYpk7g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Thanks Cesar and Asi, it’s getting more clear to me what they both are used for.
About sqlAlchemy, or any database such as Firebase like I had considered initially. Ideally, there’d be as few players involved as possible, and it sounds like just using either Flask or Django would be enough to handle this task.
Here’s how I’m imagining the communication between the two.
The request would contain something like:
{
"name": "publish",
"source": "\\projects\spiderman\asset\my_asset.mb",
"ip": "192.168.0.20",
"time": "2014-09-29 6:44:12"
}
From which either Django or Flask could browse to the directory and fetch whatever data is related to the source and gather username and host-name from the ip.
How would the communication look with a database involved? What does a database provide to this picture?
Best,
Marcus
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/ba80ff04-40b3-4f54-975a-94a8dc4ec01c%40googlegroups.com.
How would the communication look with a database involved? What does a database provide to this picture?
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/ba80ff04-40b3-4f54-975a-94a8dc4ec01c%40googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/54f5f123-e963-49e2-9404-f798e216bf95%40googlegroups.com.
what type of communication you need from between Pyblish and Django directly?
I think this is best answered by the animation and description here:
https://github.com/abstractfactory/pyblish/issues/99
instead they both communicate to the database like this:
Pyblish -→ Database ←- Django/Flask
Thanks Asi, this makes sense, but doesn’t this assume that this database is used for other things, other than Pyblish and this web frontend?
Here is how I’m picturing communication currently.
In which Pyblish doesn’t know about Flask/Django, but it’s plug-in does. Pyblish is only running plug-ins exposed to it at run-time and has no knowledge about what they do or how they work. This way, a plug-in can access the surrounding pipeline, including databases.

If I understood your description, you meant to have a database inbetween plug-in and flask.

The database is either unique to this particular Web Frontend for Pyblish, but you probably meant to have Pyblish communicate with your native pipeline database and for it to communicate with Flask.

But wouldn’t that mean that you would have to “teach” your database about Pyblish? For example, when Pyblish - or rather, a Pyblish plug-in - connects and transmits information to your database, it would need to know to connect to the running Flask instance.
That sounds ideal if you are building Pyblish as one of your tools that all depend on a single database. But for a standalone application that integrates into your pipeline, don’t you think it’s better to have your pipeline integrate at the plug-in level, and thus not require any knowledge at all about Flask or other Frontends supplied by Pyblish?
# Psuedo-code
import mypipeline
import pyblish_flask
class MyPlugin(pyblish_flask.Plugin):
def process(self):
# In this case, Flask integration is hidden away and accepts
# data like a dictionary or what not.
self.notify(mypipeline.data)
Best,
Marcus
I’m not familiar with Firebase, but I don’t think it is the same thing as sqlAlchemy. sqlAlchemy is an ORM, which gives you an object-oriented abstraction around a database using models.
Ah, that makes sense. Thanks, Justin.
It sounds like you want a single network web service running (a backend powered by either Django or Flask), and for it to provide the RESTful interface to your Pyblish clients?
I think.. so..? From what I gather, you can communicate directly with a running instance of a Flask server, and I was thinking “why not just pass data to it directly then?”
If it isn’t meant to store real production data (as it may just be delegating out to other existing services), but you do want it to have some persistent storage, then it could use an sqlite database for storing state
Using a database for data persistence is making too many assumptions. I can’t assume to have users upload their production data to a database unique to Pyblish. I’d rather have Pyblish expose data already available elsewhere, ideally reading from disk directly.
In this early stage, the only information I’d like to pass along to Django/Flask are paths to the data I’d like it to display, along with perhaps a description of how to display it (“this is an image path”, “this is the source file” etc.)
Do you think that would work?
For persistence of the events themselves there might be a database or just a file. Nothing I’d expose to anyone as it would only be used in cases of Flask/Django restarting/crashing.
The only other thing I could guess you might have meant was to have a local Pyblish service on each host… but I highly doubt that is something you meant.
Could you expand on this?
The way I pictured the communication is the same as browsing to any website. A one-off connection is made, and some data is transferred and received. There is no lasting connection between Pyblish and Flask/Django.
Thanks,
Marcus
I’m not familiar with Firebase, but I don’t think it is the same thing as sqlAlchemy. sqlAlchemy is an ORM, which gives you an object-oriented abstraction around a database using models.
Ah, that makes sense. Thanks, Justin.
It sounds like you want a single network web service running (a backend powered by either Django or Flask), and for it to provide the RESTful interface to your Pyblish clients?
I think.. so..? From what I gather, you can communicate directly with a running instance of a Flask server, and I was thinking “why not just pass data to it directly then?”
If it isn’t meant to store real production data (as it may just be delegating out to other existing services), but you do want it to have some persistent storage, then it could use an sqlite database for storing state
Using a database for data persistence is making too many assumptions. I can’t assume to have users upload their production data to a database unique to Pyblish. I’d rather have Pyblish expose data already available elsewhere, ideally reading from disk directly.
In this early stage, the only information I’d like to pass along to Django/Flask are paths to the data I’d like it to display, along with perhaps a description of how to display it (“this is an image path”, “this is the source file” etc.)
Do you think that would work?
For persistence of the events themselves there might be a database or just a file. Nothing I’d expose to anyone as it would only be used in cases of Flask/Django restarting/crashing.
The only other thing I could guess you might have meant was to have a local Pyblish service on each host… but I highly doubt that is something you meant.
Could you expand on this?
The way I pictured the communication is the same as browsing to any website. A one-off connection is made, and some data is transferred and received. There is no lasting connection between Pyblish and Flask/Django.
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOB%2BDONG8Xm_vBeaEtftvjU7AOWuVSs4AxPu8ofBp%3DPR8Q%40mail.gmail.com.
A database doesn’t have to mean a big heavy beast that sits next to your application.
I suppose not, but doesn’t it introduce an additional interface for users if they interact with is using something like SqlAlchemy? Having one in the background for concurrency and state seems fair.
A few of those illustrations you made are constructed oddly. There shouldn’t be a database between your plugin and flask (and I am not sure that was implied as a suggestion)…
No, I’m sure it wasn’t, just putting it out there for clarity. Which other illustration did you find odd?
You have to host it with something, which is most commonly uWSGI, fronted by nginx.
Aah, did not know that. I expected Flask to run on a machine and other machines connecting to it’s development instance directly. What are the disadvantages of doing it this way? Maybe something I’ll need to read up on.. I’ve only briefly encountered nginx.
Sure. You just want a basic http service. You make an http request, and it does something and returns a response. Makes sense, and my assumption would be that you would have a Flask instance running on a server within a facility, and all of the client Pyblish libraries (through a plugin as you mentioned) would make requests to the service.
At least, that’s what I’d expect.
Thanks, Justin.
Best,
Marcus
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1ASQyEE61%2BkZK%2BN3dAxMwAuV7XmMMn6oXbbogoibcD3A%40mail.gmail.com.
A database doesn’t have to mean a big heavy beast that sits next to your application.
I suppose not, but doesn’t it introduce an additional interface for users if they interact with is using something like SqlAlchemy? Having one in the background for concurrency and state seems fair.
A few of those illustrations you made are constructed oddly. There shouldn’t be a database between your plugin and flask (and I am not sure that was implied as a suggestion)…
No, I’m sure it wasn’t, just putting it out there for clarity. Which other illustration did you find odd?
You have to host it with something, which is most commonly uWSGI, fronted by nginx.
Aah, did not know that. I expected Flask to run on a machine and other machines connecting to it’s development instance directly. What are the disadvantages of doing it this way? Maybe something I’ll need to read up on.. I’ve only briefly encountered nginx.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBFu9OzW6Df-AsefiMBfWSC28-QHHz2n%3DmoUfzBGee6xg%40mail.gmail.com.
It makes no sense to spin up a local web server on every machine, using the development server.
Sorry, I’m talking about running a single instance of Flask on a single computer, thus exposing this IP and port and have other computers connect to it. Like I would assume nginx would do, but wrapping a Flask instance too, is that right?
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1ZAQTXUXbDj4eGjq9ULOFM-sh8Z3TWEmBmnQYu%3D_VCwA%40mail.gmail.com.
On 29/09/2014 11:48 PM, "Marcus Ottosson" <konstr...@gmail.com> wrote:
>>
>> It makes no sense to spin up a local web server on every machine, using the development server.
>
> Sorry, I’m talking about running a single instance of Flask on a single computer, thus exposing this IP and port and have other computers connect to it. Like I would assume nginx would do, but wrapping a Flask instance too, is that right?
>
There we go. Exactly.
The development server is good enough for testing but generally not up to the task of server multiple clients. uWsgi will let you run your Flask code as an application, and handles stuff like multiple workers and being able to roll your Web service updates without downtime. nginx is the httpserver that can sit in front and reverse proxy to your uWsgi application. It can do stuff like load balancing between more than once instance of your app, and is really strong at caching and serving static content without needing to constantly make your application service do the work.
So ya you spin up your single application server and all your client machines talk to it. Where or not it stores any state behind the scenes is of no consequence to the clients
>>>>>> In which Pyblish doesn’t know about Flask/Django, but it’s plug-in does. Pyblish is only running plug-ins exposed to it at run-time and has no knowledge about what they do or how they work. This way, a plug-in can access the surrounding pipeline, including databases.
>>>>>>
>>>>>> If I understood your description, you meant to have a database inbetween plug-in and flask.
>>>>>>
>>>>>> The database is either unique to this particular Web Frontend for Pyblish, but you probably meant to have Pyblish communicate with your native pipeline database and for it to communicate with Flask.
>>>>>>
> To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmODxngFgVLp%3D9YEhOH-D0V-hn%3DXXqGY_hrqt2P%3D7Rd9K0w%40mail.gmail.com.
The development server is good enough for testing but generally not up to the task of server multiple clients.
Aaah, this is what I did not understand. Makes sense, thanks.
Best,
Marcus
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA37zMG3PTZZKtVvG_YkztF%2BSNBaeebartUYumH3b7r1BQ%40mail.gmail.com.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
>>>>> To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOB%2BDONG8Xm_vBeaEtftvjU7AOWuVSs4AxPu8ofBp%3DPR8Q%40mail.gmail.com.
>>>>>
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
>>>> To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1ASQyEE61%2BkZK%2BN3dAxMwAuV7XmMMn6oXbbogoibcD3A%40mail.gmail.com.
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>>
>>>
>>>
>>> --
>>> Marcus Ottosson
>>> konstr...@gmail.com
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
>>> To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBFu9OzW6Df-AsefiMBfWSC28-QHHz2n%3DmoUfzBGee6xg%40mail.gmail.com.
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
>> To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1ZAQTXUXbDj4eGjq9ULOFM-sh8Z3TWEmBmnQYu%3D_VCwA%40mail.gmail.com.
>>
>> For more options, visit https://groups.google.com/d/optout.
>
>
>
>
> --
> Marcus Ottosson
> konstr...@gmail.com
>
> --
> You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmODxngFgVLp%3D9YEhOH-D0V-hn%3DXXqGY_hrqt2P%3D7Rd9K0w%40mail.gmail.com.
>
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsub...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA37zMG3PTZZKtVvG_YkztF%2BSNBaeebartUYumH3b7r1BQ%40mail.gmail.com.
...<div title="MDH:Jmd0O8KgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXpl OjEzcHgiPlRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgZ29vZCBlbm91Z2ggZm9yIHRlc3Rpbmcg KipidXQgZ2VuZXJhbGx5IG5vdCB1cCB0byB0aGUgdGFzayBvZiBzZXJ2ZXIgbXVsdGlwbGUgY2xp ZW50cy4qKjwvc3Bhbj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxzYW5zLXNl cmlmO2ZvbnQtc2l6ZToxM3B4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZv bnQtZmFtaWx5OmFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHgiPkFhYWgsIHRoaXMgaXMg d2hhdCBJIGRpZCBub3QgdW5kZXJzdGFuZC4gTWFrZXMgc2Vuc2UsIHRoYW5rcy48L3NwYW4+PC9k aXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsc2Fucy1zZXJpZjtmb250LXNp emU6MTNweCI+PGJyPjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTph cmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4Ij5CZXN0LDwvc3Bhbj48L2Rpdj48ZGl2Pjxz cGFuIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4Ij5N YXJjdXM8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNz PSJnbWFpbF9xdW90ZSI+T24gMjkgU2VwdGVtYmVyIDIwMTQgMTE6NTUsIEp1c3RpbiBJc3JhZWwg PHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86anVzdGluaXNyYWVsQGdtYWlsLmNv bSIgdGFyZ2V0PSJfYmxhbmsiPmp1c3RpbmlzcmFlbEBnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4g d3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjow IDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxw IGRpcj0ibHRyIj48c3Bhbj48YnI+Ck9uIDI5LzA5LzIwMTQgMTE6NDggUE0sICJNYXJjdXMgT3R0 b3Nzb24iICZsdDs8YSBocmVmPSJtYWlsdG86a29uc3RydWt0aW9uQGdtYWlsLmNvbSIgdGFyZ2V0 PSJfYmxhbmsiPmtvbnN0cnVrdGlvbkBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+CiZndDsm Z3Q7PGJyPgomZ3Q7Jmd0OyBJdCBtYWtlcyBubyBzZW5zZSB0byBzcGluIHVwIGEgbG9jYWwgd2Vi IHNlcnZlciBvbiBldmVyeSBtYWNoaW5lLCB1c2luZyB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyLjxi cj4KJmd0Ozxicj4KJmd0OyBTb3JyeSwgSeKAmW0gdGFsa2luZyBhYm91dCBydW5uaW5nIGEgc2lu Z2xlIGluc3RhbmNlIG9mIEZsYXNrIG9uIGEgc2luZ2xlIGNvbXB1dGVyLCB0aHVzIGV4cG9zaW5n IHRoaXMgSVAgYW5kIHBvcnQgYW5kIGhhdmUgb3RoZXIgY29tcHV0ZXJzIGNvbm5lY3QgdG8gaXQu IExpa2UgSSB3b3VsZCBhc3N1bWUgbmdpbnggd291bGQgZG8sIGJ1dCB3cmFwcGluZyBhIEZsYXNr IGluc3RhbmNlIHRvbywgaXMgdGhhdCByaWdodD88YnI+CiZndDs8YnI+PC9zcGFuPgpUaGVyZSB3 ZSBnby4gRXhhY3RseS4gPGJyPgpUaGUgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIGdvb2QgZW5vdWdo IGZvciB0ZXN0aW5nIGJ1dCBnZW5lcmFsbHkgbm90IHVwIHRvIHRoZSB0YXNrIG9mIHNlcnZlciBt dWx0aXBsZSBjbGllbnRzLiB1V3NnaSB3aWxsIGxldCB5b3UgcnVuIHlvdXIgRmxhc2sgY29kZSBh cyBhbiBhcHBsaWNhdGlvbiwgYW5kIGhhbmRsZXMgc3R1ZmYgbGlrZSBtdWx0aXBsZSB3b3JrZXJz IGFuZCBiZWluZyBhYmxlIHRvIHJvbGwgeW91ciBXZWIgc2VydmljZSB1cGRhdGVzIHdpdGhvdXQg ZG93bnRpbWUuIG5naW54IGlzIHRoZSBodHRw7oeqc2VydmVyIHRoYXQgY2FuIHNpdCBpbiBmcm9u dCBhbmQgcmV2ZXJzZSBwcm94eSB0byB5b3VyIHVXc2dpIGFwcGxpY2F0aW9uLiBJdCBjYW4gZG8g c3R1ZmYgbGlrZSBsb2FkIGJhbGFuY2luZyBiZXR3ZWVuIG1vcmUgdGhhbiBvbmNlIGluc3RhbmNl IG9mIHlvdXIgYXBwLCBhbmQgaXMgcmVhbGx5IHN0cm9uZyBhdCBjYWNoaW5nIGFuZCBzZXJ2aW5n IHN0YXRpYyBjb250ZW50IHdpdGhvdXQgbmVlZGluZyB0byBjb25zdGFudGx5IG1ha2UgeW91ciBh cHBsaWNhdGlvbiBzZXJ2aWNlIGRvIHRoZSB3b3JrLiA8L3A+CjxwIGRpcj0ibHRyIj5TbyB5YSB5 b3Ugc3BpbiB1cCB5b3VyIHNpbmdsZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgYW5kIGFsbCB5b3VyIGNs aWVudCBtYWNoaW5lcyB0YWxrIHRvIGl0LiBXaGVyZSBvciBub3QgaXQgc3RvcmVzIGFueSBzdGF0 ZSBiZWhpbmQgdGhlIHNjZW5lcyBpcyBvZiBubyBjb25zZXF1ZW5jZSB0byB0aGUgY2xpZW50cyA8 L3A+CjxwIGRpcj0ibHRyIj48L3A+PGRpdj48ZGl2PiZndDsg4oCLPGJyPgomZ3Q7PGJyPgomZ3Q7 IE9uIDI5IFNlcHRlbWJlciAyMDE0IDExOjE1LCBKdXN0aW4gSXNyYWVsICZsdDs8YSBocmVmPSJt YWlsdG86anVzdGluaXNyYWVsQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmp1c3RpbmlzcmFl bEBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+CiZndDsmZ3Q7PGJyPgomZ3Q7Jmd0Ozxicj4K Jmd0OyZndDs8YnI+CiZndDsmZ3Q7IE9uIE1vbiwgU2VwIDI5LCAyMDE0IGF0IDExOjAwIFBNLCBN YXJjdXMgT3R0b3Nzb24gJmx0OzxhIGhyZWY9Im1haWx0bzprb25zdHJ1a3Rpb25AZ21haWwuY29t IiB0YXJnZXQ9Il9ibGFuayI+a29uc3RydWt0aW9uQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxi cj4KJmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBBIGRhdGFiYXNlIGRvZXNu 4oCZdCBoYXZlIHRvIG1lYW4gYSBiaWcgaGVhdnkgYmVhc3QgdGhhdCBzaXRzIG5leHQgdG8geW91 ciBhcHBsaWNhdGlvbi48YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7IEkgc3VwcG9z ZSBub3QsIGJ1dCBkb2VzbuKAmXQgaXQgaW50cm9kdWNlIGFuIGFkZGl0aW9uYWwgaW50ZXJmYWNl IGZvciB1c2VycyBpZiB0aGV5IGludGVyYWN0IHdpdGggaXMgdXNpbmcgc29tZXRoaW5nIGxpa2Ug U3FsQWxjaGVteT8gSGF2aW5nIG9uZSBpbiB0aGUgYmFja2dyb3VuZCBmb3IgY29uY3VycmVuY3kg YW5kIHN0YXRlIHNlZW1zIGZhaXIuPGJyPgomZ3Q7Jmd0Ozxicj4KJmd0OyZndDsgVGhhdCBpbnRl cmZhY2Ugd291bGRuJ3QgYmUgYWRkaXRpb24gbm9yIGV4cG9zZWQgZGlyZWN0bHkgdG8geW91ciB1 c2VycyAoaWRlYWxseSkuIFRoZSBwb2ludCBvZiB0aGUgZGF0YWJhc2UgaXMgdG8gc3RvcmUgdGhp bmdzIHBlcnNpc3RlbnRseSBhbmQgdG8gcHJvdmlkZSByb2J1c3Qgd2F5cyBmb3IgcXVlcnlpbmcg YWdhaW5zdCBpdCwgd2hlcmUgaXQgY2FuIGJlIG9wdGltaXplZCBmb3IgZmFzdCBhY2Nlc3MuIFlv dXIgb3duIGFwcGxpY2F0aW9uIG1pZ2h0IGJlIHRoZSBvbmUgdG8gdXNlIHNxbGFsY2hlbXkgdG8g aW50ZXJmYWNlIHdpdGggeW91ciBkYXRhYmFzZSwgYW5kIHlvdSB3b3VsZCBleHBvc2UgYW4gQVBJ IHRvIHRoZSBhY3R1YWwgdXNlcnMgdGhhdCBjb250cm9scyB0aGVpciBhY2Nlc3MuPGJyPgomZ3Q7 Jmd0OyAmbmJzcDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsgQSBm ZXcgb2YgdGhvc2UgaWxsdXN0cmF0aW9ucyB5b3UgbWFkZSBhcmUgY29uc3RydWN0ZWQgb2RkbHku IFRoZXJlIHNob3VsZG7igJl0IGJlIGEgZGF0YWJhc2UgYmV0d2VlbiB5b3VyIHBsdWdpbiBhbmQg Zmxhc2sgKGFuZCBJIGFtIG5vdCBzdXJlIHRoYXQgd2FzIGltcGxpZWQgYXMgYSBzdWdnZXN0aW9u KeKApjxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgTm8sIEnigJltIHN1cmUgaXQg d2FzbuKAmXQsIGp1c3QgcHV0dGluZyBpdCBvdXQgdGhlcmUgZm9yIGNsYXJpdHkuIFdoaWNoIG90 aGVyIGlsbHVzdHJhdGlvbiBkaWQgeW91IGZpbmQgb2RkPzxicj4KJmd0OyZndDs8YnI+CiZndDsm Z3Q7PGJyPgomZ3Q7Jmd0OyBXZWxsIHRoZXJlIHdlcmUgdHdvIGlsbHVzdHJhdGlvbnMgdGhhdCBk ZXBpY3RlZCBhIGRhdGFiYXNlIHNpdHRpbmcgYmV0d2VlbiB0aGUgcGx1Z2luIGFuZCBhIGZsYXNr IGluc3RhbmNlLCB3aGljaCBJIGRpZG4ndCB1bmRlcnN0YW5kLjxicj4KJmd0OyZndDsgJm5ic3A7 PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IFlvdSBoYXZlIHRvIGhv c3QgaXQgd2l0aCBzb21ldGhpbmcsIHdoaWNoIGlzIG1vc3QgY29tbW9ubHkgdVdTR0ksIGZyb250 ZWQgYnkgbmdpbnguPGJyPgomZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyBBYWgsIGRpZCBu b3Qga25vdyB0aGF0LiBJIGV4cGVjdGVkIEZsYXNrIHRvIHJ1biBvbiBhIG1hY2hpbmUgYW5kIG90 aGVyIG1hY2hpbmVzIGNvbm5lY3RpbmcgdG8gaXTigJlzIGRldmVsb3BtZW50IGluc3RhbmNlIGRp cmVjdGx5LiBXaGF0IGFyZSB0aGUgZGlzYWR2YW50YWdlcyBvZiBkb2luZyBpdCB0aGlzIHdheT8g TWF5YmUgc29tZXRoaW5nIEnigJlsbCBuZWVkIHRvIHJlYWQgdXAgb24uLiBJ4oCZdmUgb25seSBi cmllZmx5IGVuY291bnRlcmVkIG5naW54Ljxicj4KJmd0OyZndDs8YnI+CiZndDsmZ3Q7PGJyPgom Z3Q7Jmd0OyBZZWEsIEkgYW0gbm90IHJlYWxseSB1bmRlcnN0YW5kaW5nIHRoaXMgYXJjaGl0ZWN0 dXJlLCB3aGljaCBsZWFkcyBtZSB0byBiZWxpZXZlIHRoYXQgbWF5YmUgeW91IGRvIG5lZWQgdG8g cmVhZCB1cCBhIGxpdHRsZSBiaXQgbW9yZSBvbiB3aGF0IHlvdSB3YW50IHRvIHVzZSBGbGFzayBm b3IuIEl0IG1ha2VzIG5vIHNlbnNlIHRvIHNwaW4gdXAgYSBsb2NhbCB3ZWIgc2VydmVyIG9uIGV2 ZXJ5IG1hY2hpbmUsIHVzaW5nIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIuIFdoYXQgaXMgaXQgZm9y PyBXaHkgY2FuJ3QgdGhlIGFjdHVhbCBjbGllbnQgdG9vbCBkbyBleGFjdGx5IHdoYXQgaXQgbmVl ZHMgdG8gZG8gZGlyZWN0bHksIG9yIGV2ZXJ5b25lIGdvZXMgdGhyb3VnaCBhIHNoYXJlZCBzZXJ2 aWNlIHRoYXQgcGVyZm9ybXMgYWxsIG9mIHRoZSBhY3Rpb25zIG9uIHRoZWlyIGJlaGFsZj8gSXMg aXQgdGhhdCB5b3UgYXJlIHRyeWluZyB0byB1c2UgRmxhc2sgYXMgYSB3YXkgdG8gcHJvdmlkZSBh IHVzZXIgaW50ZXJmYWNlIG9uIGVhY2ggbG9jYWwgbWFjaGluZT8gV2hhdCBpcyB0aGUgcmVhc29u IHlvdSBmZWVsIHlvdSBuZWVkIGEgd2ViIHNlcnZpY2Ugb24gZWFjaCBsb2NhbCBjbGllbnQ/IElm IHlvdSBkb24ndCB3YW50IGEgY2VudHJhbGl6ZWQgc2VydmljZSwgdGhlbiBpdCB3b3VsZCBzZWVt IHlvdSBqdXN0IHdhbnQgYSBkZXNrdG9wIGFwcGxpY2F0aW9uIHRoYXQgZG9lcyB0aGUgYWN0aW9u cyBkaXJlY3RseS4gV2hhdCBraW5kIG9mIHRhc2tzIHdpbGwgdGhpcyBsb2NhbCBodHRwIHNlcnZp Y2UgcGVyZm9ybSB0aGF0IG1ha2VzIHlvdSBmZWVsIGl0IGlzIHRoZSByaWdodCBjaG9pY2U/IEZv ciBhbGwgSSBrbm93LCB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIHRoYXQgSSBoYXZlIGp1c3Qgbm90 IHlldCBoZWFyZC4mbmJzcDs8YnI+CiZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyBXaGVuIEkgdGFsa2Vk IGFib3V0IHVXU0dJK25naW54LCB0aGF0IGlzIGp1c3QgdGhlIGNvbW1vbiBzdGFjayBwZW9wbGUg bGlrZSB0byB1c2UgdGhlc2UgZGF5cywgd2hlbiBydW5uaW5nIGEgcHJvZHVjdGlvbiBGbGFzayBh cHBsaWNhdGlvbiAoYXMgYSBzaGFyZWQgcmVzb3VyY2UpLiB1V1NHSSBjYW4gaGFuZGxlIGEgcG9v bCBvZiBpbnN0YW5jZXMgb2YgeW91ciBhcHBsaWNhdGlvbiBmb3IgaW1wcm92ZWQgY29uY3VycmVu Y3kuPGJyPgomZ3Q7Jmd0OyAmbmJzcDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsgU3VyZS4gWW91IGp1c3Qgd2FudCBhIGJhc2ljIGh0dHAgc2VydmljZS4gWW91IG1h a2UgYW4gaHR0cCByZXF1ZXN0LCBhbmQgaXQgZG9lcyBzb21ldGhpbmcgYW5kIHJldHVybnMgYSBy ZXNwb25zZS4gTWFrZXMgc2Vuc2UsIGFuZCBteSBhc3N1bXB0aW9uIHdvdWxkIGJlIHRoYXQgeW91 IHdvdWxkIGhhdmUgYSBGbGFzayBpbnN0YW5jZSBydW5uaW5nIG9uIGEgc2VydmVyIHdpdGhpbiBh IGZhY2lsaXR5LCBhbmQgYWxsIG9mIHRoZSBjbGllbnQgUHlibGlzaCBsaWJyYXJpZXMgKHRocm91 Z2ggYSBwbHVnaW4gYXMgeW91IG1lbnRpb25lZCkgd291bGQgbWFrZSByZXF1ZXN0cyB0byB0aGUg c2VydmljZS48YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7IEF0IGxlYXN0LCB0aGF0 4oCZcyB3aGF0IEnigJlkIGV4cGVjdC48YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 IFRoYW5rcywgSnVzdGluLjxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgQmVzdCw8 YnI+CiZndDsmZ3Q7Jmd0OyBNYXJjdXM8YnI+CiZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 IOKAizxicj4KJmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsgT24gMjkgU2VwdGVtYmVyIDIw MTQgMTA6NDUsIEp1c3RpbiBJc3JhZWwgJmx0OzxhIGhyZWY9Im1haWx0bzpqdXN0aW5pc3JhZWxA Z21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+anVzdGluaXNyYWVsQGdtYWlsLmNvbTwvYT4mZ3Q7 IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBBIGZldyBv ZiB0aG9zZSBpbGx1c3RyYXRpb25zIHlvdSBtYWRlIGFyZSBjb25zdHJ1Y3RlZCBvZGRseS4gVGhl cmUgc2hvdWxkbid0IGJlIGEgZGF0YWJhc2UgYmV0d2VlbiB5b3VyIHBsdWdpbiBhbmQgZmxhc2sg KGFuZCBJIGFtIG5vdCBzdXJlIHRoYXQgd2FzIGltcGxpZWQgYXMgYSBzdWdnZXN0aW9uKS4uLjxi cj4KJmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyBPbiBNb24sIFNlcCAyOSwg MjAxNCBhdCA5OjU3IFBNLCBNYXJjdXMgT3R0b3Nzb24gJmx0OzxhIGhyZWY9Im1haWx0bzprb25z dHJ1a3Rpb25AZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+a29uc3RydWt0aW9uQGdtYWlsLmNv bTwvYT4mZ3Q7IHdyb3RlOjxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsgSeKAmW0gbm90IGZhbWlsaWFyIHdpdGggRmlyZWJhc2UsIGJ1dCBJ IGRvbuKAmXQgdGhpbmsgaXQgaXMgdGhlIHNhbWUgdGhpbmcgYXMgc3FsQWxjaGVteS4gc3FsQWxj aGVteSBpcyBhbiBPUk0sIHdoaWNoIGdpdmVzIHlvdSBhbiBvYmplY3Qtb3JpZW50ZWQgYWJzdHJh Y3Rpb24gYXJvdW5kIGEgZGF0YWJhc2UgdXNpbmcgbW9kZWxzLjxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IEFoLCB0aGF0IG1ha2VzIHNlbnNlLiBUaGFu a3MsIEp1c3Rpbi48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7IEl0IHNvdW5kcyBsaWtlIHlvdSB3YW50IGEgc2luZ2xlIG5ldHdvcmsgd2Vi IHNlcnZpY2UgcnVubmluZyAoYSBiYWNrZW5kIHBvd2VyZWQgYnkgZWl0aGVyIERqYW5nbyBvciBG bGFzayksIGFuZCBmb3IgaXQgdG8gcHJvdmlkZSB0aGUgUkVTVGZ1bCBpbnRlcmZhY2UgdG8geW91 ciBQeWJsaXNoIGNsaWVudHM/PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsm Z3Q7Jmd0OyZndDsgSSB0aGluay4uIHNvLi4/IEZyb20gd2hhdCBJIGdhdGhlciwgeW91IGNhbiBj b21tdW5pY2F0ZSBkaXJlY3RseSB3aXRoIGEgcnVubmluZyBpbnN0YW5jZSBvZiBhIEZsYXNrIHNl cnZlciwgYW5kIEkgd2FzIHRoaW5raW5nIOKAnHdoeSBub3QganVzdCBwYXNzIGRhdGEgdG8gaXQg ZGlyZWN0bHkgdGhlbj/igJ08YnI+CiZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZn dDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsgRmxhc2sgaXMganVzdCBhbnkgb3RoZXIgd2ViIGZyYW1l d29yay4gWW91IGhhdmUgdG8gaG9zdCBpdCB3aXRoIHNvbWV0aGluZywgd2hpY2ggaXMgbW9zdCBj b21tb25seSB1V1NHSSwgZnJvbnRlZCBieSBuZ2lueC4gRm9yIGRldmVsb3BtZW50IHB1cnBvc2Vz IHlvdSBjYW4gdXN1YWxseSB1c2UgdGhlIGluY2x1ZGVkIGRldmVsb3BtZW50IHNlcnZlciB0byBy dW4gaXQgZGlyZWN0bHkgYXMgYSBzZWxmLWhvc3RlZCBpbnN0YW5jZS4gVGhlbiB1bHRpbWF0ZWx5 IHlvdSBlbmQgdXAgd2l0aCBhbiBodHRwIHNlcnZlci4gSXQgaXMgdXAgdG8geW91IHRvIGRldmVs b3AgYW5kIGV4cG9zZSBodHRwIGVuZHBvaW50cyB0aGF0IGNvdWxkIGVpdGhlciBiZSBhIHZpZXcg dGhhdCBkZWxpdmVycyBodG1sL2pzLCBvciBwdXJlbHkgY29tbXVuaWNhdGVzIGJhY2sgYW5kIGZv cnRoIGluIGpzb24uIFJFU1QgZW5kcG9pbnRzIHRlbmQgdG8gZGVhbCBpbiBqc29uIGJhY2sgYW5k IGZvcnRoLCB3aXRoIHRoZSBVUkxzIGZvbGxvd2luZyBhIGNvbW1vbiBzdHJ1Y3R1cmUgYW5kIHVz aW5nIEdFVC9QT1NUL1BVVC9ERUxFVEUvSEVBRCBtZXRob2RzLiZuYnNwOzxicj4KJmd0OyZndDsm Z3Q7Jmd0OyAmbmJzcDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsm Z3Q7Jmd0OyZndDsmZ3Q7IElmIGl0IGlzbuKAmXQgbWVhbnQgdG8gc3RvcmUgcmVhbCBwcm9kdWN0 aW9uIGRhdGEgKGFzIGl0IG1heSBqdXN0IGJlIGRlbGVnYXRpbmcgb3V0IHRvIG90aGVyIGV4aXN0 aW5nIHNlcnZpY2VzKSwgYnV0IHlvdSBkbyB3YW50IGl0IHRvIGhhdmUgc29tZSBwZXJzaXN0ZW50 IHN0b3JhZ2UsIHRoZW4gaXQgY291bGQgdXNlIGFuIHNxbGl0ZSBkYXRhYmFzZSBmb3Igc3Rvcmlu ZyBzdGF0ZTxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 IFVzaW5nIGEgZGF0YWJhc2UgZm9yIGRhdGEgcGVyc2lzdGVuY2UgaXMgbWFraW5nIHRvbyBtYW55 IGFzc3VtcHRpb25zLiBJIGNhbuKAmXQgYXNzdW1lIHRvIGhhdmUgdXNlcnMgdXBsb2FkIHRoZWly IHByb2R1Y3Rpb24gZGF0YSB0byBhIGRhdGFiYXNlIHVuaXF1ZSB0byBQeWJsaXNoLiBJ4oCZZCBy YXRoZXIgaGF2ZSBQeWJsaXNoIGV4cG9zZSBkYXRhIGFscmVhZHkgYXZhaWxhYmxlIGVsc2V3aGVy ZSwgaWRlYWxseSByZWFkaW5nIGZyb20gZGlzayBkaXJlY3RseS48YnI+CiZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBJbiB0aGlzIGVhcmx5IHN0YWdlLCB0aGUg b25seSBpbmZvcm1hdGlvbiBJ4oCZZCBsaWtlIHRvIHBhc3MgYWxvbmcgdG8gRGphbmdvL0ZsYXNr IGFyZSBwYXRocyB0byB0aGUgZGF0YSBJ4oCZZCBsaWtlIGl0IHRvIGRpc3BsYXksIGFsb25nIHdp dGggcGVyaGFwcyBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBkaXNwbGF5IGl0ICjigJx0aGlzIGlz IGFuIGltYWdlIHBhdGjigJ0sIOKAnHRoaXMgaXMgdGhlIHNvdXJjZSBmaWxl4oCdIGV0Yy4pPGJy PgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsgRG8geW91IHRo aW5rIHRoYXQgd291bGQgd29yaz88YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyBGb3IgcGVyc2lzdGVuY2Ugb2YgdGhlIGV2ZW50cyB0aGVtc2VsdmVzIHRo ZXJlIG1pZ2h0IGJlIGEgZGF0YWJhc2Ugb3IganVzdCBhIGZpbGUuIE5vdGhpbmcgSeKAmWQgZXhw b3NlIHRvIGFueW9uZSBhcyBpdCB3b3VsZCBvbmx5IGJlIHVzZWQgaW4gY2FzZXMgb2YgRmxhc2sv RGphbmdvIHJlc3RhcnRpbmcvY3Jhc2hpbmcuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7IEkgdW5kZXJzdGFuZCBjb21wbGV0ZWx5LiBZb3UgYXJlIHNheWluZyBQeWJs aXNoIGhhcyBubyByZWFsIHB1Ymxpc2gvcHJvZHVjdGlvbiBkYXRhIHRvIGRlYWwgd2l0aC4gSXQg aXMgcHVyZWx5IGEgc2VydmljZS4gQW5kIHRoZSBvbmx5IGRhdGEgaXMgbWlnaHQgbmVlZCB0byBz dG9yZSBpcyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhpbmcgKGFjdGl2ZSB0YXNrcy9vcGVyYXRp b25zLCBzdGF0cywgY29uZmlnLCBjYWNoaW5nLCAuLi4pLiBBIGRhdGFiYXNlIGRvZXNuJ3QgaGF2 ZSB0byBtZWFuIGEgYmlnIGhlYXZ5IGJlYXN0IHRoYXQgc2l0cyBuZXh0IHRvIHlvdXIgYXBwbGlj YXRpb24uIEl0IGNvdWxkIGJlIHNvbWV0aGluZyByZWFsbHkgc21hbGwgbGlrZSBzcWxpdGUsIG9y IHZhcmlvdXMgZW1iZWRkZWQga2V5L3ZhbHVlIHN0b3JlcyB0aGF0IGp1c3QgbGl2ZSB3aXRoaW4g eW91ciBhcHBsaWNhdGlvbi4gQW4gZXhhbXBsZSB3b3VsZCBiZSBpZiBvbmUgZ3V5IGlzIHBlcmZv cm1pbmcgYW4gb3BlcmF0aW9uLCBhbmQgYW5vdGhlciBndXkgd2FudHMgdG8gbGlzdCB3aGF0IGlz IGN1cnJlbnRseSBpbiBwcm9ncmVzcy4gWW91IHdvdWxkIG5lZWQgc29tZSBzb3J0IG9mIHN0b3Jl IGZvciB5b3VyIGRhdGEgKGFzIHRlbXBvcmFyeSBhcyBpdCBtaWdodCBiZSkgc28gdGhhdCBtdWx0 aXBsZSBodHRwIHJlcXVlc3RzIGNhbiBhY2Nlc3MgdGhlIHN0YXRlLiZuYnNwOzxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgVGhlIG9ubHkg b3RoZXIgdGhpbmcgSSBjb3VsZCBndWVzcyB5b3UgbWlnaHQgaGF2ZSBtZWFudCB3YXMgdG8gaGF2 ZSBhIGxvY2FsIFB5Ymxpc2ggc2VydmljZSBvbiBlYWNoIGhvc3TigKYgYnV0IEkgaGlnaGx5IGRv dWJ0IHRoYXQgaXMgc29tZXRoaW5nIHlvdSBtZWFudC48YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBDb3VsZCB5b3UgZXhwYW5kIG9uIHRoaXM/PGJyPgom Z3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IFdlbGwsIGZvciBhIG1vbWVudCBJ IHRob3VnaHQgeW91IHdlcmUgc3VnZ2VzdGluZyB0aGF0IHlvdSB3YW50ZWQgdG8gcnVuIGEgZmxh c2sgaW5zdGFuY2Ugb24gZXZlcnkgY2xpZW50IG1hY2hpbmUuIEJ1dCBJIGNvdWxkbid0IHVuZGVy c3RhbmQgdGhlIHBvaW50IG9mIHRoYXQsIHNvIEkgZGlkbid0IGdpdmUgaXQgdG9vIG11Y2ggdGhv dWdodCBhZnRlciB0aGF0LiZuYnNwOzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyAmbmJzcDs8YnI+CiZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyBUaGUgd2F5IEkgcGlj dHVyZWQgdGhlIGNvbW11bmljYXRpb24gaXMgdGhlIHNhbWUgYXMgYnJvd3NpbmcgdG8gYW55IHdl YnNpdGUuIEEgb25lLW9mZiBjb25uZWN0aW9uIGlzIG1hZGUsIGFuZCBzb21lIGRhdGEgaXMgdHJh bnNmZXJyZWQgYW5kIHJlY2VpdmVkLiBUaGVyZSBpcyBubyBsYXN0aW5nIGNvbm5lY3Rpb24gYmV0 d2VlbiBQeWJsaXNoIGFuZCBGbGFzay9EamFuZ28uPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgom Z3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7IFN1cmUuIFlvdSBqdXN0IHdhbnQg YSBiYXNpYyBodHRwIHNlcnZpY2UuIFlvdSBtYWtlIGFuIGh0dHAgcmVxdWVzdCwgYW5kIGl0IGRv ZXMgc29tZXRoaW5nIGFuZCByZXR1cm5zIGEgcmVzcG9uc2UuIE1ha2VzIHNlbnNlLCBhbmQgbXkg YXNzdW1wdGlvbiB3b3VsZCBiZSB0aGF0IHlvdSB3b3VsZCBoYXZlIGEgRmxhc2sgaW5zdGFuY2Ug cnVubmluZyBvbiBhIHNlcnZlciB3aXRoaW4gYSBmYWNpbGl0eSwgYW5kIGFsbCBvZiB0aGUgY2xp ZW50IFB5Ymxpc2ggbGlicmFyaWVzICh0aHJvdWdoIGEgcGx1Z2luIGFzIHlvdSBtZW50aW9uZWQp IHdvdWxkIG1ha2UgcmVxdWVzdHMgdG8gdGhlIHNlcnZpY2UuPGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7 ICZuYnNwOzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 IFRoYW5rcyw8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IE1hcmN1czxicj4KJmd0OyZndDsmZ3Q7 Jmd0OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IOKAizxicj4KJmd0OyZndDsmZ3Q7Jmd0 OyZndDs8YnI+CiZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IE9uIDI5IFNlcHRlbWJlciAyMDE0IDA5OjQ4 LCBNYXJjdXMgT3R0b3Nzb24gJmx0OzxhIGhyZWY9Im1haWx0bzprb25zdHJ1a3Rpb25AZ21haWwu Y29tIiB0YXJnZXQ9Il9ibGFuayI+a29uc3RydWt0aW9uQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3Rl Ojxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7Jmd0Ozxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7Jmd0OyB3aGF0IHR5cGUgb2YgY29tbXVuaWNhdGlvbiB5b3UgbmVlZCBmcm9tIGJldHdl ZW4gUHlibGlzaCBhbmQgRGphbmdvIGRpcmVjdGx5Pzxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsm Z3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgSSB0aGluayB0aGlzIGlzIGJlc3QgYW5z d2VyZWQgYnkgdGhlIGFuaW1hdGlvbiBhbmQgZGVzY3JpcHRpb24gaGVyZTo8YnI+CiZndDsmZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYWJzdHJhY3RmYWN0 b3J5L3B5Ymxpc2gvaXNzdWVzLzk5IiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29t Lzx3YnI+YWJzdHJhY3RmYWN0b3J5L3B5Ymxpc2gvPHdicj5pc3N1ZXMvOTk8L2E+PGJyPgomZ3Q7 Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7 IGluc3RlYWQgdGhleSBib3RoIGNvbW11bmljYXRlIHRvIHRoZSBkYXRhYmFzZSBsaWtlIHRoaXM6 PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7IFB5Ymxpc2ggLeKGkiBEYXRhYmFzZSDi hpAtIERqYW5nby9GbGFzazxicj4KJmd0OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0 OyZndDsmZ3Q7Jmd0OyZndDsgVGhhbmtzIEFzaSwgdGhpcyBtYWtlcyBzZW5zZSwgYnV0IGRvZXNu 4oCZdCB0aGlzIGFzc3VtZSB0aGF0IHRoaXMgZGF0YWJhc2UgaXMgdXNlZCBmb3Igb3RoZXIgdGhp bmdzLCBvdGhlciB0aGFuIFB5Ymxpc2ggYW5kIHRoaXMgd2ViIGZyb250ZW5kPzxicj4KJmd0OyZn dDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0OyZndDsgSGVyZSBpcyBo b3cgSeKAmW0gcGljdHVyaW5nIGNvbW11bmljYXRpb24gY3VycmVudGx5Ljxicj4KJmd0OyZndDsm Z3Q7Jmd0OyZndDsmZ3Q7PGJyPjwvZGl2PjwvZGl2PjxzcGFuPgomZ3Q7Jmd0OyZndDsmZ3Q7Jmd0 OyZndDsgSW4gd2hpY2ggUHlibGlzaCBkb2VzbuKAmXQga25vdyBhYm91dCBGbGFzay9EamFuZ28s IGJ1dCBpdOKAmXMgcGx1Zy1pbiBkb2VzLiBQeWJsaXNoIGlzIG9ubHkgcnVubmluZyBwbHVnLWlu cyBleHBvc2VkIHRvIGl0IGF0IHJ1bi10aW1lIGFuZCBoYXMgbm8ga25vd2xlZGdlIGFib3V0IHdo YXQgdGhleSBkbyBvciBob3cgdGhleSB3b3JrLiBUaGlzIHdheSwgYSBwbHVnLWluIGNhbiBhY2Nl c3MgdGhlIHN1cnJvdW5kaW5nIHBpcGVsaW5lLCBpbmNsdWRpbmcgZGF0YWJhc2VzLjxicj4KJmd0 OyZndDsmZ3Q7Jmd0OyZndDsmZ3Q7PGJyPjwvc3Bhbj48c3Bhbj4KJmd0OyZndDsmZ3Q7Jmd0OyZn dDsmZ3Q7IElmIEkgdW5kZXJzdG9vZC
Hey Asi,
I think you forgot to attach the diagram.
I find it helps leave the little technical details for a second
Not sure I can get less technical than the animation of the end-result. :)
https://github.com/abstractfactory/pyblish/issues/99
Is there anything in particular that you find fuzzy?
Best,
Marcus
Hi guys,
I’m looking for another pair of eyes on a potential feature.

In short, it involves automatically updating assets A, B and C which depend on another asset D, when asset D is updated.
Questions
Is this a problem worth solving?
Have you encountered it before?
Best,
Marcus
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBVNEGRk2XvUTn6eDw4-biefv66BY60prSejWzRNmovzg%40mail.gmail.com.
Does that at all fit into what you are talking about? I could be off base.
Yeah, those are some of the scenarios I’d expect this feature to fulfill and yeah, it is quite involved and should probably involve a separate, dedicated versioning library.
For the evaluation of versions, such as being either “latest” and “approved”, I’d assume the presence of other pipeline tools as it’s outside the scope of Pyblish. Physically updating an asset is most likely also outside this scope too.
However, I would expect such a process to ultimately produce one or more absolute paths to files in need of updating. This is what Pyblish would use to ultimately produce a new version and allow users to monitor the results, along with distributing the action to a farm or a background process. Pyblish is ultimately about quality controlling assets.
In practice, I would imagine seeing an extension to Pyblish that implements rudimentary versioning, so as to get the feature off the ground, that would ultimately be replaced with whichever library a studio is currently using (if any).
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA0zdoGyZ43bLzZSE16s4Npru5NTwkickh2uiftZF%2BUsww%40mail.gmail.com.
I hear that term referred to as “bubble up”
This is a good term. I’ve also heard of it as “trickle down”. I suppose it depends on how you envision the dependency graph in your mind; either as starting from the root of a tree heading up towards the leaves or heading down along its roots. :)
Back on the topic of a Web Frontent, thanks to everyone for the feedback so far, at this point it seems to me to make the most sense to move forward with Flask for backend, Bootstrap for visuals and Angular for front-end, all of which seem really cool.
I’ve managed to mock up a single-page web-app with AngularJS that lists the contents of a JSON file, as I would imagine it to list the contents of a JSON request via a RESTful POST.
https://github.com/pyblish/pyblish-event
The data is a list of dictionaries.
[
{
"name": "Peter01",
"type": "publish",
"source": "c:\\some\\source\\file.mb",
"date": "2014-10-13 15:56:10",
"author": "Marcus Ottosson",
"host": "Autodesk Maya 2015x64 SP2",
"machine": "alienfx"
}
]
Angular is great with updating the page whenever the data changes, so I can interactively modify the list during run-time with very little changes to the HTML. However, the thing I can’t wrap my head around currently is how I can send it data thru a RESTful request.
I’m looking to do this.
from requests import put, get
put('http://localhost:8888/event',
data={"name": "Peter01",
"type": "publish",
"source": "c:\\some\\source\\file.mb",}).json())
And have this data take part in the page at run-time.
What can I do?
Spontaneously, I was thinking that “if the data is coming from a database, such as MongoDB, and if I could make Angular update whenever the database changes I could also communicate with it through Python and in that way balance the equation”. But ideally I’d like to keep all data in memory initially, until I can find a valid enough reason to transition into using a database. Would MongoDB be suited for this? Is there a more suited alternative?
Best,
Marcus
It wouldn't matter so much if you were using MongoDB, or MySQL, or completely in memory, since that is all behind the application server either way. When you do a put request to the application server, it can then make that information available to other views.
In terms of how those other view will know about that new data... That depends on how you want to implement it. Probably the most efficient way is to have your frond end (angular) connect on a websocket to your backend (flask) and receive all of its streaming updates through that. So when another client runs that put request, and your application server is done processing it, all of the connected clients could be updated over their websocket.
Other options include long polling from the Web client side to the application server.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOCiQXmx3k2zEK1Ku-Y%3DriNnQVbwH0TDN3XTuEnz0ww4Rg%40mail.gmail.com.
Hey Justin,
Thanks, that sounds reasonable. But I still can’t grasp how a dictionary from the server can be accessed from Javascript, or Angular.
Some psuedo-code:
data = {} # Access from JS?
app = Flask()
app.start()
In the case of polling, what does JS poll from?
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA2owGMGWAvjb57_5a1EQgzU1nzLEyc9wKoJuEXDLj9Jyg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOCF65HhosCB_mi%3DeCLqGU8aK37E8Kb82bTJh5sOGn8c8w%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA0U9GWGBh46ytkKojAYArMNSuaNPNZ7bLxErHUycgucEg%40mail.gmail.com.
WebSockets worked great for this task! More specifically, socket.io
Here’s how it works currently.

Adding entries from Python then looks like this.
from requests import put
put('http://localhost:5000/event', data={'name': 'EventName02'})
Any thoughts?
Best,
Marcus
socket.io is cool. I wrote a server application for it a while back called Realtime. It allowed a bunch of webclients to connect up and subscribe to channels, by communicating through a message server. Was originally going to be a commercial product for someone but we ended up just throwing it on my github and not going any further with the project.
That seems to work just as you intended. The only thing you may end up exploring further is your url scheme. Like, the PUT in a restful uri usually means to update one or more existing resources, and POST would mean to create one or more new sources. So creating an event may look like this, and possibly return an ID (or not if they aren't being stored)
Get all events
GET /api/events
Get one events
GET /api/events/123
Create a new event
POST /api/events
Update an existing event
PUT /api/events/123
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOCSffcSN9N64Jxf8pvLXPJjYRKh%3DfMvuCbsts4n%2BjTL2w%40mail.gmail.com.
socket.io is cool.
Ah, glad to hear someone else is familiar with it. Looks neat, judging from their minimalist website and how easy it was to setup (as in their chat tutorial).
I wrote a server application for it a while back called Realtime. It allowed a bunch of webclients to connect up and subscribe to channels, by communicating through a message server. Was originally going to be a commercial product for someone but we ended up just throwing it on my github and not going any further with the project.
I had a quick look at your github repo, it’s about 3 years old! Looks like I’m late to the party.
- Get all events
- GET /api/events
- Get one events
- GET /api/events/123
- Create a new event
- POST /api/events
- Update an existing event
- PUT /api/events/123
Sounds good to me. I’ve also got a book on the topic which I found quite engaging.
They also speak of POST being for creation and PUT for modification. Spontaneously I considered PUT to be “putting” something into something - like appending to a list - and not for it to already be there.
Anyway, thanks!
Best,
Marcus
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA1UX2fKMqaciyd1w0gND0BKSP9WN44j4GzYrHWKKdB9QQ%40mail.gmail.com.
Hi all,
Frontend is live!
Interact with it using it’s RESTful API
Early, of course, but do let us know what you think of it!
Best,
Marcus
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOC%3DYCYNjeWrB%3DZ5So7N%2B12_iNRhvnWJsf1NNo7VMpENVg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CACt6GrnuSiuAvh8JFi2_Mnd-HUcFWH7UWAQXr0EZWrNhc_NVMg%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBXww_AiGKiT1xEhR1QbZOX9eFHCRsYpj75u1W5rBv45A%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CACt6GrmKf7Z719Z2qWRjFR2h%3Dn65%2BjbYieWQx9V%3D%2BLPF%2BiJZxQ%40mail.gmail.com.
Hi Eduardo,
I found some time for this, turns out that after the Gevent install from the website I linked to, Event works fine. Don’t forget to start Mongo after you’ve installed it. On Windows you’ll need to specify a database location upon launching, like so:
$ "c:\Program Files\MongoDB 2.6 Standard\bin\mongod.exe" --dbpath c:\my_database_dir
The database should ideally be running somewhere central
I’ve updated the docs with this as well.
Best,
Marcus
Hi all,
Here’s an update on the GUI front for Pyblish.

Let me know what you think!
Best,
Marcus
Here’s an integration for Maya.

This involves three major components; the GUI, Pyblish and a middlepoint with which they communicate. The middlepoint consists of a server running in a separate thread from within Maya and an interface with which to implement the functionality required by the GUI. The interface is then passed to the middlepoint upon launching the GUI from within the host.
In the case of Maya, the only real specifics is the requirements of running commands from a separate thread using maya.utils.executeInMainThreadWithResult(). It is then up to implementations of other hosts to provide for host-specifics when it comes to running Pyblish.
The middlepoint is called Pyblish Endpoint
Best,
Marcus
and it can be downloaded from here
http://aka.ms/vcpython27 or http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266
once that is installed, no more complain vcvarsall.bat
I´ll go on with the installation and let you know how it goes...
Cheers!
Eduardo
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBDpS01GYy4%3DQNZSjU%2B6nbA0ibDO0Y15WpwJ1P46o3mcQ%40mail.gmail.com.
Ok, so what was missing was this
That’s good news, thanks for sharing that. Basically, there are two ways of approaching installing gevent; one is to let pip compile it, for which it will need a compiler like the one you posted. The other is to install a pre-compiled binary, like the one I posted. Both will work just fine, the benefit of the compiler is that you may be able to use it to compile for Maya’s Python as well which can be very handy!
I´ll go on with the installation and let you know how it goes…
Cool, are you writing plug-ins to communicate with it too? I don’t think I’d be the only one interested in taking part in that! There’s lots of room for expansion as of yet, you could lead the way in terms of what requirements to follow up on.
Best,
Marcus
--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOBPCDZB%3D_96eTNX98Ym4zZkgdyXM89XQokCFHNaj4hFRA%40mail.gmail.com.
setuptools 6.0 or later is required for Python to automatically detect this compiler package.
Ah, interesting. I did try and install the compiler, but had no luck. This must have been why. Thanks for pointing this out, I’ll update the docs with this as well.
Another thing that brought my attention was that the requests module was not on
the requirements.txt, maybe you can add it, since if you already have it, wont make any problem
Requests isn’t actually a requirement of Event, but only used in the example on the front-page as it seems to simplify syntax a bit and makes for easier-to-understand examples.
Now that you mention it, there is however one requirement that isn’t required on a local install, which is Gunicorn. Unless you’re using Gunicorn as your server application, I haven’t used anything else and can’t comment much about it. But if you’re just testing things out, you can also run the Flask application directly.
$ python pyblish-event/app/app.py
I mention this because I remember gunicorn had some special requirements of it’s own when installing, but if it gives you lip, just ignore it until you’re distributing the app to a dedicated machine.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/CACt6GrkoqN%2BYb_ST3sZioesf8mTQ9zeQ7DKRjjdPW_Ux4KK9KA%40mail.gmail.com.