Compare commits
10 Commits
version-1.
...
master
Author | SHA1 | Date | |
---|---|---|---|
d940735453 | |||
7d71067b3d | |||
b0b804410d | |||
d55f2dcee1 | |||
2fbb5ac788 | |||
b47b407589 | |||
a136366804 | |||
6718e1646f | |||
9d7f9a979e | |||
326a793de0 |
16
CHANGELOG.md
16
CHANGELOG.md
@ -1,6 +1,22 @@
|
||||
# Blender Cloud changelog
|
||||
|
||||
|
||||
## Version 1.25 (2022-02-25)
|
||||
|
||||
- Compatibility with Blender 3.1 (Python 3.10).
|
||||
- Bump blender-asset-tracer to version 1.11, for UDIM support.
|
||||
|
||||
|
||||
## Version 1.24 (2022-02-04)
|
||||
|
||||
- Bump blender-asset-tracer version 1.8 → 1.10, for fixing a bug where files were doubly-compressed.
|
||||
|
||||
|
||||
## Version 1.23 (2021-11-09)
|
||||
|
||||
- Bump blender-asset-tracer version 1.7 → 1.8, for compatibility with sending read-only blend files to Flamenco.
|
||||
|
||||
|
||||
## Version 1.22 (2021-11-05)
|
||||
|
||||
- Fix Windows incompatibility when using Shaman URLs as job storage path.
|
||||
|
@ -21,7 +21,7 @@
|
||||
bl_info = {
|
||||
"name": "Blender Cloud",
|
||||
"author": "Sybren A. Stüvel, Francesco Siddi, Inês Almeida, Antony Riakiotakis",
|
||||
"version": (1, 22),
|
||||
"version": (1, 25),
|
||||
"blender": (2, 80, 0),
|
||||
"location": "Addon Preferences panel, and Ctrl+Shift+Alt+A anywhere for texture browser",
|
||||
"description": "Texture library browser and Blender Sync. Requires the Blender ID addon "
|
||||
|
@ -56,8 +56,11 @@ def setup_asyncio_executor():
|
||||
|
||||
from . import pillar
|
||||
|
||||
# Python 3.8 deprecated the 'loop' parameter, 3.10 removed it.
|
||||
kwargs = {"loop": loop} if sys.version_info < (3, 8) else {}
|
||||
|
||||
# No more than this many Pillar calls should be made simultaneously
|
||||
pillar.pillar_semaphore = asyncio.Semaphore(3, loop=loop)
|
||||
pillar.pillar_semaphore = asyncio.Semaphore(3, **kwargs)
|
||||
|
||||
|
||||
def kick_async_loop(*args) -> bool:
|
||||
|
@ -668,6 +668,8 @@ class ATTRACT_OT_open_meta_blendfile(AttractOperatorMixin, Operator):
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
if context.selected_sequences is None:
|
||||
return False
|
||||
return bool(
|
||||
any(cls.filename_from_metadata(s) for s in context.selected_sequences)
|
||||
)
|
||||
|
@ -25,6 +25,7 @@ import logging
|
||||
from contextlib import closing, contextmanager
|
||||
import urllib.parse
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
import requests.adapters
|
||||
import requests.packages.urllib3.util.retry
|
||||
@ -261,14 +262,17 @@ async def pillar_call(pillar_func, *args, caching=True, **kwargs):
|
||||
)
|
||||
loop = asyncio.get_event_loop()
|
||||
|
||||
# Python 3.8 deprecated the 'loop' parameter, 3.10 removed it.
|
||||
kwargs = {"loop": loop} if sys.version_info < (3, 8) else {}
|
||||
|
||||
# Use explicit calls to acquire() and release() so that we have more control over
|
||||
# how long we wait and how we handle timeouts.
|
||||
try:
|
||||
await asyncio.wait_for(pillar_semaphore.acquire(), timeout=10, loop=loop)
|
||||
await asyncio.wait_for(pillar_semaphore.acquire(), timeout=10, **kwargs)
|
||||
except asyncio.TimeoutError:
|
||||
log.info("Waiting for semaphore to call %s", pillar_func.__name__)
|
||||
try:
|
||||
await asyncio.wait_for(pillar_semaphore.acquire(), timeout=50, loop=loop)
|
||||
await asyncio.wait_for(pillar_semaphore.acquire(), timeout=50, **kwargs)
|
||||
except asyncio.TimeoutError:
|
||||
raise RuntimeError("Timeout waiting for Pillar Semaphore!")
|
||||
|
||||
@ -648,9 +652,11 @@ async def fetch_texture_thumbs(
|
||||
for texture_node in texture_nodes
|
||||
)
|
||||
|
||||
# Python 3.8 deprecated the 'loop' parameter, 3.10 removed it.
|
||||
kwargs = {"loop": asyncio.get_event_loop()} if sys.version_info < (3, 8) else {}
|
||||
|
||||
# raises any exception from failed handle_texture_node() calls.
|
||||
loop = asyncio.get_event_loop()
|
||||
await asyncio.gather(*coros, loop=loop)
|
||||
await asyncio.gather(*coros, **kwargs)
|
||||
|
||||
log.info("fetch_texture_thumbs: Done downloading texture thumbnails")
|
||||
|
||||
@ -929,8 +935,10 @@ async def download_texture(
|
||||
)
|
||||
downloaders.append(dlr)
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
return await asyncio.gather(*downloaders, return_exceptions=True, loop=loop)
|
||||
# Python 3.8 deprecated the 'loop' parameter, 3.10 removed it.
|
||||
kwargs = {"loop": asyncio.get_event_loop()} if sys.version_info < (3, 8) else {}
|
||||
|
||||
return await asyncio.gather(*downloaders, return_exceptions=True, **kwargs)
|
||||
|
||||
|
||||
async def upload_file(
|
||||
|
@ -58,8 +58,12 @@ def wheel_filename(fname_prefix: str) -> str:
|
||||
if not wheels:
|
||||
raise RuntimeError("Unable to find wheel at %r" % path_pattern)
|
||||
|
||||
# If there are multiple wheels that match, load the latest one.
|
||||
wheels.sort()
|
||||
# If there are multiple wheels that match, load the last-modified one.
|
||||
# Alphabetical sorting isn't going to cut it since BAT 1.10 was released.
|
||||
def modtime(filename: str) -> int:
|
||||
return os.stat(filename).st_mtime
|
||||
|
||||
wheels.sort(key=modtime)
|
||||
return wheels[-1]
|
||||
|
||||
|
||||
@ -68,3 +72,8 @@ def load_wheels():
|
||||
load_wheel("lockfile", "lockfile")
|
||||
load_wheel("cachecontrol", "CacheControl")
|
||||
load_wheel("pillarsdk", "pillarsdk")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
wheel = wheel_filename("blender_asset_tracer")
|
||||
print(f"Wheel: {wheel}")
|
||||
|
@ -3,7 +3,7 @@
|
||||
lockfile==0.12.2
|
||||
pillarsdk==1.8.0
|
||||
wheel==0.29.0
|
||||
blender-asset-tracer==1.7
|
||||
blender-asset-tracer==1.11
|
||||
|
||||
# Secondary requirements:
|
||||
asn1crypto==0.24.0
|
||||
|
Reference in New Issue
Block a user