Skip to content

Commit

Permalink
HARMONY-1958: Get all tests passing.
Browse files Browse the repository at this point in the history
  • Loading branch information
chris-durbin committed Jan 27, 2025
1 parent f3ba3fc commit 527770a
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 97 deletions.
43 changes: 36 additions & 7 deletions services/harmony/app/frontends/wms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ import parseCRS from '../util/crs';
import { createDecrypter, createEncrypter } from '../util/crypto';
import { NotFoundError, RequestValidationError } from '../util/errors';
import { keysToLowerCase } from '../util/object';
import { parseMultiValueParameter } from '../util/parameter-parsing-helpers';
import { ParameterParseError, parseMultiValueParameter } from '../util/parameter-parsing-helpers';
import * as urlUtil from '../util/url';

import { handleGranuleNames } from '../util/parameter-parsers';
import env from '../util/env';
import { getVariablesForCollection } from '../util/variables';
import logger from '../util/log';

const readFile = promisify(fs.readFile);

Expand Down Expand Up @@ -176,6 +177,39 @@ async function getCapabilities(req, res, _next: NextFunction): Promise<void> {
res.send(await renderToTemplate('GetCapabilities', capabilities));
}

/**
* Given a bbox value, parse it into a list of numbers after performing validations
*
* @param value - bbox query parameter value
* @returns An array of 4 numbers corresponding to the bbox definition,
* in most cases the sequence of minimum longitude, minimum latitude,
* maximum longitude and maximum latitude.
*/
function parseBbox(value: string | string[] | number[]): number[] | null {
if (value) {
try {
let bbox;
if (Array.isArray(value)) {
bbox = value.map(Number);
} else {
bbox = value.split(',').map(Number);
}
if (bbox.length === 4) {
return bbox;
} else if (bbox.length > 0) {
throw new ParameterParseError('Parameter "bbox" can only have 4 numbers.');
}
} catch (e) {
if (e instanceof ParameterParseError) {
throw e;
} else {
logger.error(e);
throw new ParameterParseError('Unable to parse "bbox" parameter');
}
}
}
}

/**
* Express.js-style handler that handles calls to WMS GetMap requests
*
Expand Down Expand Up @@ -212,11 +246,6 @@ function getMap(req, res, next: NextFunction): void {
const varInfos = getVariablesForCollection(query.layers, req.context.collections);
const requestedVariables = varInfos.flatMap((varInfo) => varInfo.variables.map((v) => v.umm.Name));
req.context.requestedVariables = requestedVariables;
console.log(`CDD: Var infos are ${JSON.stringify(varInfos)}, layers were ${query.layers}, requested vars: ${JSON.stringify(requestedVariables)}`);
// for (const varInfo of varInfos) {
// operation.addSource(varInfo.collectionId, varInfo.shortName, varInfo.versionId,
// varInfo.variables, varInfo.coordinateVariables);
// }

const [crs, srs] = parseCRS(query.crs, false);
operation.crs = crs || query.crs;
Expand All @@ -232,7 +261,7 @@ function getMap(req, res, next: NextFunction): void {
operation.outputDpi = parseInt(dpi, 10);
}

const [west, south, east, north] = query.bbox.map((c) => parseFloat(c));
const [west, south, east, north] = parseBbox(query.bbox);
operation.boundingRectangle = [west, south, east, north];

if (query.granuleid) {
Expand Down
1 change: 0 additions & 1 deletion services/harmony/app/middleware/service-selection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ export default function chooseService(
} catch (e) {
return next(e);
}
console.log(`CDD: Chose service config: ${serviceConfig.name}`);
context.serviceConfig = serviceConfig;
return next();
}
9 changes: 0 additions & 9 deletions services/harmony/app/models/services/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -243,9 +243,6 @@ function isCollectionMatch(
serviceConfig: ServiceConfig<unknown>,
): boolean {
return serviceConfig.capabilities?.all_collections || context.collectionIds.every((collectionId) => {
if (serviceConfig.name === 'harmony/service-example') console.log(`CDD Checking matches for ${collectionId} in ${serviceConfig.collections.map((sc) => sc.id)} for service ${serviceConfig.name}`);
const allCollections = serviceConfig.collections?.map((sc) => sc.id);
if (allCollections.includes(collectionId)) console.log(`Found collection ${collectionId} in ${allCollections}`);
return serviceConfig.collections?.map((sc) => sc.id).includes(collectionId);
});
// return serviceConfig.capabilities?.all_collections || operation.sources.every((source) => {
Expand Down Expand Up @@ -339,8 +336,6 @@ function requiresConcatenation(operation: DataOperation): boolean {
* @returns true if the provided operation requires variable subsetting and false otherwise
*/
function requiresVariableSubsetting(context: RequestContext): boolean {
// console.log(`Context is ${JSON.stringify(context)}`);
// console.log(`Requested variables length is : ${context.requestedVariables?.length} and boolean is ${context.requestedVariables?.length > 0}`);
return context.requestedVariables?.length > 0;
}

Expand Down Expand Up @@ -590,9 +585,7 @@ function filterVariableSubsettingMatches(
let matches = configs;
if (requiresVariableSubsetting(context)) {
requestedOperations.push('variable subsetting');
console.log(`CDD Before there were ${matches.length} matches: ${matches.map((s) => s.name)}`);
matches = supportsVariableSubsetting(configs);
console.log(`CDD After there were ${matches.length} matches`);
}

if (matches.length === 0) {
Expand Down Expand Up @@ -1027,9 +1020,7 @@ export function chooseServiceConfig(
let serviceConfig;
try {
serviceConfig = filterServiceConfigs(operation, context, configs, allFilterFns);
console.log(`CDD - it found a service with strict filtering used (so can't be HyBIG) ${serviceConfig.name}`);
} catch (e) {
console.log(`CDD - bad news - an exception was thrown: ${e.message}`);
if (e instanceof UnsupportedOperation) {
if (!requiresStrictCapabilitiesMatching(operation, context)) {
// if we couldn't find a matching service, make a best effort to find a service that
Expand Down
6 changes: 0 additions & 6 deletions services/harmony/app/util/variables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ function constructVariableInfoWithoutValidation(
eosdisCollections: CmrCollection[],
variables: string[],
): VariableInfo[] {
console.log(`CDD: I am constructing it without CMR validation: ${JSON.stringify(eosdisCollections)}`);
const variableInfo = [];

// Construct an imitation of what CMR would return from UMM-Var since we are not using variables
Expand Down Expand Up @@ -218,7 +217,6 @@ export function getVariableInfo(
variableIds: string[],
shouldValidateUmmVar: boolean,
): VariableInfo[] {
console.log(`CDD: variableIds are (${variableIds}) and the length is ${variableIds.length}`);
let variableInfo = [];
if (!shouldValidateUmmVar) {
variableInfo = constructVariableInfoWithoutValidation(eosdisCollections, variableIds);
Expand Down Expand Up @@ -334,10 +332,6 @@ export function validateAndSetVariables(
context.serviceConfig.validate_variables !== false,
);

console.log(`Var infos are: ${JSON.stringify(varInfos)}`);

console.log(`Requested variables were ${context.requestedVariables}`);

for (const varInfo of varInfos) {
operation.addSource(varInfo.collectionId, varInfo.shortName, varInfo.versionId,
varInfo.variables, varInfo.coordinateVariables);
Expand Down
Loading

0 comments on commit 527770a

Please sign in to comment.