Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Version 3.0.0 (2021-04-01) #1241

Closed
wants to merge 355 commits into from
Closed
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
355 commits
Select commit Hold shift + click to select a range
36ef3ec
Merge pull request #1145 from pypeclub/feature/anatomy_schema_modific…
mkolar Mar 18, 2021
958551d
Merge pull request #1149 from pypeclub/bugfix/harmony_missing_module
mkolar Mar 18, 2021
8083534
Merge pull request #1150 from pypeclub/bugfix/pype-root-determination
mkolar Mar 18, 2021
34ad43a
temporary fix of short names from settings
iLLiCiTiT Mar 18, 2021
30481e9
fix typos
antirotor Mar 18, 2021
4f08208
Merge pull request #1157 from pypeclub/feature/ftrack_module_refactor
mkolar Mar 18, 2021
8450e1b
Merge pull request #1158 from pypeclub/bugfix/anatomy_types_fix
mkolar Mar 18, 2021
6337354
always register lists of callbacks as time may override them
iLLiCiTiT Mar 18, 2021
13d3b42
store only application name to config
iLLiCiTiT Mar 18, 2021
834aa9c
skip applications lookup if passed value is empty
iLLiCiTiT Mar 18, 2021
f4e11d6
pop applicaitons from data
iLLiCiTiT Mar 18, 2021
166f623
don't care about old parent name on rename
iLLiCiTiT Mar 18, 2021
b166b81
task types are not overriden with new but only added new ones
iLLiCiTiT Mar 18, 2021
19ab249
applications are not stored to data in sync to avalon event
iLLiCiTiT Mar 18, 2021
63cc02e
fixed collapsible_key dicitonary
iLLiCiTiT Mar 18, 2021
a7d00d5
Merge pull request #1153 from pypeclub/bugfix/maya-better-redshift-su…
mkolar Mar 18, 2021
0e8bfe8
Merge pull request #1155 from pypeclub/feature/maya-deadline-group-an…
mkolar Mar 18, 2021
ebd6c08
mongo handler cache anatomy keys
iLLiCiTiT Mar 19, 2021
1d55c43
removed anatomy templates/roots entities
iLLiCiTiT Mar 19, 2021
95d8f7f
AnatomyEntity makes sure that all children all overriden on project o…
iLLiCiTiT Mar 19, 2021
af1c18d
added methods for conversion to valid value types
iLLiCiTiT Mar 19, 2021
68d20b9
loaded values from default/studio/project are tried to convert
iLLiCiTiT Mar 19, 2021
eec4119
implemented some convertion methods
iLLiCiTiT Mar 19, 2021
561ad4b
setter methods use conversion method
iLLiCiTiT Mar 19, 2021
d0fec11
added method to convert project document to anatomy data
iLLiCiTiT Mar 19, 2021
150adab
implemented way how to load and save anatomy data to project document
iLLiCiTiT Mar 19, 2021
544869c
it is possible to define keys to query for custom attributes
iLLiCiTiT Mar 19, 2021
21ba189
implemented join query keys
iLLiCiTiT Mar 19, 2021
4408137
fix key query
iLLiCiTiT Mar 19, 2021
85a03bd
implemented method that can convert changes string to value
iLLiCiTiT Mar 19, 2021
d40165e
removed duplicated property avalon_custom_attributes
iLLiCiTiT Mar 19, 2021
40865b9
define query keys of custom attributes
iLLiCiTiT Mar 19, 2021
1c7010b
implemented property cust_attr_types_by_id
iLLiCiTiT Mar 19, 2021
0231c73
fixed ordered dict
iLLiCiTiT Mar 19, 2021
a6b8300
event value is converted to real value
iLLiCiTiT Mar 19, 2021
2e569e7
use join function
iLLiCiTiT Mar 19, 2021
e98fe26
formatting changes
iLLiCiTiT Mar 19, 2021
4c28395
renamed idle_logic to idle_threads
iLLiCiTiT Mar 19, 2021
6908ae0
moved idle thread to threads file
iLLiCiTiT Mar 19, 2021
c502cc2
event sync convert hierarchical values to proper type
iLLiCiTiT Mar 19, 2021
47a7fbe
implemented function to retrieve python type for passed custom attribute
iLLiCiTiT Mar 19, 2021
a91c036
event sync to avalon is using get_python_type_for_custom_attribute
iLLiCiTiT Mar 19, 2021
f0f4a1c
define query keys
iLLiCiTiT Mar 19, 2021
c8bc66a
sync to avalon action is also using proper value type
iLLiCiTiT Mar 19, 2021
c8f1e14
added some docstrings
iLLiCiTiT Mar 19, 2021
df12e9a
fixed and made faster new entity creation
iLLiCiTiT Mar 19, 2021
236ad65
use precached values
iLLiCiTiT Mar 19, 2021
202ba64
implemented settings changes interface
iLLiCiTiT Mar 19, 2021
af0736d
Ftrack module listens to settings changes
iLLiCiTiT Mar 19, 2021
49141bc
implemented function to calculate changes
iLLiCiTiT Mar 19, 2021
ce35976
notify pype modules about settings changes
iLLiCiTiT Mar 19, 2021
7f72d15
changed key `tools` to `tools_env`
iLLiCiTiT Mar 19, 2021
88369d8
changed defaults settings
iLLiCiTiT Mar 19, 2021
bfc48ca
ftrack module has create_ftrack_setting method
iLLiCiTiT Mar 19, 2021
dbe8bd8
ftrack module updates changes from settings attributes
iLLiCiTiT Mar 19, 2021
48981b6
fix anatomy overrides
iLLiCiTiT Mar 19, 2021
4fc12b8
convert #1067 to 3.0
mkolar Mar 22, 2021
b994e14
Merge pull request #1147 from pypeclub/feature/idle_manager_with_sepa…
mkolar Mar 22, 2021
89ee780
raw json cares about value types
iLLiCiTiT Mar 22, 2021
0c23cf0
fixed list items in schemas
iLLiCiTiT Mar 22, 2021
9f04cd6
raw json widget also validate value types
iLLiCiTiT Mar 22, 2021
f4a3f43
application arguments are separated
iLLiCiTiT Mar 22, 2021
ea75b49
removed with_arguments key from path schema
iLLiCiTiT Mar 22, 2021
8b86b06
fixed SystemSettings initialization in project settings root
iLLiCiTiT Mar 22, 2021
d46f096
changed order of platforms
iLLiCiTiT Mar 22, 2021
bf5dce7
resaved executables and arguments
iLLiCiTiT Mar 22, 2021
a844b96
changed how arguments are prepared for launch context
iLLiCiTiT Mar 22, 2021
15677f5
fixed local settings
iLLiCiTiT Mar 22, 2021
e22fb7b
fixed app definition
iLLiCiTiT Mar 22, 2021
d3515e6
hound fix
iLLiCiTiT Mar 22, 2021
6d58c3b
Merge pull request #1151 from pypeclub/feature/modifiable_dict_requir…
mkolar Mar 22, 2021
39433d7
Merge pull request #1161 from pypeclub/feature/sync_anatomy_modificat…
mkolar Mar 22, 2021
cfa9039
Merge branch 'develop' into feature/1139-anatomy-data-on-project-docu…
iLLiCiTiT Mar 22, 2021
dd51ccd
short name is by default empty string
iLLiCiTiT Mar 22, 2021
db748c8
Merge pull request #1169 from pypeclub/feature/raw_json_type
mkolar Mar 22, 2021
9ada659
Merge remote-tracking branch 'origin/develop' into feature/applicatio…
mkolar Mar 22, 2021
0ae39b5
add nukex to python2 vendor prehook
mkolar Mar 22, 2021
ab99fc2
Merge pull request #1170 from pypeclub/feature/application_arguments_…
mkolar Mar 22, 2021
c24823b
sync to avalon creates anatomy data if are not set
iLLiCiTiT Mar 22, 2021
a5ad0e8
added some docstrings
iLLiCiTiT Mar 22, 2021
77627a1
ModulesManager can accept different settings data
iLLiCiTiT Mar 22, 2021
9abb719
pass new data to create modules manager
iLLiCiTiT Mar 22, 2021
8a44461
Merge branch 'develop' into feature/1139-anatomy-data-on-project-docu…
iLLiCiTiT Mar 22, 2021
7d8d7f9
fix system settings attribute
iLLiCiTiT Mar 22, 2021
bfea62c
fix site settings
iLLiCiTiT Mar 22, 2021
27c6613
added ability to exclude locals on studio settings getters
iLLiCiTiT Mar 22, 2021
7c88137
fixed updates
iLLiCiTiT Mar 22, 2021
94a729e
hound fix
iLLiCiTiT Mar 22, 2021
b940d3b
Merge pull request #1168 from pypeclub/feature/1139-anatomy-data-on-p…
mkolar Mar 22, 2021
57447f2
numbers can be converted to string for text input and enum
iLLiCiTiT Mar 23, 2021
5bdfc29
value type of enum must always be string
iLLiCiTiT Mar 23, 2021
4c89ade
added path to exception
iLLiCiTiT Mar 23, 2021
42752c4
using specific exceptions for schema errors
iLLiCiTiT Mar 23, 2021
5c7ea9d
enum entity was abstracted to be able do more specific schema validat…
iLLiCiTiT Mar 23, 2021
16e11a2
hound fix
iLLiCiTiT Mar 23, 2021
8fae7bf
Merge pull request #1179 from pypeclub/feature/settings_exceptions
mkolar Mar 23, 2021
771a8e2
rename master version to hero
mkolar Mar 24, 2021
33f319d
opacity has defined min/max and decimals
iLLiCiTiT Mar 24, 2021
cf68e07
resaved values
iLLiCiTiT Mar 24, 2021
75d9607
number entity entity can convert stringified number to to number type
iLLiCiTiT Mar 24, 2021
5a07975
moved separator out of options entity top be visible even if options …
iLLiCiTiT Mar 24, 2021
60e563b
specify more packages of pywin32 module
iLLiCiTiT Mar 24, 2021
0885fde
Merge pull request #1182 from pypeclub/bugfix/pywin_import_error
mkolar Mar 24, 2021
e5cc0e4
Merge pull request #1181 from pypeclub/bugfix/extract_burnin_settings
mkolar Mar 24, 2021
222c610
fix super call for python 2 compatibility
iLLiCiTiT Mar 24, 2021
9bfaa84
anatomy_keys and attribute_keys are created on demand
iLLiCiTiT Mar 24, 2021
a018bf2
Merge pull request #1183 from pypeclub/bugfix/enum_super_call
mkolar Mar 24, 2021
fed92e1
Merge branch 'develop' into feature/rename_master_to_hero_version
mkolar Mar 24, 2021
0197eaa
settings ui can catch exceptions
iLLiCiTiT Mar 24, 2021
26809ba
fixed dialog arguments
iLLiCiTiT Mar 24, 2021
92591d4
plugin template also have 'active' key in
iLLiCiTiT Mar 24, 2021
722909b
resaved defaults of optional plugins with active key
iLLiCiTiT Mar 24, 2021
19ce8f7
Merge pull request #1185 from pypeclub/feature/settings_error_catch
mkolar Mar 24, 2021
095b10d
Merge pull request #1186 from pypeclub/feature/active_key_for_optiona…
mkolar Mar 24, 2021
593de5e
fix check of attribute values
iLLiCiTiT Mar 24, 2021
d0c772d
Merge pull request #1187 from pypeclub/bugfix/fix_handler_properties
mkolar Mar 24, 2021
694cc12
Delete test_localsystem.txt
mkolar Mar 24, 2021
635347c
Merge pull request #1184 from pypeclub/feature/rename_master_to_hero_…
mkolar Mar 24, 2021
93c771e
variant template expect 3 keys app_name app_variant and app_variant_l…
iLLiCiTiT Mar 25, 2021
34b2276
all aplications are passing new keys to variants
iLLiCiTiT Mar 25, 2021
6b2abab
resaved keys in defaults
iLLiCiTiT Mar 25, 2021
80abe4b
added active key t oremaining optional plugins
iLLiCiTiT Mar 25, 2021
28f8589
saved default values
iLLiCiTiT Mar 25, 2021
d55d133
replaced dots in default tools
iLLiCiTiT Mar 25, 2021
1ba1cf9
nuke shortcuts have valid keys
iLLiCiTiT Mar 25, 2021
220454a
added key -> label mapping to nuke shortcut implementation
iLLiCiTiT Mar 25, 2021
96a8043
defined allowed key symbols and regex in constants
iLLiCiTiT Mar 25, 2021
7f39cf5
implemented exception InvalidKeySymbols
iLLiCiTiT Mar 25, 2021
01d0660
immutable dict is validating keys with allowed symbols
iLLiCiTiT Mar 25, 2021
48a300c
mutable dictionary validate keys on change and tries to fix them on load
iLLiCiTiT Mar 25, 2021
f5e9096
added key validation to roots entity
iLLiCiTiT Mar 25, 2021
2567fee
added key validations to modifiable dict widget
iLLiCiTiT Mar 25, 2021
994238a
better key validation
iLLiCiTiT Mar 25, 2021
9a0070e
fixed modifiable dict collapsible key widget
iLLiCiTiT Mar 25, 2021
73df415
extract review use None as value of width and height
iLLiCiTiT Mar 25, 2021
af300ff
added width and height items to extract review output definitions
iLLiCiTiT Mar 25, 2021
6be4414
number entity can expect default value
iLLiCiTiT Mar 25, 2021
ea6f21e
resaved defaults of extract review plugin
iLLiCiTiT Mar 25, 2021
712670e
moved project plugin paths to project settings
iLLiCiTiT Mar 25, 2021
bba39ff
save defaults of project plugins
iLLiCiTiT Mar 25, 2021
2b4890e
removed usage of PYPE_PROJECT_PLUGINS
iLLiCiTiT Mar 25, 2021
0b3953d
fix PUBLISH_PATH variable in celaction cli.py
iLLiCiTiT Mar 25, 2021
960304a
removed usage of STUDIO_PLUGINS_PATH
iLLiCiTiT Mar 25, 2021
1d279b3
register plugins from project settings on pype install
iLLiCiTiT Mar 25, 2021
1089c5f
it is possible to define project specific environments
iLLiCiTiT Mar 25, 2021
71c9fb4
implemented function to apply project specific environments
iLLiCiTiT Mar 25, 2021
5793f98
added some docstring
iLLiCiTiT Mar 25, 2021
c98f4d8
standalone publisher sets project environments before publish is started
iLLiCiTiT Mar 25, 2021
6c74ea0
added new function to lib's init file
iLLiCiTiT Mar 25, 2021
6eb7921
removed celaction publish variant
iLLiCiTiT Mar 25, 2021
07fb637
dashes are used as version serparators instead of underscore on apps
iLLiCiTiT Mar 25, 2021
2fbe5d8
tools are dynamic dictionaries
iLLiCiTiT Mar 25, 2021
ddd5cbb
changed exception type on root entity
iLLiCiTiT Mar 25, 2021
c24ba96
added schema validation on object_type key in mutable dict item
iLLiCiTiT Mar 25, 2021
9582d9f
resaved tools
iLLiCiTiT Mar 25, 2021
76bcca4
changed how tools are used
iLLiCiTiT Mar 25, 2021
e3c4492
fix tool name in create update attriutes action
iLLiCiTiT Mar 25, 2021
18a56cc
update houdini menu
mkolar Mar 25, 2021
2ba85e8
Merge pull request #1195 from pypeclub/feature/update_houdini
mkolar Mar 25, 2021
737e35a
update workfiles tool in houdini
mkolar Mar 25, 2021
f8b5edc
Merge pull request #1189 from pypeclub/feature/remaining_active_key_f…
mkolar Mar 26, 2021
bcae09e
Merge branch 'develop' into feature/key_validations
mkolar Mar 26, 2021
c950453
Merge pull request #1192 from pypeclub/feature/extract_review_with_re…
mkolar Mar 26, 2021
68e5e7d
Merge pull request #1193 from pypeclub/feature/project_plugin_paths
mkolar Mar 26, 2021
5d61014
fix houdini defaults
iLLiCiTiT Mar 26, 2021
8b4f462
removed "mtoa" from mtoa variants
iLLiCiTiT Mar 26, 2021
227e1ae
enhanced labels of tools in enum items
iLLiCiTiT Mar 26, 2021
6048477
removed variants label and variants are as collapsible keys
iLLiCiTiT Mar 26, 2021
d9c263b
fixed tools labels getting
iLLiCiTiT Mar 26, 2021
5544f93
implemented prelaunch hook that will try to install PySide2 to blender
iLLiCiTiT Mar 26, 2021
6520dd1
make prelaunch hook not critical
iLLiCiTiT Mar 26, 2021
6cff8c5
Nuke: adding keys and values to settings for Loaders
jakubjezek001 Mar 26, 2021
0d0dd26
Nuke: adding Loaders with template for name of node
jakubjezek001 Mar 26, 2021
73aeda9
implementing #1114
jakubjezek001 Mar 29, 2021
e9b4e7e
show error message as message in error detail
iLLiCiTiT Mar 29, 2021
449334d
Deadline: adding limit groups
jakubjezek001 Mar 29, 2021
6f68a7c
removed usage of settings for ftrack mongo names
iLLiCiTiT Mar 29, 2021
b29dbc1
removed settings of ftrack mongo variables from settings
iLLiCiTiT Mar 29, 2021
1c469d3
catch exceptions on save in settings ui
iLLiCiTiT Mar 29, 2021
da869ef
Merge pull request #1190 from pypeclub/feature/key_validations
mkolar Mar 30, 2021
766199e
Merge pull request #1205 from pypeclub/feature/3.0_error_message_in_p…
mkolar Mar 30, 2021
5d0ef4f
Merge pull request #1209 from pypeclub/feature/remove_ftrack_mongo_se…
mkolar Mar 30, 2021
48faec3
bulk mov instance collecting separated from batch instances
iLLiCiTiT Mar 30, 2021
e22cb6a
moved `get_subset_name` logic from pype.plugin to pype.lib
iLLiCiTiT Mar 30, 2021
f34d25f
implemented validator of task name existence on asset document
iLLiCiTiT Mar 30, 2021
62db507
removed unused import
iLLiCiTiT Mar 30, 2021
bc09f31
check for full match instead of simple match
iLLiCiTiT Mar 30, 2021
687e7c6
fix standalone publisher
iLLiCiTiT Mar 30, 2021
def9452
aded python 2 compatibility for fullmatch
iLLiCiTiT Mar 30, 2021
0ed283f
Merge pull request #1210 from pypeclub/feature/basic_save_catch_setti…
mkolar Mar 30, 2021
d81625c
reimplemented pype's workfiles tool in nuke
iLLiCiTiT Mar 30, 2021
6d198ab
removed unnecessary function
iLLiCiTiT Mar 30, 2021
c8e2e77
remove unused import
iLLiCiTiT Mar 30, 2021
f8a220d
settings are stored as dictionaries instead of json string
iLLiCiTiT Mar 30, 2021
fd64660
OTIO: adding python-2 version to `pype.vendor`
jakubjezek001 Mar 30, 2021
824be75
created new project config schema validating new keys
iLLiCiTiT Mar 30, 2021
43ac74c
created new project schema using new config reference
iLLiCiTiT Mar 30, 2021
302a00c
sync to avalon is using new schemas
iLLiCiTiT Mar 30, 2021
7a45a1a
anatomy handler can handle not existing projects
iLLiCiTiT Mar 30, 2021
c5b10b9
Fix - handle duplication of Task name
kalisp Mar 30, 2021
52b1619
removed env_group_key from application schemas
iLLiCiTiT Mar 30, 2021
6fa65a9
removed previous implementation of Application object
iLLiCiTiT Mar 30, 2021
dcdbae5
implemented application group class it's object holds environments
iLLiCiTiT Mar 30, 2021
68954e0
implemented new Application class which use more data from group and …
iLLiCiTiT Mar 30, 2021
be66e4c
added docstring to ApplicationGroup
iLLiCiTiT Mar 30, 2021
f5a046b
ApplicationGroup creates objects of Application class
iLLiCiTiT Mar 30, 2021
aa0b321
ApplicationManager is using new classes to get applications
iLLiCiTiT Mar 30, 2021
b6b1ab4
reimplemented require Application methods
iLLiCiTiT Mar 30, 2021
a507d78
fixed attributes usage
iLLiCiTiT Mar 30, 2021
9a18da3
Implemented EnvironmentToolGroup to hold tool group
iLLiCiTiT Mar 30, 2021
ed148c7
renamed ApplicationTool to EnvironmentTool and changed what data holds
iLLiCiTiT Mar 30, 2021
19313b0
ApplicationManager use new tools classes to define it's tools
iLLiCiTiT Mar 30, 2021
1a4abd7
changed how environments for apps and tools are retrieved
iLLiCiTiT Mar 30, 2021
9f14f89
removed usage of "settings_env" key in launch context
iLLiCiTiT Mar 30, 2021
0caa772
removed label and icon from variants
iLLiCiTiT Mar 30, 2021
f1b154a
group does not have to have set label
iLLiCiTiT Mar 30, 2021
fb790c7
Merge pull request #1198 from pypeclub/feature/blender_pyside_install…
mkolar Mar 31, 2021
b1492cf
Merge pull request #1201 from pypeclub/3.0/feature/1100-nuke-read-con…
mkolar Mar 31, 2021
a26529e
Merge pull request #1203 from pypeclub/3.0/bugfix/1089-nuke-avalontab…
mkolar Mar 31, 2021
07e9b44
Merge pull request #1212 from pypeclub/feature/3.0_bulk_mov_strict_task
mkolar Mar 31, 2021
e8fe8f2
Merge pull request #1213 from pypeclub/bugfix/3.0_profile_regex_fix
mkolar Mar 31, 2021
0f9c845
Merge pull request #1219 from pypeclub/bugfix/1216-workfiles-tool-for…
mkolar Mar 31, 2021
1404576
removed SettingsFileHandler which is not and can't be used
iLLiCiTiT Mar 31, 2021
6221b6a
hide expainding button if content layout does not have any widget
iLLiCiTiT Mar 31, 2021
e3d09f2
Merge pull request #1223 from pypeclub/bugfix/new_project_schemas
mkolar Mar 31, 2021
4c44d42
Merge pull request #1222 from pypeclub/3.0/feature/python2-OpenTimeli…
mkolar Mar 31, 2021
7f49d49
Merge pull request #1221 from pypeclub/feature/store_settings_as_dict
mkolar Mar 31, 2021
56c4ae7
removed studio soft key from general and replaced with pype_path key
iLLiCiTiT Mar 31, 2021
8586301
defined constant for global settings type
iLLiCiTiT Mar 31, 2021
969b2de
resaved defaults
iLLiCiTiT Mar 31, 2021
cd9254b
settings handler saves pype_path from system settings to global setti…
iLLiCiTiT Mar 31, 2021
a944227
removed unused function load_environments from igniter
iLLiCiTiT Mar 31, 2021
e7781a4
added function to load global settings from mongo
iLLiCiTiT Mar 31, 2021
b98fd5d
modified `get_pype_path_from_db` to use `get_pype_global_settings` fu…
iLLiCiTiT Mar 31, 2021
c51f311
changed how paths are checked
iLLiCiTiT Mar 31, 2021
4eab334
fix label issue
iLLiCiTiT Mar 31, 2021
a15f879
Merge pull request #1228 from pypeclub/feature/apps_without_env_groups
mkolar Mar 31, 2021
e8c5221
Merge branch 'develop' into feature/global_settings
iLLiCiTiT Mar 31, 2021
49fafb7
Merge pull request #1225 from pypeclub/fix/harmony_task_duplication_i…
mkolar Mar 31, 2021
75f9fd7
close validation mongo connection
iLLiCiTiT Mar 31, 2021
ae9bf0c
Merge pull request #1232 from pypeclub/feature/remove_settings_file_h…
mkolar Mar 31, 2021
77fbc0b
Merge pull request #1233 from pypeclub/feature/hide_expanding_btn
mkolar Mar 31, 2021
26a4c68
Merge pull request #1207 from pypeclub/3.0/feature/1164-nuke-deadline…
mkolar Mar 31, 2021
86755f9
fix global settings dict hierarchy
iLLiCiTiT Mar 31, 2021
fae5a65
added `url` argument back to docstring
iLLiCiTiT Mar 31, 2021
3280d1a
removed forgotten line
iLLiCiTiT Mar 31, 2021
fc103ec
auto create new item on getitem in mutable dict
iLLiCiTiT Mar 31, 2021
9bb1d87
added sequence tag to extract review profiles
iLLiCiTiT Mar 31, 2021
ef7188b
Merge pull request #1239 from pypeclub/feature/minor_settings_changes
mkolar Apr 1, 2021
a6dc83a
Merge pull request #1237 from pypeclub/feature/global_settings
mkolar Apr 1, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 1 addition & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,21 +208,10 @@ install it to user data directory (on Windows to `%LOCALAPPDATA%\pypeclub\pype`,
### From sources
Pype can be run directly from sources by activating virtual environment:

**On Windows:**
```powershell
.\venv\Scripts\Activate.ps1
```
and running:
```powershell
python start.py tray
```
**On macOS/Linux:**
```sh
source ./venv/bin/activate
python start.py tray
poetry run python start.py tray
```


This will use current Pype version with sources. You can override this with `--use-version=x.x.x` and
then Pype will try to find locally installed specified version (present in user data directory).

Expand Down
56 changes: 30 additions & 26 deletions pype/__init__.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
# -*- coding: utf-8 -*-
"""Pype module."""
import os
import platform
import functools
import logging

from .settings import get_project_settings
from .lib import Anatomy, filter_pyblish_plugins
from .lib import (
Anatomy,
filter_pyblish_plugins,
change_timer_to_current_context
)

pyblish = avalon = _original_discover = None

log = logging.getLogger(__name__)


PROJECT_PLUGINS_PATH = os.environ.get("PYPE_PROJECT_PLUGINS")
STUDIO_PLUGINS_PATH = os.environ.get("PYPE_STUDIO_PLUGINS")
PACKAGE_DIR = os.path.dirname(os.path.abspath(__file__))
PLUGINS_DIR = os.path.join(PACKAGE_DIR, "plugins")

Expand Down Expand Up @@ -98,40 +101,41 @@ def install():
pyblish.register_discovery_filter(filter_pyblish_plugins)
avalon.register_plugin_path(avalon.Loader, LOAD_PATH)

# Register project specific plugins
project_name = os.environ.get("AVALON_PROJECT")
if PROJECT_PLUGINS_PATH and project_name:
for path in PROJECT_PLUGINS_PATH.split(os.pathsep):
if not path:
continue
plugin_path = os.path.join(path, project_name, "plugins")
if os.path.exists(plugin_path):
pyblish.register_plugin_path(plugin_path)
avalon.register_plugin_path(avalon.Loader, plugin_path)
avalon.register_plugin_path(avalon.Creator, plugin_path)
avalon.register_plugin_path(
avalon.InventoryAction, plugin_path
)

# Register studio specific plugins
if STUDIO_PLUGINS_PATH and project_name:
for path in STUDIO_PLUGINS_PATH.split(os.pathsep):
if not path:
continue
if os.path.exists(path):
pyblish.register_plugin_path(path)
avalon.register_plugin_path(avalon.Loader, path)
avalon.register_plugin_path(avalon.Creator, path)
avalon.register_plugin_path(avalon.InventoryAction, path)

if project_name:
anatomy = Anatomy(project_name)
anatomy.set_root_environments()
avalon.register_root(anatomy.roots)

project_settings = get_project_settings(project_name)
platform_name = platform.system().lower()
project_plugins = (
project_settings
.get("global", {})
.get("project_plugins", {})
.get(platform_name)
) or []
for path in project_plugins:
if not path or not os.path.exists(path):
continue

pyblish.register_plugin_path(path)
avalon.register_plugin_path(avalon.Loader, path)
avalon.register_plugin_path(avalon.Creator, path)
avalon.register_plugin_path(avalon.InventoryAction, path)

# apply monkey patched discover to original one
log.info("Patching discovery")
avalon.discover = patched_discover

avalon.on("taskChanged", _on_task_change)


def _on_task_change(*args):
change_timer_to_current_context()


@import_wrapper
def uninstall():
Expand Down
3 changes: 1 addition & 2 deletions pype/hooks/pre_global_host_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def execute(self):
"project_name": self.data["project_name"],
"asset_name": self.data["asset_name"],
"task_name": self.data["task_name"],
"app_name": app.app_name,

"app": app,

"dbcon": self.data["dbcon"],
Expand All @@ -41,7 +41,6 @@ def execute(self):

"anatomy": self.data["anatomy"],

"settings_env": self.data.get("settings_env"),
"env": self.launch_context.env,

"log": self.log
Expand Down
2 changes: 1 addition & 1 deletion pype/hooks/pre_python2_vendor.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class PrePython2Vendor(PreLaunchHook):
"""Prepend python 2 dependencies for py2 hosts."""
# WARNING This hook will probably be deprecated in Pype 3 - kept for test
order = 10
app_groups = ["hiero", "nuke"]
app_groups = ["hiero", "nuke", "nukex"]

def execute(self):
# Prepare vendor dir path
Expand Down
148 changes: 148 additions & 0 deletions pype/hosts/blender/hooks/pre_pyside_install.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
import os
import subprocess
from pype.lib import PreLaunchHook


class InstallPySideToBlender(PreLaunchHook):
"""Install Qt binding to blender's python packages.

Prelaunch hook does 2 things:
1.) Blender's python packages are pushed to the beginning of PYTHONPATH.
2.) Check if blender has installed PySide2 and will try to install if not.

For pipeline implementation is required to have Qt binding installed in
blender's python packages.

Prelaunch hook can work only on Windows right now.
"""

app_groups = ["blender"]
platforms = ["windows"]

def execute(self):
# Prelaunch hook is not crutial
try:
self.inner_execute()
except Exception:
self.log.warning(
"Processing of {} crashed.".format(self.__class__.__name__),
exc_info=True
)

def inner_execute(self):
# Get blender's python directory
executable = self.launch_context.executable.executable_path
# Blender installation contain subfolder named with it's version where
# python binaries are stored.
version_subfolder = self.launch_context.app_name.split("_")[1]
pythond_dir = os.path.join(
os.path.dirname(executable),
version_subfolder,
"python"
)

# Change PYTHONPATH to contain blender's packages as first
python_paths = [
os.path.join(pythond_dir, "lib"),
os.path.join(pythond_dir, "lib", "site-packages"),
]
python_path = self.launch_context.env.get("PYTHONPATH") or ""
for path in python_path.split(os.pathsep):
if path:
python_paths.append(path)

self.launch_context.env["PYTHONPATH"] = os.pathsep.join(python_paths)

# Get blender's python executable
python_executable = os.path.join(pythond_dir, "bin", "python.exe")
if not os.path.exists(python_executable):
self.log.warning(
"Couldn't find python executable for blender. {}".format(
executable
)
)
return

# Check if PySide2 is installed and skip if yes
if self.is_pyside_installed(python_executable):
return

# Install PySide2 in blender's python
self.install_pyside_windows(python_executable)

def install_pyside_windows(self, python_executable):
"""Install PySide2 python module to blender's python.

Installation requires administration rights that's why it is required
to use "pywin32" module which can execute command's and ask for
administration rights.
"""
try:
import win32api
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

'win32api' imported but unused

import win32con
import win32process
import win32event
import pywintypes
from win32comext.shell.shell import ShellExecuteEx
from win32comext.shell import shellcon
except Exception:
self.log.warning("Couldn't import \"pywin32\" modules")
return

try:
# Parameters
# - use "-m pip" as module pip to install PySide2 and argument
# "--ignore-installed" is to force install module to blender's
# site-packages and make sure it is binary compatible
parameters = "-m pip install --ignore-installed PySide2"

# Execute command and ask for administrator's rights
process_info = ShellExecuteEx(
nShow=win32con.SW_SHOWNORMAL,
fMask=shellcon.SEE_MASK_NOCLOSEPROCESS,
lpVerb="runas",
lpFile=python_executable,
lpParameters=parameters,
lpDirectory=os.path.dirname(python_executable)
)
process_handle = process_info["hProcess"]
obj = win32event.WaitForSingleObject(
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

local variable 'obj' is assigned to but never used

process_handle, win32event.INFINITE
)
returncode = win32process.GetExitCodeProcess(process_handle)
if returncode == 0:
self.log.info(
"Successfully installed PySide2 module to blender."
)
return
except pywintypes.error:
pass

self.log.warning("Failed to instal PySide2 module to blender.")

def is_pyside_installed(self, python_executable):
"""Check if PySide2 module is in blender's pip list.

Check that PySide2 is installed directly in blender's site-packages.
It is possible that it is installed in user's site-packages but that
may be incompatible with blender's python.
"""
# Get pip list from blender's python executable
args = [python_executable, "-m", "pip", "list"]
process = subprocess.Popen(args, stdout=subprocess.PIPE)
stdout, _ = process.communicate()
lines = stdout.decode().split("\r\n")
# Second line contain dashes that define maximum length of module name.
# Second column of dashes define maximum length of module version.
package_dashes, *_ = lines[1].split(" ")
package_len = len(package_dashes)

# Got through printed lines starting at line 3
for idx in range(2, len(lines)):
line = lines[idx]
if not line:
continue
package_name = line[0:package_len].strip()
if package_name.lower() == "pyside2":
return True
return False
19 changes: 3 additions & 16 deletions pype/hosts/celaction/api/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,25 +91,12 @@ def main():
# Registers pype's Global pyblish plugins
pype.install()

for path in PUBLISH_PATHS:
path = os.path.normpath(path)

if not os.path.exists(path):
continue

log.info(f"Registering path: {path}")
pyblish.api.register_plugin_path(path)
if os.path.exists(PUBLISH_PATH):
log.info(f"Registering path: {PUBLISH_PATH}")
pyblish.api.register_plugin_path(PUBLISH_PATH)

pyblish.api.register_host(publish_host)

# Register project specific plugins
project_name = os.environ["AVALON_PROJECT"]
project_plugins_paths = os.getenv("PYPE_PROJECT_PLUGINS", "")
for path in project_plugins_paths.split(os.pathsep):
plugin_path = os.path.join(path, project_name, "plugins")
if os.path.exists(plugin_path):
pyblish.api.register_plugin_path(plugin_path)

return publish.show()


Expand Down
12 changes: 9 additions & 3 deletions pype/hosts/harmony/plugins/publish/collect_farm_render.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,16 @@ def get_instances(self, context):
# TODO: handle pixel aspect and frame step
# TODO: set Deadline stuff (pools, priority, etc. by presets)
# because of using 'renderFarm' as a family, replace 'Farm' with
# capitalized task name
subset_name = node.split("/")[1].replace(
# capitalized task name - issue of avalon-core Creator app
subset_name = node.split("/")[1]
task_name = context.data["anatomyData"]["task"].capitalize()
replace_str = ""
if task_name.lower() not in subset_name.lower():
replace_str = task_name
subset_name = subset_name.replace(
'Farm',
context.data["anatomyData"]["task"].capitalize())
replace_str)

render_instance = HarmonyRenderInstance(
version=version,
time=api.time(),
Expand Down
4 changes: 2 additions & 2 deletions pype/hosts/houdini/startup/MainMenuCommon.XML
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<mainMenu>
<menuBar>
<subMenu id="avalon_menu">
<label>Avalon</label>
<label>Pype</label>
<subMenu id="avalon_context">
<labelExpression><![CDATA[
from avalon import api
Expand Down Expand Up @@ -58,7 +58,7 @@ publish.show(parent)
<label>Work Files</label>
<scriptCode><![CDATA[
import hou, os
from avalon.tools import workfiles
from pype.tools import workfiles
workfiles.show(os.environ["AVALON_WORKDIR"])
]]></scriptCode>
</scriptItem>
Expand Down
4 changes: 2 additions & 2 deletions pype/hosts/houdini/startup/scripts/123.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from avalon import pipeline, houdini
from avalon import api, houdini
import hou


def main():
print("Installing Avalon ...")
pipeline.install(houdini)
api.install(houdini)


main()
10 changes: 10 additions & 0 deletions pype/hosts/maya/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from pyblish import api as pyblish
from pype.lib import any_outdated
import pype.hosts.maya
from pype.hosts.maya.lib import copy_workspace_mel
from . import menu, lib

log = logging.getLogger("pype.hosts.maya")
Expand Down Expand Up @@ -46,6 +47,7 @@ def install():
avalon.on("new", on_new)
avalon.before("save", on_before_save)
avalon.on("taskChanged", on_task_changed)
avalon.on("before.workfile.save", before_workfile_save)

log.info("Setting default family states for loader..")
avalon.data["familiesStateToggled"] = ["imagesequence"]
Expand Down Expand Up @@ -203,3 +205,11 @@ def on_task_changed(*args):
"Context was changed",
("Context was changed to {}".format(avalon.Session["AVALON_ASSET"])),
)


def before_workfile_save(workfile_path):
if not workfile_path:
return

workdir = os.path.dirname(workfile_path)
copy_workspace_mel(workdir)
Loading