Compare commits

...

1 Commits

Author SHA1 Message Date
hagen-danswer
6805574115 Added ability to set timezone offset for Confluence connector in UI 2024-12-10 14:16:43 -08:00
4 changed files with 31 additions and 10 deletions

View File

@@ -1,6 +1,5 @@
from datetime import datetime
from datetime import timedelta
from datetime import timezone
from typing import Any
from urllib.parse import quote
@@ -108,7 +107,7 @@ class ConfluenceConnector(LoadConnector, PollConnector, SlimConnector):
)
self.cql_label_filter = f" and label not in ({comma_separated_labels})"
self.timezone: timezone = timezone(offset=timedelta(hours=timezone_offset))
self.timezone_offset = timezone_offset or CONFLUENCE_TIMEZONE_OFFSET
@property
def confluence_client(self) -> OnyxConfluence:
@@ -249,13 +248,11 @@ class ConfluenceConnector(LoadConnector, PollConnector, SlimConnector):
return self._fetch_document_batches()
def poll_source(self, start: float, end: float) -> GenerateDocumentsOutput:
# Add time filters
formatted_start_time = datetime.fromtimestamp(start, tz=self.timezone).strftime(
"%Y-%m-%d %H:%M"
)
formatted_end_time = datetime.fromtimestamp(end, tz=self.timezone).strftime(
"%Y-%m-%d %H:%M"
)
# Convert float timestamps to datetime, then adjust for timezone
start_dt = datetime.fromtimestamp(start) + timedelta(hours=self.timezone_offset)
end_dt = datetime.fromtimestamp(end) + timedelta(hours=self.timezone_offset)
formatted_start_time = start_dt.strftime("%Y-%m-%d %H:%M")
formatted_end_time = end_dt.strftime("%Y-%m-%d %H:%M")
self.cql_time_filter = f" and lastmodified >= '{formatted_start_time}'"
self.cql_time_filter += f" and lastmodified <= '{formatted_end_time}'"
return self._fetch_document_batches()

View File

@@ -7,12 +7,14 @@ export default function NumberInput({
description,
name,
showNeverIfZero,
min = -1,
}: {
label: string;
name: string;
optional?: boolean;
description?: string;
showNeverIfZero?: boolean;
min?: number;
}) {
return (
<div className="w-full flex flex-col">
@@ -25,7 +27,7 @@ export default function NumberInput({
<Field
type="number"
name={name}
min="-1"
min={min}
className={`mt-2 block w-full px-3 py-2
bg-white border border-gray-300 rounded-md
text-sm shadow-sm placeholder-gray-400

View File

@@ -123,6 +123,14 @@ export const RenderField: FC<RenderFieldProps> = ({
connector,
currentCredential,
}) => {
// Check visibility condition first
if (
field.visibleCondition &&
!field.visibleCondition(values, currentCredential)
) {
return null;
}
const label =
typeof field.label === "function"
? field.label(currentCredential)
@@ -169,6 +177,7 @@ export const RenderField: FC<RenderFieldProps> = ({
optional={field.optional}
description={description}
name={field.name}
min={field.min}
/>
) : field.type === "checkbox" ? (
<AdminBooleanFormField

View File

@@ -66,6 +66,7 @@ export interface TextOption extends Option {
export interface NumberOption extends Option {
type: "number";
default?: number;
min?: number;
}
export interface BooleanOption extends Option {
@@ -346,6 +347,18 @@ export const connectorConfigs: Record<
description:
"Check if this is a Confluence Cloud instance, uncheck for Confluence Server/Data Center",
},
{
type: "number",
query: "Enter the Server Timezone Offset:",
label: "Server Timezone Offset",
name: "timezone_offset",
optional: false,
default: 0,
min: -24,
description:
"Enter the timezone offset for your Confluence instance (in hours). This is used to convert the server's timezone to UTC. E.g. EST is -5, CET is +1",
visibleCondition: (values, currentCredential) => !values.is_cloud,
},
{
type: "text",
query: "Enter the wiki base URL:",