11#!/usr/bin/env python
22# -*- coding: utf-8; -*-
3+ from types import MethodType
4+
35from ads .common .decorator .utils import class_or_instance_method
6+ from oci .signer import AbstractBaseSigner
47
58# Copyright (c) 2023 Oracle and/or its affiliates.
69# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
710
811import logging
12+ import email .utils
913import os
14+ import oci
15+ import feature_store_client .feature_store as fs
1016
1117logger = logging .getLogger (__name__ )
1218from ads .common .oci_mixin import OCIModelMixin
13- import oci .feature_store
1419import yaml
1520
1621
@@ -34,9 +39,7 @@ class OCIFeatureStoreMixin(OCIModelMixin):
3439 SERVICE_ENDPOINT = "service_endpoint"
3540
3641 @classmethod
37- def init_client (
38- cls , ** kwargs
39- ) -> oci .feature_store .feature_store_client .FeatureStoreClient :
42+ def init_client (cls , ** kwargs ) -> fs .feature_store_client .FeatureStoreClient :
4043 default_kwargs : dict = cls ._get_auth ().get ("client_kwargs" , {})
4144
4245 fs_service_endpoint = (
@@ -70,13 +73,15 @@ def init_client(
7073 if fs_service_endpoint :
7174 kwargs [cls .SERVICE_ENDPOINT ] = fs_service_endpoint
7275
73- client = cls ._init_client (
74- client = oci . feature_store . feature_store_client .FeatureStoreClient , ** kwargs
76+ client : fs . FeatureStoreClient = cls ._init_client (
77+ client = fs .FeatureStoreClient , ** kwargs
7578 )
79+ signer : oci .Signer = client .base_client .signer
80+ signer .do_request_sign = MethodType (fs_do_request_sign , signer )
7681 return client
7782
7883 @property
79- def client (self ) -> oci . feature_store .feature_store_client .FeatureStoreClient :
84+ def client (self ) -> fs .feature_store_client .FeatureStoreClient :
8085 return super ().client
8186
8287 @class_or_instance_method
@@ -119,3 +124,22 @@ def list_resource(
119124 ** kwargs ,
120125 ).data
121126 return [cls .from_oci_model (item ) for item in items ]
127+
128+
129+ def inject_missing_headers (request ):
130+ # Inject date, host, and content-type if missing
131+ date = email .utils .formatdate (usegmt = True )
132+ if request .path_url .startswith ("/20230101" ):
133+ request .headers .setdefault ("x-date" , date )
134+ request .headers .setdefault (
135+ "path" , request .method .lower () + " " + request .path_url
136+ )
137+ request .headers .setdefault ("date" , date )
138+
139+
140+ def fs_do_request_sign (self , request , enforce_content_headers = True ):
141+ inject_missing_headers (request )
142+ do_request_sign = MethodType (AbstractBaseSigner .do_request_sign , self )
143+ return do_request_sign (request , enforce_content_headers )
144+
145+ # inject_missing_headers_og(request, sign_body, enforce_content_headers)
0 commit comments