/** * {@inheritDoc} */ public MetaDataResult ofMetaData(final JSONObject rawData) { return MetaDataResult.of(rawData); } /**
/** * Extract a list of MetaDataResult objects, each one representing a match. Throws a QuandlRuntimeException if it cannot construct a valid * HeaderDefinition * * @return the header definition, not null */ public List<MetaDataResult> getMetaDataResultList() { JSONArray jsonArray = null; try { jsonArray = _jsonObject.getJSONArray(DATASETS_ARRAY_FIELD); List<MetaDataResult> metaDataResults = new ArrayList<MetaDataResult>(jsonArray.length()); for (int i = 0; i < jsonArray.length(); i++) { metaDataResults.add(MetaDataResult.of(jsonArray.getJSONObject(i))); } return metaDataResults; } catch (JSONException ex) { s_logger.error("Metadata had unexpected structure - could not extract datasets field, was:\n{}", _jsonObject.toString()); throw new QuandlRuntimeException("Metadata had unexpected structure", ex); } }
@Test(expectedExceptions = QuandlRuntimeException.class) public final void testMetaDataResult() { MetaDataResult.of(null); }
@Test(expectedExceptions = QuandlRuntimeException.class) public final void testMetaDataResult() { MetaDataResult.of(null); }
@Override public MetaDataResult getMetaData(final MultiMetaDataRequest request) { ArgumentChecker.notNull(request, "request"); Map<String, HeaderDefinition> multipleHeaderDefinition = getMultipleHeaderDefinition(request); try { JSONObject result = new JSONObject(); if (multipleHeaderDefinition.size() > 0) { result.append(JSON_COLUMN_NAMES_FIELD, DATE_COLUMN); result.append(JSON_COLUMNS_FIELD, DATE_COLUMN); } for (Map.Entry<String, HeaderDefinition> entry : multipleHeaderDefinition.entrySet()) { String quandlCode = entry.getKey(); HeaderDefinition headerDef = entry.getValue(); for (String columnName : headerDef.getColumnNames()) { if (!columnName.equals(DATE_COLUMN)) { // skip Date column for each data set. result.append(JSON_COLUMN_NAMES_FIELD, quandlCode + " - " + columnName); result.append(JSON_COLUMNS_FIELD, columnName); } } } result.put(JSON_DATA_FIELD, new JSONArray()); result.put(JSON_ERRORS_FIELD, Collections.emptyMap()); result.put(JSON_FREQUENCY_FIELD, (Object) null); result.put(JSON_FROM_DATE_FIELD, (Object) null); result.put(JSON_TO_DATE_FIELD, (Object) null); return MetaDataResult.of(result); } catch (JSONException ex) { throw new QuandlRuntimeException("Problem building JSON response", ex); } }
@Test public void testSimpleGetMetaData() { QuandlSession session = getTestSession("https://www.quandl.com/api/v3/datasets/WIKI/MSFT.json?start_date=2100-01-01"); MetaDataResult result = session.getMetaData(MetaDataRequest.of("WIKI/MSFT")); Assert.assertEquals(result, MetaDataResult.of(new JSONObject())); }
@Test(expectedExceptions = QuandlRuntimeException.class) public void testEmptyGetMultiMetaData() { QuandlSession session = getTestSession("https://www.quandl.com/api/v3/multisets.json?columns=WIKI.MSFT,OFDP.FUTURE_CL1,WIKI.LIFE&trim_start=2100-01-01"); MetaDataResult result = session.getMetaData(MultiMetaDataRequest.of()); // expect this to throw an exception Assert.assertEquals(result, MetaDataResult.of(new JSONObject())); }
@Test public void testSimpleGetMetaData() { ClassicQuandlSessionInterface session = getTestSession("https://www.quandl.com/api/v3/datasets/WIKI/MSFT.json?start_date=2100-01-01"); MetaDataResult result = session.getMetaData(MetaDataRequest.of("WIKI/MSFT")); Assert.assertEquals(result, MetaDataResult.of(new JSONObject())); }
@Test public void testMetaDataResult() { MetaDataResult metaDataResult1 = MetaDataResult.of(getTestObj1()); MetaDataResult metaDataResult2 = MetaDataResult.of(getTestObj2()); MetaDataResult metaDataResult3 = MetaDataResult.of(getTestObj1()); Assert.assertEquals(metaDataResult1, metaDataResult1); Assert.assertEquals(metaDataResult1, metaDataResult3); Assert.assertEquals(metaDataResult3, metaDataResult1); Assert.assertNotEquals(metaDataResult1, metaDataResult2); Assert.assertNotEquals(metaDataResult2, metaDataResult1); // not strictly within the hashCode requirements, but we'd like this to be the case. Assert.assertNotEquals(metaDataResult1.hashCode(), metaDataResult2.hashCode()); Assert.assertEquals(metaDataResult1.hashCode(), metaDataResult1.hashCode()); Assert.assertEquals(metaDataResult1.hashCode(), metaDataResult3.hashCode()); }
@Test public void testMetaDataResult() { MetaDataResult metaDataResult1 = MetaDataResult.of(getTestObj1()); MetaDataResult metaDataResult2 = MetaDataResult.of(getTestObj2()); MetaDataResult metaDataResult3 = MetaDataResult.of(getTestObj1()); Assert.assertEquals(metaDataResult1, metaDataResult1); Assert.assertEquals(metaDataResult1, metaDataResult3); Assert.assertEquals(metaDataResult3, metaDataResult1); Assert.assertNotEquals(metaDataResult1, metaDataResult2); Assert.assertNotEquals(metaDataResult2, metaDataResult1); // not strictly within the hashCode requirements, but we'd like this to be the case. Assert.assertNotEquals(metaDataResult1.hashCode(), metaDataResult2.hashCode()); Assert.assertEquals(metaDataResult1.hashCode(), metaDataResult1.hashCode()); Assert.assertEquals(metaDataResult1.hashCode(), metaDataResult3.hashCode()); }
@Override public MetaDataResult getMetaData(final MetaDataRequest request) { ArgumentChecker.notNull(request, "request"); Client client = ClientBuilder.newClient(); WebTarget target = client.target(API_BASE_URL_V3); target = withAuthToken(target); target = request.appendPathAndQueryParameters(target); JSONObject object = null; int retries = 0; QuandlRuntimeException lastException; do { try { return MetaDataResult.of(_restDataProvider.getJSONResponse(target, request)); } catch (QuandlTooManyRequestsException qtmre) { lastException = qtmre; s_logger.debug("Quandl returned Too Many Requests, retrying if appropriate"); if (qtmre.isDataExhausted()) { throw new QuandlRequestFailedException("Data request limit exceeded", qtmre); } } catch (QuandlServiceUnavailableException qsue) { lastException = qsue; s_logger.debug("Quandl returned Service Not Available, retrying if appropriate"); } } while (object == null && _sessionOptions.getRetryPolicy().checkRetries(retries++)); throw new QuandlRequestFailedException("Giving up on request after " + retries + " retries.", lastException); }