Ejemplo n.º 1
0
 public function testCreateTmpFile()
 {
     $temp = new Temp('test');
     $tempFolder = $temp->getTmpFolder();
     /** @var \SplFileInfo $file */
     $file = $temp->createTmpFile('filename_suffix');
     $this->assertFileExists($file->getPathname());
     $this->assertContains($tempFolder, $file->getPathname());
 }
Ejemplo n.º 2
0
 /**
  * @covers \Keboola\Syrup\Aws\S3\Uploader::getClient
  * @covers \Keboola\Syrup\Aws\S3\Uploader::uploadString
  * @covers \Keboola\Syrup\Aws\S3\Uploader::uploadFile
  */
 public function testS3Uploader()
 {
     $s3Uploader = new Uploader(['aws-access-key' => SYRUP_AWS_KEY, 'aws-secret-key' => SYRUP_AWS_SECRET, 'aws-region' => SYRUP_AWS_REGION, 's3-upload-path' => SYRUP_S3_BUCKET]);
     $fileName = uniqid();
     $resultUrl = $s3Uploader->uploadString($fileName, uniqid());
     $this->assertStringStartsWith('https://connection.keboola.com/admin/utils/logs?file=', $resultUrl);
     $this->assertStringEndsWith($fileName, $resultUrl);
     $temp = new Temp();
     $fileInfo = $temp->createTmpFile();
     $file = $fileInfo->openFile('a');
     $file->fwrite(uniqid());
     $resultUrl = $s3Uploader->uploadFile($fileInfo->getRealPath());
     $this->assertStringStartsWith('https://connection.keboola.com/admin/utils/logs?file=', $resultUrl);
     $this->assertStringEndsWith($fileInfo->getFilename(), $resultUrl);
 }
Ejemplo n.º 3
0
 /**
  * @brief Create a CSV file, and optionally set its header
  *
  * @param string $name File name Suffix
  * @param array $header A header line to write into created file
  * @param \Keboola\Temp\Temp $temp
  * @return \Keboola\CsvTable\Table
  */
 public static function create($name = '', array $header = array(), Temp $temp = null)
 {
     if ($temp == null) {
         $temp = new Temp('csv-table');
     }
     $tmpFile = $temp->createTmpFile($name);
     $csvFile = new self($tmpFile->getPathname());
     // Write header
     if (!empty($header)) {
         $csvFile->writeRow($header);
     }
     // Preserve Temp to prevent deletion!
     $csvFile->setTemp($temp);
     $csvFile->name = $name;
     return $csvFile;
 }
Ejemplo n.º 4
0
 public function createSSLFile($sslCa)
 {
     $filename = $this->temp->createTmpFile('ssl');
     file_put_contents($filename, $sslCa);
     return realpath($filename);
 }
 public function execute(Job $job)
 {
     $this->configuration->setStorageApi($this->storageApi);
     $accounts = $this->configuration->getAccounts();
     $options = $job->getParams();
     $status = [];
     if (isset($options['external'])) {
         // load files by tag from SAPI
         if (!isset($options['external']['account'])) {
             throw new UserException("Missing field 'account'");
         }
         try {
             $this->configuration->create();
         } catch (\Exception $e) {
             // create configuration if not exists
         }
         $account = new Account($this->configuration, uniqid('external'));
         $account->fromArray($options['external']['account']);
         $writer = $this->writerFactory->create($account);
         if (!isset($options['external']['query'])) {
             throw new UserException("Missing field 'query'");
         }
         $queryString = $options['external']['query'];
         $queryString .= ' -tags:wr-google-drive-processed';
         if (isset($options['external']['filterByRunId']) && $options['external']['filterByRunId']) {
             $parentRunId = $this->getParentRunId($job->getRunId());
             if ($parentRunId) {
                 $queryString .= ' +tags:runId-' . $parentRunId;
             }
         }
         $uploadedFiles = $this->storageApi->listFiles((new ListFilesOptions())->setQuery($queryString));
         if (empty($uploadedFiles)) {
             throw new UserException("No file matches your query '" . $queryString . "'");
         }
         foreach ($uploadedFiles as $uploadedFile) {
             $tmpFile = $this->temp->createTmpFile('wr-gd');
             file_put_contents($tmpFile->getPathname(), fopen($uploadedFile['url'], 'r'));
             $file = new File(['id' => $uploadedFile['id'], 'title' => $uploadedFile['name'], 'targetFolder' => isset($options['external']['targetFolder']) ? $options['external']['targetFolder'] : null, 'type' => File::TYPE_FILE, 'pathname' => $tmpFile, 'size' => $uploadedFile['sizeBytes']]);
             $gdFiles = $writer->listFiles(['q' => "trashed=false and name='" . $uploadedFile['name'] . "'"]);
             if (!empty($gdFiles['files'])) {
                 $lastGdFile = array_shift($gdFiles['files']);
                 $file->setGoogleId($lastGdFile['id']);
             }
             $file = $writer->process($file);
             // tag file 'wr-google-drive-processed'
             $this->storageApi->addFileTag($uploadedFile['id'], 'wr-google-drive-processed');
         }
         // delete temporary account
         $this->configuration->removeAccount($account->getAccountId());
     } else {
         $fileFilter = null;
         if (isset($options['config'])) {
             if (!isset($accounts[$options['config']])) {
                 throw new UserException("Config '" . $options['config'] . "' does not exist.");
             }
             $accounts = [$options['config'] => $accounts[$options['config']]];
             if (isset($options['file'])) {
                 /** @var Account $account */
                 $account = $accounts[$options['config']];
                 if (null == $account->getFile($options['file'])) {
                     throw new UserException("File '" . $options['file'] . "' not found");
                 }
                 $fileFilter = $options['file'];
             }
         }
         /** @var Account $account */
         foreach ($accounts as $accountId => $account) {
             $writer = $this->writerFactory->create($account);
             $files = $account->getFiles();
             /** @var File $file */
             foreach ($files as $file) {
                 if ($fileFilter != null && $file->getId() != $fileFilter) {
                     continue;
                 }
                 $file->setPathname($this->temp->createTmpFile()->getPathname());
                 try {
                     $tableExporter = new TableExporter($this->storageApi);
                     $tableExporter->exportTable($file->getTableId(), $file->getPathname(), []);
                 } catch (ClientException $e) {
                     throw new UserException($e->getMessage(), $e, ['file' => $file->toArray()]);
                 }
                 $file = $writer->process($file);
                 $status[$account->getAccountName()][$file->getTitle()] = 'ok';
             }
             // updated changes to files
             $account->save();
         }
     }
     return $status;
 }