This commit is contained in:
efarooqui
2020-11-16 08:55:00 -08:00
3 changed files with 1046 additions and 815 deletions

1814
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -31,10 +31,10 @@
"morgan": "^1.8.0",
"mz": "^2.7.0",
"node-fetch": "^2.6.1",
"node-xlsx": "^0.15.0",
"object-hash": "^1.3.0",
"ramda": "^0.25.0",
"resource-router-middleware": "^0.6.0"
"resource-router-middleware": "^0.6.0",
"xlsx": "^0.16.8"
},
"devDependencies": {
"@babel/cli": "^7.1.2",

View File

@@ -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
}