def copy(self, filename, id_=-1, pre_callback=None, post_callback=None):
        """Copy a package or script to all repos.

        Determines appropriate location (for file shares) and type based
        on file extension.

        Args:
            filename: String path to the local file to copy.
            id_: Package or Script object ID to target. For use with JDS
                and CDP DP's only. If uploading a package that does not
                have a corresponding object, use id_ of -1, which is the
                default.
            pre_callback: Func to call before each distribution point
                starts copying. Should accept a Repository connection
                dictionary as a parameter. Will be called like:
                    `pre_callback(repo.connection)`
            post_callback: Func to call after each distribution point
                finishes copying. Should accept a Repository connection
                dictionary as a parameter. Will be called like:
                    `pre_callback(repo.connection)`
        """
        for repo in self._children:
            if is_package(filename):
                copy_method = repo.copy_pkg
            else:
                # All other file types can go to scripts.
                copy_method = repo.copy_script
            if pre_callback:
                pre_callback(repo.connection)
            copy_method(filename, id_)
            if post_callback:
                post_callback(repo.connection)
Copy a package or script to all repos.

        Determines appropriate location (for file shares) and type based
        on file extension.

        Args:
            filename: String path to the local file to copy.
            id_: Package or Script object ID to target. For use with JDS
                and CDP DP's only. If uploading a package that does not
                have a corresponding object, use id_ of -1, which is the
                default.
            pre_callback: Func to call before each distribution point
                starts copying. Should accept a Repository connection
                dictionary as a parameter. Will be called like:
                    `pre_callback(repo.connection)`
            post_callback: Func to call after each distribution point
                finishes copying. Should accept a Repository connection
                dictionary as a parameter. Will be called like:
                    `pre_callback(repo.connection)`