Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge Master 18.11.2022. #3

Merged
merged 56 commits into from
Nov 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
6c42064
fix(ingest): snowflake - fix missing snowflake lineage when table_pat…
mayurinehate Nov 11, 2022
3e907ab
feat(ingest): loosen sqlalchemy dep & support airflow 2.3+ (#6204)
hsheth2 Nov 11, 2022
e79b4e8
feat(ingest): s3 - add status aspect for detected s3 datasets (#6402)
mayurinehate Nov 14, 2022
fd518cd
fix(ingest): snowflake - loosen snowflake connector version requireme…
hsheth2 Nov 14, 2022
443d15f
fix(ingest): mysql - fix native data type for mysql set type (#6407)
mayurinehate Nov 14, 2022
7ea9797
perf(ui): virtualize schema table rows for rendering performance (#6287)
stanbaker Nov 14, 2022
78c3bf9
fix(ui) Improve HoverEntityTooltip and truncate parent glossary nodes…
chriscollins3456 Nov 14, 2022
198c86a
feat(ingest): support incremental lineage to dbt node from external p…
mayurinehate Nov 14, 2022
f75bb47
fix(ingest): init dataset props if missing in transformer (#6429)
hsheth2 Nov 14, 2022
2a4ec99
fix(change-event): remove unnecessary dependencies on EntityChangeEve…
aditya-radhakrishnan Nov 14, 2022
455d061
build(deps): bump moment-timezone in /datahub-web-react (#5783)
dependabot[bot] Nov 15, 2022
8395016
feat(frontend): Adding support to show externalUrl and institutionalM…
lurecas Nov 15, 2022
c6eff28
feat(model): adds properties, ownership, deprecated, institutional me…
sgomezvillamor Nov 15, 2022
9c04c63
docs(ingest): airflow - clarify docs around 1.x compat (#6436)
hsheth2 Nov 15, 2022
fbcfcfc
feat(recommendations): add last edited entities (#6329)
CorentinDuhamel Nov 15, 2022
d87dcfa
fix(ingest): correctly compute entity change percentage (#6438)
hsheth2 Nov 15, 2022
5f9214b
docs(townhall) Updating Townhall History (#6336)
maggiehays Nov 15, 2022
ca67e79
feat(neo4j): Neo4j multihop support (#6104)
djordje-mijatovic Nov 15, 2022
a274406
fix(docker): Set proper variable expansion for JMX_OPTS and JAVA_OPTS…
skrydal Nov 15, 2022
e78b037
docs(ingest): move prerequisite section before the ingestion recipe e…
mayurinehate Nov 15, 2022
6e415ca
fix(dataset): improve glossary term load performance for datasets (#6…
Reilman79 Nov 15, 2022
1d944be
feat(lineage) Implement CLL impact analysis for inputFields (#6426)
chriscollins3456 Nov 15, 2022
e8aaf2a
feat(ui) Add upgrade step to enable CLL impact analysis for existing …
chriscollins3456 Nov 15, 2022
fc26cf3
feat(ui) Added functionality to copy fieldpath and urn of each column…
Ankit-Keshari-Vituity Nov 15, 2022
9862eff
fix(ingestion): add output converters for ODBC unsuported datatype in…
LavinaVRovine Nov 15, 2022
3de95d0
fix(ui) Fix parentNodes overfetching everywhere it's used (#6446)
chriscollins3456 Nov 15, 2022
94d2672
fix(snowflake): Fixing top query trimming in snowflake (#6447)
treff7es Nov 15, 2022
33fd876
feat(elasticsearch): Updates to elasticsearch configuration, dao, and…
david-leifker Nov 16, 2022
1ffd241
chore(ingest): fix mssql lint (#6453)
hsheth2 Nov 16, 2022
e530faf
fix(ingest): add cli info to ingestion reporter (#6451)
hsheth2 Nov 16, 2022
9b5188e
fix(ui) Fix glossary side browser width fluctuating (#6457)
chriscollins3456 Nov 16, 2022
8902404
fix(python): Fix python dependencies for doc generation (#6460)
david-leifker Nov 16, 2022
4b0aa8f
docs(website): add homepage links (#6458)
jeffmerrick Nov 16, 2022
ba7fc3a
deps(jinja): loose jinja2 dependency in Superset (#6388) (#6433)
KulykDmytro Nov 16, 2022
cf6fb91
fix(ingest): mssql - lowercase db name in mssql ingestion (#6448)
hsheth2 Nov 16, 2022
a3aec72
fix(ingest): handle missing schema in transformer (#6445)
hsheth2 Nov 16, 2022
8c322ed
feat(ingest): allow specific profiler config fields to override profi…
hsheth2 Nov 16, 2022
1fe0f01
docs(enrichment) updating enrichment landing page (#6286)
maggiehays Nov 17, 2022
2a791d4
fix(home-page): remove redundant getAuthenticatedUser query (#6464)
aditya-radhakrishnan Nov 17, 2022
29c6c43
feat(ingest): detect old or missing docker compose (#6466)
hsheth2 Nov 17, 2022
73bf7a8
feat(ingestion): powerbi - support for report (#6339)
siddiquebagwan Nov 17, 2022
d3174e7
fix(ingest): dbt - disable incremental lineage by default (#6467)
hsheth2 Nov 17, 2022
dc73987
fix(loggin): print logging timestamp in ISO8601 format instead of jus…
szalai1 Nov 17, 2022
94e86e9
docs(ingest): trino - add example of http connection (#6461)
hsheth2 Nov 17, 2022
d35e327
refactor(ui): Simplify base glossary page (#6469)
jjoyce0510 Nov 17, 2022
b73ebe6
revert: mssql - lowercase db name in mssql ingestion (#6481)
hsheth2 Nov 17, 2022
496f61b
build: remove `Jinja2` dependency from `superset` (#6476)
KulykDmytro Nov 17, 2022
6303699
fix(roles): allows role service to unassign roles (#6434)
aditya-radhakrishnan Nov 17, 2022
738b6a2
fix(docs): update the Okta and Azure AD docs to clarify the point of …
aditya-radhakrishnan Nov 17, 2022
7ff765e
feat(ui) Filter by description text on schema tab search (#6400)
Ankit-Keshari-Vituity Nov 17, 2022
3daeacc
fix(docs): Ownership Type is deprecated (#6477)
jakobhanna Nov 17, 2022
added63
feat(ui): Adding Explore all button on home page search (#6468)
jjoyce0510 Nov 17, 2022
b7c0373
fix(ingest): fix athena and GE lint errors (#6482)
hsheth2 Nov 18, 2022
817406e
refactor(ingest): simplify stateful ingestion config (#6454)
hsheth2 Nov 18, 2022
0d474a1
docs(ingest/tableau): required permissions + doc formatting (#6484)
hsheth2 Nov 18, 2022
250f7ce
feat(ingest): presto - Adding presto source (#6459)
treff7es Nov 18, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .github/workflows/metadata-ingestion.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ jobs:
"testIntegrationBatch1",
"testSlowIntegration",
]
include:
- python-version: "3.7"
extraPythonRequirement: "sqlalchemy==1.3.24 apache-airflow~=2.2.0"
- python-version: "3.10"
extraPythonRequirement: "sqlalchemy~=1.4.0 apache-airflow>=2.4.0"
fail-fast: false
steps:
- uses: actions/checkout@v3
Expand All @@ -50,8 +55,8 @@ jobs:
hadoop-version: "3.2"
- name: Install dependencies
run: ./metadata-ingestion/scripts/install_deps.sh
- name: Run metadata-ingestion tests
run: ./gradlew :metadata-ingestion:build :metadata-ingestion:${{ matrix.command }}
- name: Run metadata-ingestion tests (extras ${{ matrix.extraPythonRequirement }})
run: ./gradlew -Pextra_pip_requirements='${{ matrix.extraPythonRequirement }}' :metadata-ingestion:${{ matrix.command }}
- name: pip freeze show list installed
if: always()
run: source metadata-ingestion/venv/bin/activate && pip freeze
Expand Down
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ project.ext.externalDependency = [
'springJdbc': "org.springframework:spring-jdbc:$springVersion",
'springWeb': "org.springframework:spring-web:$springVersion",
'springWebMVC': "org.springframework:spring-webmvc:$springVersion",
'springBootTest': "org.springframework.boot:spring-boot-starter-test:$springBootVersion",
'springBoot': "org.springframework.boot:spring-boot:$springBootVersion",
'springBootAutoconfigure': "org.springframework.boot:spring-boot-autoconfigure:$springBootVersion",
'springBootStarterWeb': "org.springframework.boot:spring-boot-starter-web:$springBootVersion",
Expand Down
6 changes: 3 additions & 3 deletions datahub-frontend/conf/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
Expand All @@ -27,7 +27,7 @@
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

Expand All @@ -48,7 +48,7 @@
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

Expand Down
6 changes: 3 additions & 3 deletions datahub-frontend/run/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
Expand All @@ -27,7 +27,7 @@
<level>INFO</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

Expand All @@ -48,7 +48,7 @@
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.linkedin.datahub.graphql.generated.AcceptRoleInput;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
import java.util.Collections;
import java.util.concurrent.CompletableFuture;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -32,15 +33,14 @@ public CompletableFuture<Boolean> get(DataFetchingEnvironment environment) throw

return CompletableFuture.supplyAsync(() -> {
try {
Urn inviteTokenUrn = _inviteTokenService.getInviteTokenUrn(inviteTokenStr);
final Urn inviteTokenUrn = _inviteTokenService.getInviteTokenUrn(inviteTokenStr);
if (!_inviteTokenService.isInviteTokenValid(inviteTokenUrn, authentication)) {
throw new RuntimeException(String.format("Invite token %s is invalid", inviteTokenStr));
}

Urn roleUrn = _inviteTokenService.getInviteTokenRole(inviteTokenUrn, authentication);
if (roleUrn != null) {
_roleService.assignRoleToActor(authentication.getActor().toUrnStr(), roleUrn, authentication);
}
final Urn roleUrn = _inviteTokenService.getInviteTokenRole(inviteTokenUrn, authentication);
_roleService.batchAssignRoleToActors(Collections.singletonList(authentication.getActor().toUrnStr()), roleUrn,
authentication);

return true;
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,8 @@ public CompletableFuture<Boolean> get(DataFetchingEnvironment environment) throw

return CompletableFuture.supplyAsync(() -> {
try {
Urn roleUrn = Urn.createFromString(roleUrnStr);
if (!_roleService.exists(roleUrn, authentication)) {
throw new RuntimeException(String.format("Role %s does not exist", roleUrnStr));
}

actors.forEach(actor -> {
try {
_roleService.assignRoleToActor(actor, roleUrn, authentication);
} catch (Exception e) {
log.warn(
String.format("Failed to assign role %s to actor %s. Skipping actor assignment", roleUrnStr, actor), e);
}
});
final Urn roleUrn = roleUrnStr == null ? null : Urn.createFromString(roleUrnStr);
_roleService.batchAssignRoleToActors(actors, roleUrn, authentication);
return true;
} catch (Exception e) {
throw new RuntimeException(String.format("Failed to perform update against input %s", input), e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.linkedin.common.urn.Urn;
import com.linkedin.datahub.graphql.QueryContext;
import com.linkedin.datahub.graphql.exception.AuthorizationException;
import com.linkedin.datahub.graphql.generated.DataHubRole;
import com.linkedin.datahub.graphql.generated.ListRolesInput;
import com.linkedin.datahub.graphql.generated.ListRolesResult;
Expand All @@ -24,7 +23,6 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

import static com.linkedin.datahub.graphql.authorization.AuthorizationUtils.*;
import static com.linkedin.datahub.graphql.resolvers.ResolverUtils.*;
import static com.linkedin.metadata.Constants.*;

Expand All @@ -41,10 +39,6 @@ public class ListRolesResolver implements DataFetcher<CompletableFuture<ListRole
@Override
public CompletableFuture<ListRolesResult> get(final DataFetchingEnvironment environment) throws Exception {
final QueryContext context = environment.getContext();
if (!canManagePolicies(context)) {
throw new AuthorizationException(
"Unauthorized to view roles. Please contact your DataHub administrator if this needs corrective action.");
}

final ListRolesInput input = bindArgument(environment.getArgument("input"), ListRolesInput.class);
final Integer start = input.getStart() == null ? DEFAULT_START : input.getStart();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ public MLModelProperties apply(@NonNull final com.linkedin.ml.metadata.MLModelPr

result.setDate(mlModelProperties.getDate());
result.setDescription(mlModelProperties.getDescription());
if (mlModelProperties.getExternalUrl() != null) {
result.setExternalUrl(mlModelProperties.getExternalUrl().toString());
}
if (mlModelProperties.getVersion() != null) {
result.setVersion(mlModelProperties.getVersion().getVersionTag());
}
Expand Down
6 changes: 4 additions & 2 deletions datahub-graphql-core/src/main/resources/entity.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -8333,6 +8333,8 @@ type MLModelProperties {
groups: [MLModelGroup]

customProperties: [CustomPropertiesEntry!]

externalUrl: String
}

type MLFeatureProperties {
Expand Down Expand Up @@ -9326,9 +9328,9 @@ Input provided when batch assigning a role to a list of users
"""
input BatchAssignRoleInput {
"""
The urn of the role to assign to the actors
The urn of the role to assign to the actors. If undefined, will remove the role.
"""
roleUrn: String!
roleUrn: String

"""
The urns of the actors to assign the role to
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,16 @@ public void testNoRoleUrn() throws Exception {
when(_inviteTokenService.getInviteTokenUrn(eq(INVITE_TOKEN_STRING))).thenReturn(inviteTokenUrn);
when(_inviteTokenService.isInviteTokenValid(eq(inviteTokenUrn), eq(_authentication))).thenReturn(true);
when(_inviteTokenService.getInviteTokenRole(eq(inviteTokenUrn), eq(_authentication))).thenReturn(null);
Actor actor = mock(Actor.class);
when(_authentication.getActor()).thenReturn(actor);
when(actor.toUrnStr()).thenReturn(ACTOR_URN_STRING);

AcceptRoleInput input = new AcceptRoleInput();
input.setInviteToken(INVITE_TOKEN_STRING);
when(_dataFetchingEnvironment.getArgument(eq("input"))).thenReturn(input);

assertTrue(_resolver.get(_dataFetchingEnvironment).join());
verify(_roleService, never()).assignRoleToActor(any(), any(), any());
verify(_roleService, times(1)).batchAssignRoleToActors(any(), any(), any());
}

@Test
Expand All @@ -97,6 +100,6 @@ public void testAssignRolePasses() throws Exception {
when(_dataFetchingEnvironment.getArgument(eq("input"))).thenReturn(input);

assertTrue(_resolver.get(_dataFetchingEnvironment).join());
verify(_roleService, times(1)).assignRoleToActor(any(), any(), any());
verify(_roleService, times(1)).batchAssignRoleToActors(any(), any(), any());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import com.datahub.authentication.Authentication;
import com.datahub.authorization.role.RoleService;
import com.google.common.collect.ImmutableList;
import com.linkedin.common.urn.Urn;
import com.linkedin.datahub.graphql.QueryContext;
import com.linkedin.datahub.graphql.generated.BatchAssignRoleInput;
import graphql.schema.DataFetchingEnvironment;
import java.util.ArrayList;
import java.util.List;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
Expand Down Expand Up @@ -45,56 +45,30 @@ public void testNotAuthorizedFails() {
}

@Test
public void testRoleDoesNotExistFails() throws Exception {
public void testNullRole() throws Exception {
QueryContext mockContext = getMockAllowContext();
when(_dataFetchingEnvironment.getContext()).thenReturn(mockContext);
when(mockContext.getAuthentication()).thenReturn(_authentication);

BatchAssignRoleInput input = new BatchAssignRoleInput();
input.setRoleUrn(ROLE_URN_STRING);
List<String> actors = new ArrayList<>();
actors.add(FIRST_ACTOR_URN_STRING);
input.setActors(actors);
when(_dataFetchingEnvironment.getArgument("input")).thenReturn(input);
when(_roleService.exists(eq(roleUrn), eq(_authentication))).thenReturn(false);

assertThrows(() -> _resolver.get(_dataFetchingEnvironment).join());
}

@Test
public void testSomeActorsExist() throws Exception {
QueryContext mockContext = getMockAllowContext();
when(_dataFetchingEnvironment.getContext()).thenReturn(mockContext);
when(mockContext.getAuthentication()).thenReturn(_authentication);

BatchAssignRoleInput input = new BatchAssignRoleInput();
input.setRoleUrn(ROLE_URN_STRING);
List<String> actors = new ArrayList<>();
actors.add(FIRST_ACTOR_URN_STRING);
actors.add(SECOND_ACTOR_URN_STRING);
List<String> actors = ImmutableList.of(FIRST_ACTOR_URN_STRING, SECOND_ACTOR_URN_STRING);
input.setActors(actors);
when(_dataFetchingEnvironment.getArgument(eq("input"))).thenReturn(input);
doThrow(RuntimeException.class).when(_roleService)
.assignRoleToActor(eq(SECOND_ACTOR_URN_STRING), eq(roleUrn), eq(_authentication));
when(_roleService.exists(eq(Urn.createFromString(ROLE_URN_STRING)), eq(_authentication))).thenReturn(true);

assertTrue(_resolver.get(_dataFetchingEnvironment).join());
}

@Test
public void testAllActorsExist() throws Exception {
public void testNotNullRole() throws Exception {
QueryContext mockContext = getMockAllowContext();
when(_dataFetchingEnvironment.getContext()).thenReturn(mockContext);
when(mockContext.getAuthentication()).thenReturn(_authentication);

BatchAssignRoleInput input = new BatchAssignRoleInput();
input.setRoleUrn(ROLE_URN_STRING);
List<String> actors = new ArrayList<>();
actors.add(FIRST_ACTOR_URN_STRING);
actors.add(SECOND_ACTOR_URN_STRING);
List<String> actors = ImmutableList.of(FIRST_ACTOR_URN_STRING, SECOND_ACTOR_URN_STRING);
input.setActors(actors);
when(_dataFetchingEnvironment.getArgument(eq("input"))).thenReturn(input);
when(_roleService.exists(eq(Urn.createFromString(ROLE_URN_STRING)), eq(_authentication))).thenReturn(true);

assertTrue(_resolver.get(_dataFetchingEnvironment).join());
}
Expand Down
3 changes: 2 additions & 1 deletion datahub-web-react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
"js-cookie": "^2.2.1",
"lodash.debounce": "^4.0.8",
"miragejs": "^0.1.41",
"moment-timezone": "^0.5.34",
"moment-timezone": "^0.5.35",
"monaco-editor": "^0.28.1",
"monaco-yaml": "^3.2.1",
"query-string": "^6.13.8",
Expand All @@ -89,6 +89,7 @@
"styled-components": "^5.2.1",
"typescript": "^4.1.3",
"uuid": "^8.3.2",
"virtualizedtableforantd4": "^1.2.1",
"vx": "^0.0.1",
"web-vitals": "^0.2.4",
"yamljs": "^0.3.0"
Expand Down
6 changes: 6 additions & 0 deletions datahub-web-react/src/app/analytics/event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export enum EventType {
RecommendationImpressionEvent,
RecommendationClickEvent,
HomePageRecommendationClickEvent,
HomePageExploreAllClickEvent,
SearchAcrossLineageEvent,
SearchAcrossLineageResultsViewEvent,
DownloadAsCsvEvent,
Expand Down Expand Up @@ -338,6 +339,10 @@ export interface ShowStandardHomepageEvent extends BaseEvent {
type: EventType.ShowStandardHomepageEvent;
}

export interface HomePageExploreAllClickEvent extends BaseEvent {
type: EventType.HomePageExploreAllClickEvent;
}

// Business glossary events

export interface CreateGlossaryEntityEvent extends BaseEvent {
Expand Down Expand Up @@ -389,6 +394,7 @@ export type Event =
| ResetCredentialsEvent
| SearchEvent
| HomePageSearchEvent
| HomePageExploreAllClickEvent
| SearchResultsViewEvent
| SearchResultClickEvent
| BrowseResultClickEvent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@ import { SchemaTab } from '../../../shared/tabs/Dataset/Schema/SchemaTab';
import EntityContext from '../../../shared/EntityContext';
import { EntityType, SchemaMetadata } from '../../../../../types.generated';

jest.mock('virtualizedtableforantd4', () => {
/* eslint-disable-next-line */
const { SchemaRow } = require('../../../shared/tabs/Dataset/Schema/components/SchemaRow');
return {
...jest.requireActual('virtualizedtableforantd4'),
useVT: () => [{ body: { row: SchemaRow } }, jest.fn()],
};
});

describe('Schema', () => {
it('renders', () => {
const { getByText } = render(
Expand Down
6 changes: 4 additions & 2 deletions datahub-web-react/src/app/entity/mlModel/MLModelEntity.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,10 @@ export class MLModelEntity implements Entity<MlModel> {

getCollectionName = () => 'ML Models';

getOverridePropertiesFromEntity = (_?: MlModel | null): GenericEntityProperties => {
return {};
getOverridePropertiesFromEntity = (mlModel?: MlModel | null): GenericEntityProperties => {
return {
externalUrl: mlModel?.properties?.externalUrl,
};
};

renderProfile = (urn: string) => (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import styled from 'styled-components';
import { Table } from 'antd';
import styled from 'styled-components';
import { ANTD_GRAY } from '../../constants';

export const StyledTable = styled(Table)`
overflow: inherit;
height: inherit;

&&& .ant-table-cell {
background-color: #fff;
}
Expand Down
Loading