11import requests
22import platform
33from re import sub
4- from .utils import ConfigurationException , retry_request , string_class
4+ from .utils import ConfigurationException , NotSupportedException
5+ from .utils import retry_request , string_class
56from .errors import get_error , RateLimitExceededError , EntryNotFoundError
67from .resource_builder import ResourceBuilder
78from .content_type_cache import ContentTypeCache
@@ -32,6 +33,8 @@ class Client(object):
3233 :param api_version: (optional) Target version of the Contentful API.
3334 :param default_locale: (optional) Default Locale for your Space,
3435 defaults to 'en-US'.
36+ :param environment: (optional) Default Environment for client, defaults
37+ to 'master'.
3538 :param https: (optional) Boolean determining wether to use https
3639 or http, defaults to True.
3740 :param authorization_as_header: (optional) Boolean determining wether
@@ -79,6 +82,7 @@ def __init__(
7982 api_url = 'cdn.contentful.com' ,
8083 api_version = 1 ,
8184 default_locale = 'en-US' ,
85+ environment = 'master' ,
8286 https = True ,
8387 authorization_as_header = True ,
8488 raw_mode = False ,
@@ -101,6 +105,7 @@ def __init__(
101105 self .api_url = api_url
102106 self .api_version = api_version
103107 self .default_locale = default_locale
108+ self .environment = environment
104109 self .https = https
105110 self .authorization_as_header = authorization_as_header
106111 self .raw_mode = raw_mode
@@ -156,7 +161,9 @@ def content_type(self, content_type_id, query=None):
156161 """
157162
158163 return self ._get (
159- '/content_types/{0}' .format (content_type_id ),
164+ self .environment_url (
165+ '/content_types/{0}' .format (content_type_id )
166+ ),
160167 query
161168 )
162169
@@ -178,7 +185,7 @@ def content_types(self, query=None):
178185 """
179186
180187 return self ._get (
181- '/content_types' ,
188+ self . environment_url ( '/content_types' ) ,
182189 query
183190 )
184191
@@ -204,7 +211,7 @@ def entry(self, entry_id, query=None):
204211 try :
205212 query .update ({'sys.id' : entry_id })
206213 return self ._get (
207- '/entries' ,
214+ self . environment_url ( '/entries' ) ,
208215 query
209216 )[0 ]
210217 except IndexError :
@@ -240,7 +247,7 @@ def entries(self, query=None):
240247 self ._normalize_select (query )
241248
242249 return self ._get (
243- '/entries' ,
250+ self . environment_url ( '/entries' ) ,
244251 query
245252 )
246253
@@ -260,7 +267,9 @@ def asset(self, asset_id, query=None):
260267 """
261268
262269 return self ._get (
263- '/assets/{0}' .format (asset_id ),
270+ self .environment_url (
271+ '/assets/{0}' .format (asset_id )
272+ ),
264273 query
265274 )
266275
@@ -286,7 +295,30 @@ def assets(self, query=None):
286295 self ._normalize_select (query )
287296
288297 return self ._get (
289- '/assets' ,
298+ self .environment_url ('/assets' ),
299+ query
300+ )
301+
302+ def locales (self , query = None ):
303+ """Fetches all Locales from the Environment (up to the set limit, can be modified in `query`).
304+
305+ # TODO: fix url
306+ API Reference: https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/assets/assets-collection/get-all-assets-of-a-space
307+
308+ :param query: (optional) Dict with API options.
309+ :return: List of :class:`Locale <contentful.locale.Locale>` objects.
310+ :rtype: List of contentful.locale.Locale
311+
312+ Usage:
313+ >>> locales = client.locales()
314+ [<Locale[English (United States)] code='en-US' default=True fallback_code=None optional=False>]
315+ """
316+
317+ if query is None :
318+ query = {}
319+
320+ return self ._get (
321+ self .environment_url ('/locales' ),
290322 query
291323 )
292324
@@ -304,6 +336,9 @@ def sync(self, query=None):
304336 <SyncPage next_sync_token='w5ZGw6JFwqZmVcKsE8Kow4grw45QdybC...'>
305337 """
306338
339+ if self .environment != 'master' :
340+ raise NotSupportedException ('The sync endpoint is only available for the master environment.' )
341+
307342 if query is None :
308343 query = {}
309344 self ._normalize_sync (query )
@@ -313,6 +348,14 @@ def sync(self, query=None):
313348 query
314349 )
315350
351+ def environment_url (self , url ):
352+ """Formats the URL with the environment."""
353+
354+ return "/environments/{0}{1}" .format (
355+ self .environment ,
356+ url
357+ )
358+
316359 def _normalize_select (self , query ):
317360 """
318361 If the query contains the :select operator, we enforce :sys properties.
0 commit comments