google-api-php-client icon indicating copy to clipboard operation
google-api-php-client copied to clipboard

Google_Http_MediaFileUpload PHPDoc issues?

Open ThibaultVlacich opened this issue 4 years ago • 6 comments

I've been using Google_Http_MediaFileUpload to upload videos to YouTube. I have no issue with the actual functionalities of the code, only with the type hinting that seems to be incorrect for a lot of the constructor / methods parameters.

Code example

The following code is mostly taken from the documentation.

$chunkSizeBytes = 10 * 1024 * 1024; // 10 MB
$fileSize = filesize($videoFile->getRealPath());

$this->googleClient->setDefer(true);

$insertRequest = $ytService->videos->insert(
    'snippet,status',
    $ytVideo
);

$media = new \Google_Http_MediaFileUpload($this->googleClient, $insertRequest, 'video/*', null, true, $chunkSizeBytes);
$media->setFileSize($fileSize);

This works perfectly fine, but triggers a lot of linting warnings from, for example, PHPStan or Intelephense in VSCode, because of the PHPDoc block of Google_Http_MediaFileUpload constructor.

Here's the warnings:

Parameter #2 $request of class Google_Http_MediaFileUpload constructor expects 'Psr\Http\Message\RequestInterface', 'Google_Service_YouTube_Video' given. Parameter #4 $data of class Google_Http_MediaFileUpload constructor expects string, null given. Parameter #6 $chunkSize of class Google_Http_MediaFileUpload constructor expects bool, int given.

For the first, I'm not really sure what's the issue here. Using the result of $ytService->videos->insert is what the doc says to do, but the returned type is not compatible at all (but it works when it actually runs, so it's correct...)

Is it intentional that $chunkSize is defined as a bool (seems weird to me, but maybe there's a reason)? $data should also specify |null.

ThibaultVlacich avatar Jul 16 '20 20:07 ThibaultVlacich

I guess this might be related to googleapis/google-api-php-client-services#172 and googleapis/google-api-php-client-services#179 ?

ThibaultVlacich avatar Jul 17 '20 12:07 ThibaultVlacich

I see It's been two years since this was reported, and I can confirm it's still an issue even with v2.12.6.

In a similar example, the ops report holds true both for $request (RequestInterface) and $chunkSize (bool)

$request = $this->service->videos->insert('snippet,status', $video, []); when $request passed onto the Google_Http_MediaFileUpload::construct() raises warning about

Expected parameter of type '\Psr\Http\Message\RequestInterface', '\Google\Service\YouTube\Video' provided

I'm about to find out wether passing the $insertRequest breaks the internal functionality for MediaFileUpload::process() since that method call is dependant on receiving the proper $request object.

xhezairbey avatar Jun 13 '22 14:06 xhezairbey

I have just come across this issue in version [2.15.3] (https://github.com/googleapis/google-api-php-client/releases/tag/v2.15.3)

Is there anyway to fix it to stop it showing as a 'Problem' in VSCode?

VObvBITBPf

wayonhigh avatar Apr 15 '24 16:04 wayonhigh

@wayonhigh Yes there is. I just found out: Add this line before 1293:

/** @var \Psr\Http\Message\RequestInterface $insertRequest */

It's a PHPDoc comment that clarifies the actual variable type.

tinusg avatar May 13 '24 11:05 tinusg

@tinusg thank you! Actually, since I posted that question, I moved from Intelephense to Devsense Intelliphp and it doesn't show as a "problem"

wayonhigh avatar May 13 '24 11:05 wayonhigh

I'll check that out as well, thanks!

tinusg avatar May 13 '24 12:05 tinusg