Module subsync.assets.assetlist

Expand source code
from subsync.translations import _
from subsync.data import languages
from subsync import error


class AssetList(list):
    """List of assets.

    Used mainly to select assets required for synchronization.
    """

    def missing(self):
        """Get missing assets (as new `AssetList`).

        Missing assets are assets that are not available locally nor remotely
        on asset server.
        """
        return AssetList([ a for a in self if a.isMissing() ])

    def hasUpdate(self):
        """Get assets that could be updated (as new `AssetList`).

        These assets are available on asset server and are not installed locally
        or remote version are newer than local (based on version number).
        """
        return AssetList([ a for a in self if a.hasUpdate() ])

    def installed(self):
        """Get assets installed locally and ready to use (as new `AssetList`)."""
        return AssetList([ a for a in self if a.localVersion() ])

    def notInstalled(self):
        """Get assets that are not installed locally (as new `AssetList`)."""
        return AssetList([ a for a in self if not a.localVersion() ])

    def validate(self, localOnly=False):
        """Check if all assets on the list are available.

        Parameters
        ----------
        localOnly: bool, optional
            If `True` this method will check if all assets are installed
            locally, otherwise it will check if assets are available either
            locally or on asset server.

        Raises
        ------
        Error
            At least one asset is not available.
        """
        if localOnly:
            assets = self.notInstalled()
        else:
            assets = self.missing()

        if assets:
            msg = []
            speech = [ asset for asset in assets if asset.type == 'speech' ]
            dicts  = [ asset for asset in assets if asset.type == 'dict' ]

            if speech:
                langs = ', '.join([ languages.getName(a.params[0]) for a in speech ])
                msg += [ _('Synchronization with {} audio is currently not supported.') \
                        .format(langs) ]
            if dicts:
                langs = [ ' - '.join([ languages.getName(p) for p in a.params ]) for a in dicts ]
                msg += [ _('Synchronization between languages {} is currently not supported.') \
                        .format(', '.join(langs)) ]

            msg += [ '', _('missing assets:') ]
            msg += [ ' - ' + asset.getPrettyName() for asset in assets ]
            raise error.Error('\n'.join(msg))

Classes

class AssetList (iterable=(), /)

List of assets.

Used mainly to select assets required for synchronization.

Expand source code
class AssetList(list):
    """List of assets.

    Used mainly to select assets required for synchronization.
    """

    def missing(self):
        """Get missing assets (as new `AssetList`).

        Missing assets are assets that are not available locally nor remotely
        on asset server.
        """
        return AssetList([ a for a in self if a.isMissing() ])

    def hasUpdate(self):
        """Get assets that could be updated (as new `AssetList`).

        These assets are available on asset server and are not installed locally
        or remote version are newer than local (based on version number).
        """
        return AssetList([ a for a in self if a.hasUpdate() ])

    def installed(self):
        """Get assets installed locally and ready to use (as new `AssetList`)."""
        return AssetList([ a for a in self if a.localVersion() ])

    def notInstalled(self):
        """Get assets that are not installed locally (as new `AssetList`)."""
        return AssetList([ a for a in self if not a.localVersion() ])

    def validate(self, localOnly=False):
        """Check if all assets on the list are available.

        Parameters
        ----------
        localOnly: bool, optional
            If `True` this method will check if all assets are installed
            locally, otherwise it will check if assets are available either
            locally or on asset server.

        Raises
        ------
        Error
            At least one asset is not available.
        """
        if localOnly:
            assets = self.notInstalled()
        else:
            assets = self.missing()

        if assets:
            msg = []
            speech = [ asset for asset in assets if asset.type == 'speech' ]
            dicts  = [ asset for asset in assets if asset.type == 'dict' ]

            if speech:
                langs = ', '.join([ languages.getName(a.params[0]) for a in speech ])
                msg += [ _('Synchronization with {} audio is currently not supported.') \
                        .format(langs) ]
            if dicts:
                langs = [ ' - '.join([ languages.getName(p) for p in a.params ]) for a in dicts ]
                msg += [ _('Synchronization between languages {} is currently not supported.') \
                        .format(', '.join(langs)) ]

            msg += [ '', _('missing assets:') ]
            msg += [ ' - ' + asset.getPrettyName() for asset in assets ]
            raise error.Error('\n'.join(msg))

Ancestors

  • builtins.list

Methods

def hasUpdate(self)

Get assets that could be updated (as new AssetList).

These assets are available on asset server and are not installed locally or remote version are newer than local (based on version number).

Expand source code
def hasUpdate(self):
    """Get assets that could be updated (as new `AssetList`).

    These assets are available on asset server and are not installed locally
    or remote version are newer than local (based on version number).
    """
    return AssetList([ a for a in self if a.hasUpdate() ])
def installed(self)

Get assets installed locally and ready to use (as new AssetList).

Expand source code
def installed(self):
    """Get assets installed locally and ready to use (as new `AssetList`)."""
    return AssetList([ a for a in self if a.localVersion() ])
def missing(self)

Get missing assets (as new AssetList).

Missing assets are assets that are not available locally nor remotely on asset server.

Expand source code
def missing(self):
    """Get missing assets (as new `AssetList`).

    Missing assets are assets that are not available locally nor remotely
    on asset server.
    """
    return AssetList([ a for a in self if a.isMissing() ])
def notInstalled(self)

Get assets that are not installed locally (as new AssetList).

Expand source code
def notInstalled(self):
    """Get assets that are not installed locally (as new `AssetList`)."""
    return AssetList([ a for a in self if not a.localVersion() ])
def validate(self, localOnly=False)

Check if all assets on the list are available.

Parameters

localOnly : bool, optional
If True this method will check if all assets are installed locally, otherwise it will check if assets are available either locally or on asset server.

Raises

Error
At least one asset is not available.
Expand source code
def validate(self, localOnly=False):
    """Check if all assets on the list are available.

    Parameters
    ----------
    localOnly: bool, optional
        If `True` this method will check if all assets are installed
        locally, otherwise it will check if assets are available either
        locally or on asset server.

    Raises
    ------
    Error
        At least one asset is not available.
    """
    if localOnly:
        assets = self.notInstalled()
    else:
        assets = self.missing()

    if assets:
        msg = []
        speech = [ asset for asset in assets if asset.type == 'speech' ]
        dicts  = [ asset for asset in assets if asset.type == 'dict' ]

        if speech:
            langs = ', '.join([ languages.getName(a.params[0]) for a in speech ])
            msg += [ _('Synchronization with {} audio is currently not supported.') \
                    .format(langs) ]
        if dicts:
            langs = [ ' - '.join([ languages.getName(p) for p in a.params ]) for a in dicts ]
            msg += [ _('Synchronization between languages {} is currently not supported.') \
                    .format(', '.join(langs)) ]

        msg += [ '', _('missing assets:') ]
        msg += [ ' - ' + asset.getPrettyName() for asset in assets ]
        raise error.Error('\n'.join(msg))