From a9eb6ea6e2b4c0ef3d18565a25a806e71a650126 Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Wed, 25 Nov 2020 13:50:55 +0000 Subject: [PATCH] Release v0.5.0 (#61) * remove explicit ID from events in timemap setup * Fixed internal anchor link headline * update fmt * Bump lodash from 4.17.15 to 4.17.19 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] * Wrote validation functions and getter to grab appropriate validation function * Collapsed filters and narratives into associations; modified default tabs to reflect * Refactoring events to have only associations; created associations tab and related export tab * Clean up with event related associations * Delete validation for now; not relevant to this PR * Bump node-fetch from 2.6.0 to 2.6.1 Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1. - [Release notes](https://github.com/bitinn/node-fetch/releases) - [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1) Signed-off-by: dependabot[bot] * Removed gsheets tab in config, unused import in package json * try/catch to prioritise local.config.js * Removing export categories endpoint * Removed categories from list and using test_export_events * Test associations * Removed comment regarding categories endpoint * Removing unnecessary test_export_events endpoint * Linting threw error stating that we use path module to join instead of + * generalise LocalFetcher to support many sheet types (xlsx, ods, etc) * rm getFileExt * use tab as delimiter in intermediate representation * Bump googleapis from 32.0.0 to 39.1.0 Bumps [googleapis](https://github.com/googleapis/google-api-nodejs-client) from 32.0.0 to 39.1.0. - [Release notes](https://github.com/googleapis/google-api-nodejs-client/releases) - [Changelog](https://github.com/googleapis/google-api-nodejs-client/blob/master/CHANGELOG.md) - [Commits](https://github.com/googleapis/google-api-nodejs-client/compare/v32.0.0...v39.1.0) Signed-off-by: dependabot[bot] * Fixed tests * fix example sheet Co-authored-by: Christoph Knoth Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: efarooqui Co-authored-by: Ebrahem Farooqui Co-authored-by: Lachlan --- .gitignore | 1 + README.md | 2 +- data/timemap_data.xlsx | Bin 44352 -> 38075 bytes package-lock.json | 1960 +++++++++++++++++++--------------- package.json | 8 +- src/blueprinters/deeprows.js | 5 +- src/index.js | 3 +- src/initialize.js | 8 +- src/lib.js | 4 +- src/lib/Fetcher.js | 43 +- test/serverProcess.js | 8 +- 11 files changed, 1149 insertions(+), 893 deletions(-) diff --git a/.gitignore b/.gitignore index 7a9242b..0987642 100755 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ tags tags.lock tags.temp src/config.js +src/local.config.js diff --git a/README.md b/README.md index 60118a4..defb914 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Each Google Sheet being used as a as source requires a corresponding object in ` See src/config.js for an example configuration sheet. -## [Quickstart](#quickstart) +## [Quickstart](#quickstart) Clone the repository to your local: ``` git clone https://www.github.com/forensic-architecture/datasheet-server diff --git a/data/timemap_data.xlsx b/data/timemap_data.xlsx index 13abf6cfa06efee4a77c5216a29b3cb49de2c166..947330b8dc33fbc0d25b8fdfcb388d0a022ad383 100644 GIT binary patch literal 38075 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 literal 44352 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 { structure.__flat.forEach(label => { deepRow[label] = baseRow[label] }) - if (deepRow['id'] && deepRow['id'] !== '') { + if (!Object.keys(deepRow).every(k => ( + (deepRow[k] === '') || + (Array.isArray(deepRow[k]) && deepRow[k].length === 0) + ))) { output.push(deepRow) } }) diff --git a/src/index.js b/src/index.js index ab969e9..1c2ac09 100755 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,5 @@ import http from 'http' +import path from 'path' import express from 'express' import initialize from './initialize' import middleware from './middleware' @@ -40,7 +41,7 @@ initialize(controller => { }) ) - app.use(express.static(__dirname + '/public')) + app.use(express.static(path.join(__dirname, 'public'))) app.server.listen(process.env.PORT || 4040, () => { console.log('===========================================') diff --git a/src/initialize.js b/src/initialize.js index 44e59bf..a6b99de 100755 --- a/src/initialize.js +++ b/src/initialize.js @@ -1,7 +1,6 @@ import StoreJson from './models/StoreJson' import fetchers from './lib/Fetcher' import Controller from './lib/Controller' -import config from './config' import R from 'ramda' const isntNull = n => n !== null @@ -9,6 +8,13 @@ const filterNull = ls => R.filter(isntNull, ls) const flattenfilterNull = ls => filterNull(R.flatten(ls)) let themFetchers +let config +try { + config = require('./local.config.js').default +} catch (_) { + config = require('./config.js').default +} + export default callback => { return Promise.resolve().then(() => { return Object.keys(config).map(fType => { diff --git a/src/lib.js b/src/lib.js index 2606845..ff76aed 100644 --- a/src/lib.js +++ b/src/lib.js @@ -5,9 +5,7 @@ function prefixedTabs (prefix, cfg) { const prf = key => cfg[key] ? `${prefix}_` : '' return { [`${prf('events')}export_events`]: BP.deeprows, - [`${prf('categories')}export_categories`]: [BP.groups, BP.rows], - [`${prf('filters')}export_filters`]: BP.tree, - [`${prf('narratives')}export_narratives`]: BP.rows, + [`${prf('associations')}export_associations`]: BP.deeprows, [`${prf('sources')}export_sources`]: BP.deepids, [`${prf('sites')}export_sites`]: BP.rows } diff --git a/src/lib/Fetcher.js b/src/lib/Fetcher.js index ed75444..6f726ac 100644 --- a/src/lib/Fetcher.js +++ b/src/lib/Fetcher.js @@ -1,15 +1,16 @@ -// FetcherTwo class interfaces with Google Sheet, and saves to a specified db -import { google } from 'googleapis' +import R from 'ramda' +import { createHash } from 'crypto' import { buildDesaturated } from './blueprinters' import { fmtName, fmtBlueprinterTitles, isFunction } from './util' -import { createHash } from 'crypto' -import R from 'ramda' -import xlsx from 'node-xlsx' -import fs from 'fs' + +/* GsheetFetcher deps */ +import { google } from 'googleapis' +/* LocalFetcher deps */ +import X from 'xlsx' class Fetcher { constructor (db, name, bps) { @@ -138,7 +139,6 @@ class Fetcher { /** Run on startup. Should be overridden if explicit auth is required **/ authenticate (env) { - console.log(`Connected to ${this.sheetName}. No explicit authentication required for ${this.type}s.`) return Promise.resolve(this) } } @@ -221,27 +221,22 @@ class GsheetFetcher extends Fetcher { } } -class XlsxFetcher extends Fetcher { +class LocalFetcher extends Fetcher { constructor (db, name, bps, path) { super(db, name, bps) - this.type = 'XLSX File' this.path = path - this.isRemote = false - - if (this.path.startsWith('https')) { - this.isRemote = true - } + this.update().then(res => + console.log(`${res ? 'Successful' : 'Couldn\'t'} update ${name}`) + ) } update () { - const data = xlsx.parse(fs.readFileSync(this.path)) - data.forEach(tab => { - const stringyData = tab.data.map(row => - row.map(d => - typeof (d) === 'number' ? d.toString() : d - ) - ) - this.save(tab.name, stringyData) + const wb = X.readFile(this.path) + wb.SheetNames.forEach(name => { + const sh = wb.Sheets[name] + const csv = X.utils.sheet_to_csv(sh, { FS: '\t' }) + const ll = csv.split('\n').map(line => line.split('\t')) + this.save(name, ll) }) return Promise.resolve(true) } @@ -249,5 +244,7 @@ class XlsxFetcher extends Fetcher { export default { 'gsheets': GsheetFetcher, - 'xlsx': XlsxFetcher + 'xlsx': LocalFetcher, + 'ods': LocalFetcher, + 'local': LocalFetcher } diff --git a/test/serverProcess.js b/test/serverProcess.js index b6ff5a4..2b285ad 100644 --- a/test/serverProcess.js +++ b/test/serverProcess.js @@ -54,14 +54,7 @@ test('should launch', t => { }) const passUrls = [ - // / '/api/', - // /blueprints - '/api/blueprints', - // /:sheet/:tab/:resource - '/api/example/export_events/rows', - // /:sheet/:tab/:resource/:frag - '/api/example/export_events/rows/1' ] const failUrls = [ @@ -77,6 +70,7 @@ passUrls.forEach(function (url) { .then(checkStatus) .then(res => res.json()) .then(json => { + console.info('JSON: ', json) t.pass() }) })