Skip to content

Commit d7f642e

Browse files
authored
Include lastexporttime in URI file (#63)
1 parent 3a4bf20 commit d7f642e

File tree

4 files changed

+37
-9
lines changed

4 files changed

+37
-9
lines changed

src/file-utils.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export async function writeUriFile(
6767
embedScript = false
6868
): Promise<void> {
6969
const pluginName = path.basename(path.dirname(scriptPath));
70+
const lastExportTime = getEpochTime();
7071

7172
let uriTemplate: UriTemplate;
7273
if (embedScript) {
@@ -76,10 +77,17 @@ export async function writeUriFile(
7677
checksum: CRC.crc32(fileContent),
7778
fullPath: scriptPath
7879
};
79-
uriTemplate = new UriTemplate(pluginName, pyScript, fileExtensions);
80+
uriTemplate = new UriTemplate(pluginName, pyScript, fileExtensions, lastExportTime);
8081
} else {
81-
uriTemplate = new UriTemplate(pluginName, scriptPath, fileExtensions);
82+
uriTemplate = new UriTemplate(pluginName, scriptPath, fileExtensions, lastExportTime);
8283
}
8384

8485
await fs.writeFile(exportPath, uriTemplate.templateString, { flag: 'w' });
8586
}
87+
88+
function getEpochTime(): number {
89+
const diffSeconds = 2082844800; // 1/1/1904 to 1/1/1970
90+
const unixEpochTime = Math.floor(new Date().getTime() / 1000);
91+
const macEpochTime = unixEpochTime + diffSeconds;
92+
return macEpochTime;
93+
}

src/test/suite/file-utils.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,22 @@ suite('File-Utils Test Suite', () => {
7777
const fileContent = fs.readFileSync(testScript, { encoding: 'utf8' });
7878
assert.ok(fileContent.includes('ssalc Plugin:'));
7979
}).timeout(10000);
80+
81+
test('should correctly determine the USI lastexporttime', async () => {
82+
const testScript: string = path.join(__dirname, 'test.py');
83+
const outputUri = path.join(__dirname, 'output.uri');
84+
85+
if (fs.existsSync(testScript)) {
86+
fs.unlinkSync(testScript);
87+
}
88+
89+
const unixEpochTime = Math.floor(new Date().getTime() / 1000);
90+
const macEpochTime = unixEpochTime + 2082844800;
91+
92+
await fs.writeFile(testScript, 'class Plugin:');
93+
await fileutils.writeUriFile(testScript, '*.csv', outputUri, true);
94+
95+
const fileContent = fs.readFileSync(outputUri, { encoding: 'utf8' });
96+
assert.ok(fileContent.includes(macEpochTime.toString()));
97+
}).timeout(10000);
8098
});

src/test/suite/uri-template.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ suite('URI-Template Test Suite', () => {
2323
'<platform>x64</platform>' +
2424
`<filefilters extension="${fileExtensions}"><description>${dataPluginName} Files (${fileExtensions})</description></filefilters>` +
2525
'<easypluginparam><![CDATA[<dllpath>@USIBINDIR@\\PythonMarshaller\\uspPythonMarshaller.dll</dllpath>' +
26-
`<script>${scriptPath}</script>]]></easypluginparam>` +
26+
`<script>${scriptPath}</script><lastexporttime>123</lastexporttime>]]></easypluginparam>` +
2727
'</storetype></usireginfo>';
2828

29-
const uriTemplate = new UriTemplate('MyDataPlugin', 'C:/temp/script.py', '*.csv');
29+
const uriTemplate = new UriTemplate('MyDataPlugin', 'C:/temp/script.py', '*.csv', 123);
3030
const templateString = uriTemplate.templateString;
3131
assert.strictEqual(comparison, templateString);
3232
}).timeout(10000);
@@ -54,11 +54,11 @@ suite('URI-Template Test Suite', () => {
5454
'<platform>x64</platform>' +
5555
`<filefilters extension="${fileExtensions}"><description>${dataPluginName} Files (${fileExtensions})</description></filefilters>` +
5656
'<easypluginparam><![CDATA[<dllpath>@USIBINDIR@\\PythonMarshaller\\uspPythonMarshaller.dll</dllpath>' +
57-
`<script>@USIPLUGINDIREX@DataPlugins\\${dataPluginName}\\script.py</script>]]></easypluginparam>` +
57+
`<script>@USIPLUGINDIREX@DataPlugins\\${dataPluginName}\\script.py</script><lastexporttime>123</lastexporttime>]]></easypluginparam>` +
5858
`<files><file name="script.py"><![CDATA[${pythonScript.content}]]>` +
5959
`<checksum>${pythonScript.checksum}</checksum></file></files></storetype></usireginfo>`;
6060

61-
const uriTemplate = new UriTemplate('MyDataPlugin', pythonScript, '*.csv');
61+
const uriTemplate = new UriTemplate('MyDataPlugin', pythonScript, '*.csv', 123);
6262
const templateString = uriTemplate.templateString;
6363
assert.strictEqual(comparison, templateString);
6464
}).timeout(10000);

src/uri-template.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ export class UriTemplate {
1818
public constructor(
1919
dataPluginName: string,
2020
pythonScript: string | PythonScript,
21-
fileExtensions: string
21+
fileExtensions: string,
22+
lastExportTime: number
2223
) {
2324
this._templateString =
2425
`<usireginfo version="${UriTemplate.usiCompatibilityVersion}"><storetype name="${dataPluginName}">` +
@@ -35,11 +36,12 @@ export class UriTemplate {
3536
'<easypluginparam><![CDATA[<dllpath>@USIBINDIR@\\PythonMarshaller\\uspPythonMarshaller.dll</dllpath>';
3637

3738
if (typeof pythonScript === 'string') {
38-
this._templateString += `<script>${pythonScript}</script>]]></easypluginparam>`;
39+
this._templateString += `<script>${pythonScript}</script><lastexporttime>${lastExportTime}</lastexporttime>]]></easypluginparam>`;
3940
} else {
4041
const pyScriptName: string = path.basename(pythonScript.fullPath);
4142
this._templateString +=
42-
`<script>@USIPLUGINDIREX@DataPlugins\\${dataPluginName}\\${pyScriptName}</script>]]></easypluginparam>` +
43+
`<script>@USIPLUGINDIREX@DataPlugins\\${dataPluginName}\\${pyScriptName}</script>` +
44+
`<lastexporttime>${lastExportTime}</lastexporttime>]]></easypluginparam>` +
4345
`<files><file name="${pyScriptName}"><![CDATA[${pythonScript.content}]]>` +
4446
`<checksum>${pythonScript.checksum}</checksum></file></files>`;
4547
}

0 commit comments

Comments
 (0)