class AuthClient: host = "api.smartling.com" authUri = "/auth-api/v2/authenticate" refreshUri = "/auth-api/v2/authenticate/refresh" timeJitter = 5 #seconds off server expires time def __init__(self, userIdentifier, userSecret, proxySettings=None): self.httpClient = HttpClient(self.host, proxySettings) self.userIdentifier = userIdentifier self.userSecret = userSecret self.accessExpiresAt = 0 self.refreshExpiresAt = 0 def request(self, uri, body): header = {"Content-Type": "application/json"} response_data, status_code = self.httpClient.getHttpResponseAndStatus(ReqMethod.POST, uri, params={}, extraHeaders=header, requestBody=body) apiResponse = ApiResponse(response_data, status_code) now = time.time() try: self.accessToken = apiResponse.data.accessToken self.refreshToken = apiResponse.data.refreshToken self.accessExpiresAt = now + apiResponse.data.expiresIn - self.timeJitter self.refreshExpiresAt = now + apiResponse.data.refreshExpiresIn - self.timeJitter except Exception, e: print e self.accessToken = None
class FileApiBase: """ basic class implementing low-level api calls """ response_as_string = False def __init__(self, host, apiKey, projectId, proxySettings=None): self.host = host self.apiKey = apiKey self.projectId = projectId self.proxySettings = proxySettings self.httpClient = HttpClient(host, proxySettings) def addApiKeys(self, params): params[Params.API_KEY] = self.apiKey params[Params.PROJECT_ID] = self.projectId def uploadMultipart(self, uri, params): self.addApiKeys(params) params[Params.FILE] = open(params[Params.FILE_PATH], "rb") del params[Params.FILE_PATH] # no need in extra field in POST response_data, status_code = self.getHttpResponseAndStatus(ReqMethod.POST, uri, params, MultipartPostHandler) response_data = response_data.strip() if self.response_as_string: return response_data, status_code return ApiResponse(response_data, status_code), status_code def getHttpResponseAndStatus(self, method, uri, params, handler=None): return self.httpClient.getHttpResponseAndStatus(method, uri, params, handler) def command_raw(self, method, uri, params): self.addApiKeys(params) return self.getHttpResponseAndStatus(method, uri, params) def command(self, method, uri, params): data, code = self.command_raw(method, uri, params) if self.response_as_string: return data, code return ApiResponse(data, code), code # commands def commandUpload(self, uploadData): params = { Params.FILE_URI: uploadData.uri or uploadData.name, Params.FILE_TYPE: uploadData.type, Params.FILE_PATH: uploadData.path + uploadData.name, } if uploadData.approveContent: params[Params.APPROVED] = uploadData.approveContent if uploadData.callbackUrl: params[Params.CALLBACK_URL] = uploadData.callbackUrl if uploadData.directives: for index, directive in enumerate(uploadData.directives): params[directive.sl_prefix + directive.name] = directive.value if uploadData.localesToApprove: for index, locale in enumerate(uploadData.localesToApprove): params["{0}[{1}]".format(Params.LOCALES_TO_APPROVE, index)] = locale return self.uploadMultipart(Uri.UPLOAD, params) def commandList(self, **kw): return self.command(ReqMethod.POST, Uri.LIST, kw) def commandLastModified(self, fileUri, locale=None, **kw): kw[Params.FILE_URI] = fileUri if locale is not None: kw[Params.LOCALE] = locale return self.command(ReqMethod.GET, Uri.LAST_MODIFIED, kw) def commandGet(self, fileUri, locale, **kw): kw[Params.FILE_URI] = fileUri kw[Params.LOCALE] = locale if Params.RETRIEVAL_TYPE in kw and not kw[Params.RETRIEVAL_TYPE] in Params.allowedRetrievalTypes: raise "Not allowed value `%s` for parameter:%s try one of %s" % ( kw[Params.RETRIEVAL_TYPE], Params.RETRIEVAL_TYPE, Params.allowedRetrievalTypes, ) return self.command_raw(ReqMethod.POST, Uri.GET, kw) def commandDelete(self, fileUri, **kw): kw[Params.FILE_URI] = fileUri return self.command(ReqMethod.POST, Uri.DELETE, kw) def commandImport(self, uploadData, locale, **kw): kw[Params.FILE_URI] = uploadData.uri kw[Params.FILE_TYPE] = uploadData.type kw[Params.FILE_PATH] = uploadData.path + uploadData.name kw["file"] = uploadData.path + uploadData.name + ";type=text/plain" kw[Params.LOCALE] = locale self.addApiKeys(kw) return self.uploadMultipart(Uri.IMPORT, kw) def commandStatus(self, fileUri, locale, **kw): kw[Params.FILE_URI] = fileUri kw[Params.LOCALE] = locale return self.command(ReqMethod.POST, Uri.STATUS, kw) def commandRename(self, fileUri, newUri, **kw): kw[Params.FILE_URI] = fileUri kw[Params.FILE_URI_NEW] = newUri return self.command(ReqMethod.POST, Uri.RENAME, kw)
class FileApiBase: """ basic class implementing low-level api calls """ response_as_string = False def __init__(self, host, apiKey, projectId, proxySettings=None): self.host = host self.apiKey = apiKey self.projectId = projectId self.proxySettings = proxySettings self.httpClient = HttpClient(host, proxySettings) def addApiKeys(self, params): params[Params.API_KEY] = self.apiKey params[Params.PROJECT_ID] = self.projectId def uploadMultipart(self, uri, params): self.addApiKeys(params) params[Params.FILE] = open(params[Params.FILE_PATH], 'rb') del params[Params.FILE_PATH] # no need in extra field in POST response_data, status_code = self.getHttpResponseAndStatus( ReqMethod.POST, uri, params, MultipartPostHandler) response_data = response_data.strip() if self.response_as_string: return response_data, status_code return ApiResponse(response_data, status_code), status_code def getHttpResponseAndStatus(self, method, uri, params, handler=None): return self.httpClient.getHttpResponseAndStatus( method, uri, params, handler) def command_raw(self, method, uri, params): self.addApiKeys(params) return self.getHttpResponseAndStatus(method, uri, params) def command(self, method, uri, params): data, code = self.command_raw(method, uri, params) if self.response_as_string: return data, code return ApiResponse(data, code), code # commands def commandUpload(self, uploadData): params = { Params.FILE_URI: uploadData.uri or uploadData.name, Params.FILE_TYPE: uploadData.type, Params.FILE_PATH: uploadData.path + uploadData.name } if (uploadData.approveContent): params[Params.APPROVED] = uploadData.approveContent if (uploadData.callbackUrl): params[Params.CALLBACK_URL] = uploadData.callbackUrl if (uploadData.directives): for index, directive in enumerate(uploadData.directives): params[directive.sl_prefix + directive.name] = directive.value if (uploadData.localesToApprove): for index, locale in enumerate(uploadData.localesToApprove): params['{0}[{1}]'.format(Params.LOCALES_TO_APPROVE, index)] = locale return self.uploadMultipart(Uri.UPLOAD, params) def commandList(self, **kw): return self.command(ReqMethod.POST, Uri.LIST, kw) def commandLastModified(self, fileUri, locale=None, **kw): kw[Params.FILE_URI] = fileUri if locale is not None: kw[Params.LOCALE] = locale return self.command(ReqMethod.GET, Uri.LAST_MODIFIED, kw) def commandGet(self, fileUri, locale, **kw): kw[Params.FILE_URI] = fileUri kw[Params.LOCALE] = locale if Params.RETRIEVAL_TYPE in kw and not kw[ Params.RETRIEVAL_TYPE] in Params.allowedRetrievalTypes: raise "Not allowed value `%s` for parameter:%s try one of %s" % ( kw[Params.RETRIEVAL_TYPE], Params.RETRIEVAL_TYPE, Params.allowedRetrievalTypes) return self.command_raw(ReqMethod.POST, Uri.GET, kw) def commandDelete(self, fileUri, **kw): kw[Params.FILE_URI] = fileUri return self.command(ReqMethod.POST, Uri.DELETE, kw) def commandImport(self, uploadData, locale, **kw): kw[Params.FILE_URI] = uploadData.uri kw[Params.FILE_TYPE] = uploadData.type kw[Params.FILE_PATH] = uploadData.path + uploadData.name kw["file"] = uploadData.path + uploadData.name + ";type=text/plain" kw[Params.LOCALE] = locale self.addApiKeys(kw) return self.uploadMultipart(Uri.IMPORT, kw) def commandStatus(self, fileUri, locale, **kw): kw[Params.FILE_URI] = fileUri kw[Params.LOCALE] = locale return self.command(ReqMethod.POST, Uri.STATUS, kw) def commandRename(self, fileUri, newUri, **kw): kw[Params.FILE_URI] = fileUri kw[Params.FILE_URI_NEW] = newUri return self.command(ReqMethod.POST, Uri.RENAME, kw)
class ApiV2: """ basic class implementing low-level api calls """ host = 'api.smartling.com' response_as_string = False def __init__(self, userIdentifier, userSecret, proxySettings=None): self.userIdentifier = userIdentifier self.userSecret = userSecret self.proxySettings = proxySettings self.httpClient = HttpClient(self.host, proxySettings) self.authClient = AuthClient(userIdentifier, userSecret, proxySettings) def uploadMultipart(self, uri, params, response_as_string=False): if params.has_key(Params.FILE_PATH): params[Params.FILE] = open(params[Params.FILE_PATH], 'rb') del params[Params.FILE_PATH] # no need in extra field in POST authHeader = self.getAuthHeader() response_data, status_code = self.getHttpResponseAndStatus(ReqMethod.POST ,uri, params, MultipartPostHandler, extraHeaders = authHeader) response_data = response_data.strip() if self.response_as_string or response_as_string: return response_data, status_code return ApiResponse(response_data, status_code), status_code def getHttpResponseAndStatus(self, method, uri, params, handler=None, extraHeaders = None): return self.httpClient.getHttpResponseAndStatus(method, uri, params, handler, extraHeaders = extraHeaders) def getAuthHeader(self): token = self.authClient.getToken() if token is None: raise "Error getting token, check you credentials" return {"Authorization" : "Bearer "+ token} def command_raw(self, method, uri, params): authHeader = self.getAuthHeader() return self.getHttpResponseAndStatus(method, uri, params, extraHeaders = authHeader) def command(self, method, uri, params): data, code = self.command_raw(method, uri, params) if self.response_as_string: return data, code return ApiResponse(data, code), code def validateFileTypes(self, kw): fileTypes = kw.get("fileTypes",[]) if type(fileTypes) != type([]) and type(fileTypes) != type(()): fileTypes = [fileTypes] for t in fileTypes: if not getattr(FileTypes, t, None): unsupported = "\nUnsupported file type:%s\n" % t raise unsupported def checkRetrievalType(self, kw): if Params.RETRIEVAL_TYPE in kw and not kw[Params.RETRIEVAL_TYPE] in Params.allowedRetrievalTypes: raise "Not allowed value `%s` for parameter:%s try one of %s" % (kw[Params.RETRIEVAL_TYPE], Params.RETRIEVAL_TYPE, Params.allowedRetrievalTypes) def processDirectives(self, params, directives): for name, value in directives.items(): params["smartling." + name] = value
class FileApiV2: """ basic class implementing low-level api calls """ host = 'api.smartling.com' response_as_string = False def __init__(self, userIdentifier, userSecret, projectId, proxySettings=None): self.userIdentifier = userIdentifier self.userSecret = userSecret self.projectId = projectId self.proxySettings = proxySettings self.httpClient = HttpClient(self.host, proxySettings) self.authClient = AuthClient(userIdentifier, userSecret, proxySettings) self.urlHelper = UrlV2Helper(self.projectId) def uploadMultipart(self, uri, params, response_as_string=False): if params.has_key(Params.FILE_PATH): params[Params.FILE] = open(params[Params.FILE_PATH], 'rb') del params[Params.FILE_PATH] # no need in extra field in POST authHeader = self.getAuthHeader() response_data, status_code = self.getHttpResponseAndStatus(ReqMethod.POST ,uri, params, MultipartPostHandler, extraHeaders = authHeader) response_data = response_data.strip() if self.response_as_string or response_as_string: return response_data, status_code return ApiResponse(response_data, status_code), status_code def getHttpResponseAndStatus(self, method, uri, params, handler=None, extraHeaders = None): return self.httpClient.getHttpResponseAndStatus(method, uri, params, handler, extraHeaders = extraHeaders) def getAuthHeader(self): token = self.authClient.getToken() if token is None: raise "Error getting token, check you credentials" return {"Authorization" : "Bearer "+ token} def command_raw(self, method, uri, params): authHeader = self.getAuthHeader() return self.getHttpResponseAndStatus(method, uri, params, extraHeaders = authHeader) def command(self, method, uri, params): data, code = self.command_raw(method, uri, params) if self.response_as_string: return data, code return ApiResponse(data, code), code def validateFileTypes(self, kw): fileTypes = kw.get("fileTypes",[]) if type(fileTypes) != type([]) and type(fileTypes) != type(()): fileTypes = [fileTypes] for t in fileTypes: if not getattr(FileTypes, t, None): unsupported = "\nUnsupported file type:%s\n" % t raise unsupported def checkRetrievalType(self, kw): if Params.RETRIEVAL_TYPE in kw and not kw[Params.RETRIEVAL_TYPE] in Params.allowedRetrievalTypes: raise "Not allowed value `%s` for parameter:%s try one of %s" % (kw[Params.RETRIEVAL_TYPE], Params.RETRIEVAL_TYPE, Params.allowedRetrievalTypes) def processDirectives(self, params, directives): for name, value in directives.items(): params["smartling." + name] = value #----------------------------------------------------------------------------------- def commandGet(self, fileUri, locale, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/Single-Locale/ """ kw[Params.FILE_URI] = fileUri self.checkRetrievalType(kw) self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET, localeId=locale) return self.command_raw(ReqMethod.GET, url, kw) def commandGetMultipleLocalesAsZip(self, fileUri, localeIds, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/Multiple-Locales/ """ kw[Params.FILE_URIS] = fileUri kw[Params.LOCALE_IDS] = localeIds self.checkRetrievalType(kw) self.processDirectives(kw, directives) return self.command_raw(ReqMethod.GET, self.urlHelper.getUrl(self.urlHelper.GET_MULTIPLE_LOCALES), kw) def commandGetAllLocalesZip(self, fileUri, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/All-Locales """ kw[Params.FILE_URI] = fileUri self.checkRetrievalType(kw) self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET_ALL_LOCALES_ZIP) return self.command_raw(ReqMethod.GET, url, kw) def commandGetAllLocalesCsv(self, fileUri, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/All-Locales-CSV """ kw[Params.FILE_URI] = fileUri self.checkRetrievalType(kw) self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET_ALL_LOCALES_CSV) return self.command_raw(ReqMethod.GET, url, kw) def commandGetOriginal(self, fileUri): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/Original-File/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.GET_ORIGINAL) return self.command_raw(ReqMethod.GET, url, kw) def commandList(self, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/List/ """ url = self.urlHelper.getUrl(self.urlHelper.LIST_FILES) self.validateFileTypes(kw) return self.command(ReqMethod.GET, url, kw) def commandListFileTypes(self, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/List-File-Types/ """ return self.command(ReqMethod.GET, self.urlHelper.getUrl(self.urlHelper.LIST_FILE_TYPES), kw) def commandUpload(self, filePath, fileType, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Upload-File/ """ params = { Params.FILE_URI: filePath, Params.FILE_TYPE: fileType, Params.FILE_PATH: filePath } for k,v in kw.items(): params[k] = v self.processDirectives(params, directives) url = self.urlHelper.getUrl(self.urlHelper.UPLOAD) return self.uploadMultipart(url, params) def commandProjectDetails(self): """ http://docs.smartling.com/pages/API/v2/Projects/Project-Details/ """ kw = {} url = self.urlHelper.getUrl(self.urlHelper.PROJECT_DETAILS) return self.command(ReqMethod.GET, url, kw) def commandProjects(self, accountUid): """ http://docs.smartling.com/pages/API/v2/Projects/List-Projects/ """ kw = {} url = self.urlHelper.getUrl(self.urlHelper.PROJECTS, accountUid = accountUid) return self.command(ReqMethod.GET, url, kw) def commandDelete(self, fileUri, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Delete/ """ kw[Params.FILE_URI] = fileUri uri = self.urlHelper.getUrl(self.urlHelper.DELETE) return self.command(ReqMethod.POST, uri, kw) def commandStatus(self, fileUri): """ http://docs.smartling.com/pages/API/v2/FileAPI/Status/All-Locales/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.STATUS_ALL) return self.command(ReqMethod.GET, url, kw) def commandStatusLocale(self, fileUri, localeId): """ http://docs.smartling.com/pages/API/v2/FileAPI/Status/Single-Locale/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.STATUS_LOCALE, localeId = localeId) return self.command(ReqMethod.GET, url, kw) def commandRename(self, fileUri, newFileUrl): """ http://docs.smartling.com/pages/API/v2/FileAPI/Rename/ """ kw = {} kw[Params.FILE_URI] = fileUri kw[Params.FILE_URI_NEW] = newFileUrl url = self.urlHelper.getUrl(self.urlHelper.RENAME) return self.command(ReqMethod.POST, url, kw) def commandLastModified(self, fileUri, localeId, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Last-Modified/Single-Locale/ """ kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.LAST_MODIFIED, localeId = localeId) return self.command(ReqMethod.GET, url, kw) def commandLastModifiedAll(self, fileUri, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Last-Modified/All-Locales/ """ kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.LAST_MODIFIED_ALL) return self.command(ReqMethod.GET, url, kw) def commandImport(self, fileUriOriginal, filePathTranslated, fileType, localeId, directives={}, **kw): self.validateFileTypes({"fileTypes":fileType}) params = {} params[Params.FILE_URI] = fileUriOriginal params[Params.FILE_TYPE] = fileType params[Params.FILE_PATH] = filePathTranslated params["file"] = filePathTranslated + ";type=text/plain" for k,v in kw.items(): params[k] = v self.processDirectives(params, directives) url = self.urlHelper.getUrl(self.urlHelper.IMPORT, localeId = localeId) return self.uploadMultipart(url, params) def commandListAuthorizedLocales(self, fileUri): """ http://docs.smartling.com/pages/API/v2/FileAPI/Authorize-Content/List-Authorized-Locales/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.LIST_AUTHORIZED_LOCALES) return self.command(ReqMethod.GET, url, kw) def commandAuthorize(self, fileUri, localeIds): """ http://docs.smartling.com/pages/API/v2/FileAPI/Authorize-Content/Authorize/ """ kw = {} kw[Params.FILE_URI] = fileUri kw[Params.LOCALE_IDS_BRACKET] = ",".join(localeIds) url = self.urlHelper.getUrl(self.urlHelper.AUTHORIZE) return self.command(ReqMethod.POST, url, kw) def commandUnauthorize(self, fileUri, localeIds): """ http://docs.smartling.com/pages/API/v2/FileAPI/Authorize-Content/Unauthorize/ """ kw = {} kw[Params.FILE_URI] = fileUri kw[Params.LOCALE_IDS_BRACKET] = ",".join(localeIds) url = self.urlHelper.getUrl(self.urlHelper.UNAUTHORIZE) return self.command(ReqMethod.DELETE, url, kw) def commandGetTranslations(self, fileUri, filePath, localeId, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Get-Translations/ """ kw[Params.FILE_URI] = fileUri kw[Params.FILE_PATH] = filePath kw["file"] = filePath + ";type=text/plain" self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET_TRANSLATIONS, localeId = localeId) return self.uploadMultipart(url, kw, response_as_string=True)
class FileApiV2: """ basic class implementing low-level api calls """ host = 'api.smartling.com' response_as_string = False def __init__(self, userIdentifier, userSecret, projectId, proxySettings=None): self.userIdentifier = userIdentifier self.userSecret = userSecret self.projectId = projectId self.proxySettings = proxySettings self.httpClient = HttpClient(self.host, proxySettings) self.authClient = AuthClient(userIdentifier, userSecret, proxySettings) self.urlHelper = UrlV2Helper(self.projectId) def uploadMultipart(self, uri, params, response_as_string=False): if params.has_key(Params.FILE_PATH): params[Params.FILE] = open(params[Params.FILE_PATH], 'rb') del params[Params.FILE_PATH] # no need in extra field in POST authHeader = self.getAuthHeader() response_data, status_code = self.getHttpResponseAndStatus( ReqMethod.POST, uri, params, MultipartPostHandler, extraHeaders=authHeader) response_data = response_data.strip() if self.response_as_string or response_as_string: return response_data, status_code return ApiResponse(response_data, status_code), status_code def getHttpResponseAndStatus(self, method, uri, params, handler=None, extraHeaders=None): return self.httpClient.getHttpResponseAndStatus( method, uri, params, handler, extraHeaders=extraHeaders) def getAuthHeader(self): token = self.authClient.getToken() if token is None: raise "Error getting token, check you credentials" return {"Authorization": "Bearer " + token} def command_raw(self, method, uri, params): authHeader = self.getAuthHeader() return self.getHttpResponseAndStatus(method, uri, params, extraHeaders=authHeader) def command(self, method, uri, params): data, code = self.command_raw(method, uri, params) if self.response_as_string: return data, code return ApiResponse(data, code), code def validateFileTypes(self, kw): fileTypes = kw.get("fileTypes", []) if type(fileTypes) != type([]) and type(fileTypes) != type(()): fileTypes = [fileTypes] for t in fileTypes: if not getattr(FileTypes, t, None): unsupported = "\nUnsupported file type:%s\n" % t raise unsupported def checkRetrievalType(self, kw): if Params.RETRIEVAL_TYPE in kw and not kw[ Params.RETRIEVAL_TYPE] in Params.allowedRetrievalTypes: raise "Not allowed value `%s` for parameter:%s try one of %s" % ( kw[Params.RETRIEVAL_TYPE], Params.RETRIEVAL_TYPE, Params.allowedRetrievalTypes) def processDirectives(self, params, directives): for name, value in directives.items(): params["smartling." + name] = value #----------------------------------------------------------------------------------- def commandGet(self, fileUri, locale, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/Single-Locale/ """ kw[Params.FILE_URI] = fileUri self.checkRetrievalType(kw) self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET, localeId=locale) return self.command_raw(ReqMethod.GET, url, kw) def commandGetMultipleLocalesAsZip(self, fileUri, localeIds, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/Multiple-Locales/ """ kw[Params.FILE_URIS] = fileUri kw[Params.LOCALE_IDS] = localeIds self.checkRetrievalType(kw) self.processDirectives(kw, directives) return self.command_raw( ReqMethod.GET, self.urlHelper.getUrl(self.urlHelper.GET_MULTIPLE_LOCALES), kw) def commandGetAllLocalesZip(self, fileUri, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/All-Locales """ kw[Params.FILE_URI] = fileUri self.checkRetrievalType(kw) self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET_ALL_LOCALES_ZIP) return self.command_raw(ReqMethod.GET, url, kw) def commandGetAllLocalesCsv(self, fileUri, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/All-Locales-CSV """ kw[Params.FILE_URI] = fileUri self.checkRetrievalType(kw) self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET_ALL_LOCALES_CSV) return self.command_raw(ReqMethod.GET, url, kw) def commandGetOriginal(self, fileUri): """ http://docs.smartling.com/pages/API/v2/FileAPI/Download-File/Original-File/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.GET_ORIGINAL) return self.command_raw(ReqMethod.GET, url, kw) def commandList(self, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/List/ """ url = self.urlHelper.getUrl(self.urlHelper.LIST_FILES) self.validateFileTypes(kw) return self.command(ReqMethod.GET, url, kw) def commandListFileTypes(self, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/List-File-Types/ """ return self.command( ReqMethod.GET, self.urlHelper.getUrl(self.urlHelper.LIST_FILE_TYPES), kw) def commandUpload(self, filePath, fileType, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Upload-File/ """ params = { Params.FILE_URI: filePath, Params.FILE_TYPE: fileType, Params.FILE_PATH: filePath } for k, v in kw.items(): params[k] = v self.processDirectives(params, directives) url = self.urlHelper.getUrl(self.urlHelper.UPLOAD) return self.uploadMultipart(url, params) def commandProjectDetails(self): """ http://docs.smartling.com/pages/API/v2/Projects/Project-Details/ """ kw = {} url = self.urlHelper.getUrl(self.urlHelper.PROJECT_DETAILS) return self.command(ReqMethod.GET, url, kw) def commandProjects(self, accountUid): """ http://docs.smartling.com/pages/API/v2/Projects/List-Projects/ """ kw = {} url = self.urlHelper.getUrl(self.urlHelper.PROJECTS, accountUid=accountUid) return self.command(ReqMethod.GET, url, kw) def commandDelete(self, fileUri, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Delete/ """ kw[Params.FILE_URI] = fileUri uri = self.urlHelper.getUrl(self.urlHelper.DELETE) return self.command(ReqMethod.POST, uri, kw) def commandStatus(self, fileUri): """ http://docs.smartling.com/pages/API/v2/FileAPI/Status/All-Locales/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.STATUS_ALL) return self.command(ReqMethod.GET, url, kw) def commandStatusLocale(self, fileUri, localeId): """ http://docs.smartling.com/pages/API/v2/FileAPI/Status/Single-Locale/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.STATUS_LOCALE, localeId=localeId) return self.command(ReqMethod.GET, url, kw) def commandRename(self, fileUri, newFileUrl): """ http://docs.smartling.com/pages/API/v2/FileAPI/Rename/ """ kw = {} kw[Params.FILE_URI] = fileUri kw[Params.FILE_URI_NEW] = newFileUrl url = self.urlHelper.getUrl(self.urlHelper.RENAME) return self.command(ReqMethod.POST, url, kw) def commandLastModified(self, fileUri, localeId, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Last-Modified/Single-Locale/ """ kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.LAST_MODIFIED, localeId=localeId) return self.command(ReqMethod.GET, url, kw) def commandLastModifiedAll(self, fileUri, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Last-Modified/All-Locales/ """ kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.LAST_MODIFIED_ALL) return self.command(ReqMethod.GET, url, kw) def commandImport(self, fileUriOriginal, filePathTranslated, fileType, localeId, directives={}, **kw): self.validateFileTypes({"fileTypes": fileType}) params = {} params[Params.FILE_URI] = fileUriOriginal params[Params.FILE_TYPE] = fileType params[Params.FILE_PATH] = filePathTranslated params["file"] = filePathTranslated + ";type=text/plain" for k, v in kw.items(): params[k] = v self.processDirectives(params, directives) url = self.urlHelper.getUrl(self.urlHelper.IMPORT, localeId=localeId) return self.uploadMultipart(url, params) def commandListAuthorizedLocales(self, fileUri): """ http://docs.smartling.com/pages/API/v2/FileAPI/Authorize-Content/List-Authorized-Locales/ """ kw = {} kw[Params.FILE_URI] = fileUri url = self.urlHelper.getUrl(self.urlHelper.LIST_AUTHORIZED_LOCALES) return self.command(ReqMethod.GET, url, kw) def commandAuthorize(self, fileUri, localeIds): """ http://docs.smartling.com/pages/API/v2/FileAPI/Authorize-Content/Authorize/ """ kw = {} kw[Params.FILE_URI] = fileUri kw[Params.LOCALE_IDS_BRACKET] = ",".join(localeIds) url = self.urlHelper.getUrl(self.urlHelper.AUTHORIZE) return self.command(ReqMethod.POST, url, kw) def commandUnauthorize(self, fileUri, localeIds): """ http://docs.smartling.com/pages/API/v2/FileAPI/Authorize-Content/Unauthorize/ """ kw = {} kw[Params.FILE_URI] = fileUri kw[Params.LOCALE_IDS_BRACKET] = ",".join(localeIds) url = self.urlHelper.getUrl(self.urlHelper.UNAUTHORIZE) return self.command(ReqMethod.DELETE, url, kw) def commandGetTranslations(self, fileUri, filePath, localeId, directives={}, **kw): """ http://docs.smartling.com/pages/API/v2/FileAPI/Get-Translations/ """ kw[Params.FILE_URI] = fileUri kw[Params.FILE_PATH] = filePath kw["file"] = filePath + ";type=text/plain" self.processDirectives(kw, directives) url = self.urlHelper.getUrl(self.urlHelper.GET_TRANSLATIONS, localeId=localeId) return self.uploadMultipart(url, kw, response_as_string=True)