def METHOD_NAME(self, provider, project_name, site_name,
                 tree=None, presets=None):
    """
        Returns new instance of provider client for specific site.
        One provider could have multiple sites.
        'tree' is used for injecting already created memory structure,
        without it constructor of provider would need to calculate it
        from scratch, which could be expensive.
    Args:
        provider (string):  'gdrive','S3'
        site_name (string): descriptor of site, different service accounts
            must have different site name
        project_name (string): different projects could have diff. sites
        tree (dictionary):  - folder paths to folder id structure
        presets (dictionary): config for provider and site (eg.
            "credentials_url"..)
    Returns:
        (implementation of AbstractProvider)
    """
    creator_info = self._get_creator_info(provider)
    # call init
    site = creator_info[0](project_name, site_name, tree, presets)
    return site