Skip to content

Commit

Permalink
Add headers in request
Browse files Browse the repository at this point in the history
Ashinsk committed May 31, 2024
1 parent c877691 commit 3116d34
Showing 5 changed files with 20 additions and 21 deletions.
4 changes: 0 additions & 4 deletions jaggery/.flake8

This file was deleted.

6 changes: 4 additions & 2 deletions jaggery/sachet/admin.py
Original file line number Diff line number Diff line change
@@ -73,7 +73,8 @@ def rebuild_all_node_schema(self, request, pk):
catalog = Catalog.objects.get(pk=pk)
try:
for sub_catalog in catalog.sub_catalogs:
catalog.get_or_create_latest_store(sub_catalog)
# Might need to change the headers
catalog.get_or_create_latest_store(sub_catalog, headers=request.headers)
messages.success(request, "Node rebuild completed")
except Store.DoesNotExist:
messages.error(
@@ -117,7 +118,8 @@ def get_urls(self):

def rebuild_node_schema(self, request, pk):
store = Store.objects.get(pk=pk)
obj = store.catalog.get_or_create_latest_store(store.sub_catalog, force=True)
# Might need to change the headers
obj = store.catalog.get_or_create_latest_store(store.sub_catalog, force=True, headers=request.headers)
obj_url = reverse('admin:sachet_store_change', args=[obj.pk])

message = format_html(
2 changes: 1 addition & 1 deletion jaggery/sachet/apis.py
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ def node_data(self, request, *args, **kwargs):
sub_catalog = request.GET.urlencode()
instance: Catalog = self.get_object()
try:
store: Store = instance.get_or_create_latest_store(sub_catalog=sub_catalog)
store: Store = instance.get_or_create_latest_store(sub_catalog=sub_catalog, headers=request.headers)
data, _ = store.get_node_schema()
return Response(data)
except Store.DoesNotExist as exp:
25 changes: 13 additions & 12 deletions jaggery/sachet/models.py
Original file line number Diff line number Diff line change
@@ -80,7 +80,7 @@ def get_node_url(self) -> str:
"""The url from which the current node data is retrieved"""
return NODE_API_URL.format(node_name=self.slug, version=self.latest_version)

def get_or_create_latest_store(self, sub_catalog: str = None, force: bool=False) -> "Store":
def get_or_create_latest_store(self, sub_catalog: str = None, force: bool=False, **kwargs) -> "Store":
"""Get latest store with version
:param force: If set to true will force to get latest store disregarding the expiry date.
"""
@@ -92,10 +92,10 @@ def get_or_create_latest_store(self, sub_catalog: str = None, force: bool=False)
).last()

if not store or store.is_expired or self.is_expired or force:
store = self.fetch_main_catalog_content()
store = self.fetch_main_catalog_content(**kwargs)

if sub_catalog:
store = self.fetch_sub_catalog_content(sub_catalog)
store = self.fetch_sub_catalog_content(sub_catalog, **kwargs)
return store

@classmethod
@@ -121,7 +121,7 @@ def end_build_lock(self, sub_catalog: str = "root"):
r_delete(r1, f"catalog-status:{self.id}:{sub_catalog}")

@transaction.atomic
def fetch_sub_catalog_content(self, sub_catalog: str):
def fetch_sub_catalog_content(self, sub_catalog: str, **kwargs):
"""Build new version of the store"""
if sub_catalog and sub_catalog not in self.sub_catalogs:
raise InvalidSubCatalogException(f"Invalid {sub_catalog} for catalog")
@@ -131,7 +131,7 @@ def fetch_sub_catalog_content(self, sub_catalog: str):

expires_on = get_local_time() + timedelta(seconds=self.ttl)
store = Store.new(
self, sub_catalog, expires_on, self.latest_version, fetch_content=True
self, sub_catalog, expires_on, self.latest_version, fetch_content=True, **kwargs
)

self.end_build_lock(sub_catalog)
@@ -146,7 +146,7 @@ def fetch_sub_catalog_content(self, sub_catalog: str):
return store

@transaction.atomic
def fetch_main_catalog_content(self):
def fetch_main_catalog_content(self, **kwargs):
"""Build new version of the store"""
try:
self.start_build_lock()
@@ -156,7 +156,7 @@ def fetch_main_catalog_content(self):

version_by_timestamp = int(now.timestamp())
store = Store.new(
self, None, expires_on, version_by_timestamp, fetch_content=True
self, None, expires_on, version_by_timestamp, fetch_content=True, **kwargs
)

obj = Catalog.objects.select_for_update().get(pk=self.pk)
@@ -257,6 +257,7 @@ def new(
expires_on: datetime,
version: str,
fetch_content: bool = False,
**kwargs
):
"""
Create a new store for the catalog.
@@ -275,12 +276,12 @@ def new(
},
)
if fetch_content:
obj.fetch_and_write_to_db()
obj.fetch_and_write_to_db(**kwargs)
return obj

def request_data(self) -> dict:
def request_data(self, headers: dict = {}) -> dict:
"""Get new data from request url"""
response = requests.get(self.url, timeout=REQUEST_TIMEOUT)
response = requests.get(self.url, timeout=REQUEST_TIMEOUT, headers=dict(headers))
if not response.ok:
logger.error(f"[STORE] Fetch data error idx - {self.idx}")
raise WriteToCacheError(
@@ -302,12 +303,12 @@ def get_node_schema(self):
}
return data, self.expires_on

def fetch_and_write_to_db(self):
def fetch_and_write_to_db(self, **kwargs):
"""Write to db"""
now = get_local_time()

# Get data from request
data = self.request_data()
data = self.request_data(headers=kwargs.get("headers") or {})

self.content = data
self.has_content = True
4 changes: 2 additions & 2 deletions sugarcane/apis/cdn.py
Original file line number Diff line number Diff line change
@@ -47,7 +47,7 @@ def master():
if MASTER_JAGGERY_API_URL:
flask_app.logger.info("[MASTER] Initiate retrieve master data")
url = build_url(JAGGERY_BASE_URL, MASTER_JAGGERY_API_URL)
response = requests.get(url)
response = requests.get(url, headers=dict(request.headers))
if not response.ok:
flask_app.logger.error(
f"[MASTER] Could not fetch master data {response.content}"
@@ -99,7 +99,7 @@ def node(version, node_name):
url = build_url(
JAGGERY_BASE_URL, NODE_JAGGERY_API_URL.format(node_name=node_name)
)
response = requests.get(url, params=request.args)
response = requests.get(url, params=request.args, headers=dict(request.headers))
if not response.ok:
flask_app.logger.error(
f"[NODE] Could not fetch {verbosed_versioned_key} node data {response.content}"

0 comments on commit 3116d34

Please sign in to comment.