for #25443 update embedded Shotgun API to v3.0.17
This adds support for authenticating as a HumanUser as well as being able to sudo as a user. Both are instrumental in future development of Toolkit as we allow expand how users are authenticated via Toolkit.
Includes a fix for a bug in the mimetypes library in Python 2.7. There are certain installers on Windows that will (incorrectly) add non-Latin characters to the registry. This usually only happens if you are located in an area where unicode characters are more widely required. The mimetypes library in Python 2.7 ​chokes on these non-Latin characters causing a UnicodeDecodeError. To work around this error, we have bundled a patched version of the mimetypes library and fall back on that if we encounter this issue during runtime. Full release notes are on the Python API project page https://github.com/shotgunsoftware/python-api/tree/v3.0.17
For #25952 - Fixed PyQt compatibility issue
Some old versions of PyQt don't have the Q*Animation classes that were introduced in Qt 4.6
Closes #91
#25983 Added null-check in environment to better support empty engines.
This fixes an issue where it was previously not possible to install apps
into some empty engine config setups.
Merge branch 'master' of ssh://github.com/shotgunsoftware/tk-core
[minor] Made the tank copy_apps command API access only for now.
It's an expert level command and we don't anticipate a high usage
frequency so making it API only in order to not make the command line
cognitive load greater than it already is. We should probably consider
moving a couple of the other commands into some sort of "lesser used"
section too to make it easy to spot the commonly accessed commands.
#25815 improve error for missing yml files when using $ syntax
Especially when moving your schema around, it's easy to misplace a yml file that is defining dynamic content. This will raise a `TankError` which has useful detail but is quite cryptic. This improves the error a bit while retaining all of the details and offers a possible solution that the specific yml file is that defines this dynamic content may be missing.
#25757 Added tank commands to "unlocalize" core.

This adds two new commands which allows for a localized configuration to
be repointed to an external core:

share_core
----------
When new projects are created, these are often created in a state where
each project maintains its own independent copy of the core API. This
command allows you to take the core for such a project and move it out
into a separate location on disk. This makes it possible to create a
shared core, where several projects share a single copy of the Core API.
Note: if you already have a shared Core API that you would like this
configuration to use, instead use the attach_to_core command.

attach_to_core
--------------
When new projects are created, these are often created in a state where
each project maintains its own independent copy of the core API. This
command allows you to attach the configuration to an existing core API
installation rather than having it maintain its own embedded version of
the Core API. Note: If you don't have a shared core API yet, instead use
the share_core command.

closes #94
#25760 #25759 Project setup refactor, auto-path and storageless setups

This change contains several larger functionality tweaks:

- A new mode called 'auto_path' has been added to setup_project. This
mode is available via the API only and allows a project to be set up in
such a way that no pipeline configuration path entries are associated
with the project. This means that the project is not accessible from a
studio level tank command nor from within shotgun. The only way to
access it is via its built-in tank command. This is an intermediate mode
which we are putting in with the expectation of a coming change which
will allow entire configurations to be zipped up, uploaded and managed
from within shotgun itself, a so called cloud based config.

- Toolkit now supports the notion of a project without any storages.
Previously, a project needed to at least have a primary storage. A
storage less project does not have an associated project data location
and therefore no path cache. Some toolkit functionality is also not
relevant, for example folder creation, and will raise error messages if
you try to execute it on a project which doesn't have storages defined.

- The project setup structure has been extensively refactored and
reshuffled in order to create a new accessor in the form of a wizard
interface, which will be used by our upcoming shotgun desktop workflows.
The functionality of all existing commands and APIs remain the same
(apart from some tweaks in the output these commands generate).

Closes #90.
[minor] Tweaks and adjustments following code review.
[minor] Logic tweaks to how the Core API is picked up in setup wizard.
#26094 Improved move_configuration command.
The command now supports moving some platforms rather than all. It also
supports adding and modifying platforms other than the current OS. In
line with the logic and instructions added to the core unlocalize
command suite, the restriction for localized configs have been lifted
and instead been replaced with a warning message.
[minor] Improved error message for deleted auto path confgurations.
Closes #95.
For #25951 - Added UDIM support to the Sequence key
- This is to support UDIM texture sequences as exported from Mari
- Updated template key tests to include UDIM format strings
Closes #96
#25973 Parse Localize

This adjusts the localize command to be a little less blunt.

Previously, it would copy all versions of apps, engines etc. across from
the core api source location to the pipeline configuration. Now it
instead iterates over all descriptors currently used by the environments
and only copies those across. For large studio locations where there has
been a buildup of versions, this will improve performance of the
localize process.

Closes #97
For #26168 - Fix to allow a template that specifies the storage root
For example, the template 'project_root: /' would now correctly validate
against the project storage root that the template is defined for.
Previously this would fail!
Merge branch 'master' of ssh://git@github.com/shotgunsoftware/tk-core.git
For #26168 - Fix for apply_fields when template represents storage root
#26162 Minor changes to the tank setup_project localize logic.

This tweaks the logic for the tank setup_project command so that if the
currently running core API belongs to a localized pipeline
configuration, the created pipeline configuration will be localized too.
This brings it more in line with the way the desktop wizard project
setup process works and will be relevant going forward, as more and more
projects will be created as localized by default, as UI wizard adoption
will start becoming more commonplace.

Closes #98
#25240 #25450 Tank command tweaks and improvements

A number of smaller improvements and refinements of the tank command.

- Improved the error message you get if you run tank Project foo from a
project specific tank command.

- Added support for a digits only syntax, so that the tank command will
correctly find a shot named 123 when the command tank Shot 123 is
executed. If no shot named 123 is found, the tank command will fall back
to its previous behaviour and assume 123 is a shogun id and use that for
the lookup instead.

- For explict id lookup (which is also faster), you can now use a 'Shot
@123' syntax to look for a Shot with id 123.

- If you are running a project tank command, the project prefix syntax
(tank Shot bunny:foo) is not valid since the project is implied by the
fact that you are running the tank command for a particular project.
Previously this logic was less clear.

- If you are running the tank command out of a project config CWD
without params, (e.g. ./tank) it now gives you the project context.
Previously it would only give you the empty context.

Please note that this means that the behaviour of the tank command
changes slightly:

If you are currently launching entities via their ids (tank Shot 123)
and also have your shot named numeric codes, this change means that the
name suddenly takes precedence, meaning that there may be a change in
behaviour as a consequence. We recommend that in this case you tweak
your code to include the @ symbol (e.g. tank Shot @123) to explicitly
use ids. This should also be slightly faster.

Closes #76
#26331 Better threading protection around shotgun API

This implements the tk.shotgun property accessor such that it is stored
in a threadlocal storage. This means that each thread will get a
separate instance of the Shotgun API when calling tk.shotgun, even if
the tk instance is shared across threads.

This provides a layer of protection around the Shotgun API which isn't
threadsafe. The result is that while you couldn't previously have
multiple threads picking up tk.shotgun and running concurrent queries,
this is now possible. Note that this also affects some API methods (for
example the publish method) which also uses the tk.accessor. The overall
result is improved thread safety for any Shotgun call made via toolkit.

Closes #99