The Movie Database Support

Have been debugging for 4h why Hasura wouldn't accept the TMDB spec, I took a very round about approach to solving my issue as I got an error of Invalid spec: right-hand side of 'in' should be an object, got undefined. In the end I decided to do some simple binary search with a json editor to find the offending path, in 20 minutes I found that the path movie/{movie_id}/changes has no defined response schema object. Leading to that weird error. Why is this? Is there a specific reason or just an oversight? @TravisBell

I got Hasura to parse the schema by removing the content field on the 200 response object in the offending path. Needless to say, I screamed so loudly and ear raped my roommate once I got it working. I've had this issue back in March 2023, but I just got round to taking a look at the project again. Sorry roommate.

6 replies (on page 1 of 1)

Jump to last post

Btw, I used a custom script found in https://chat.openai.com/share/f0818c2d-ab1f-4ae1-b318-ae13306fb72e that removed the examples from all paths as it was causing some memory issues with the Hasura web portal.

const readline = require('readline');

// Function to remove example responses
function removeExampleResponses(oas) {
  if (!oas || typeof oas !== 'object') {
    throw new Error('Invalid input: OAS object is required');
  }

  // Iterate through paths
  for (const path in oas.paths) {
    const pathObject = oas.paths[path];

    // Iterate through HTTP methods (e.g., get, post, etc.)
    for (const method in pathObject) {
      const methodObject = pathObject[method];

      // Check if responses exist
      if (methodObject.responses && typeof methodObject.responses === 'object') {
        // Iterate through response codes
        for (const responseCode in methodObject.responses) {
          const response = methodObject.responses[responseCode];

          // Remove the example property from the response object
          if (response && response.content && response.content['application/json'] && response.content['application/json'].example) {
            delete response.content['application/json'].example;
          }
        }
      }
    }
  }

  return oas;
}

// Read input from stdin
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  terminal: false
});

let input = '';

rl.on('line', (line) => {
  input += line;
});

rl.on('close', () => {
  try {
    const oasInput = JSON.parse(input);
    const oasWithoutExamples = removeExampleResponses(oasInput);
    console.log(JSON.stringify(oasWithoutExamples, null, 2));
  } catch (error) {
    console.error('Error processing input:', error.message);
  }
});

Hi @robigan,

Are you using a current version of the OAS file that can be found here: https://developer.themoviedb.org/openapi ?

I ask because you mention a file from 2023. Since that time in 2023, we have migrated off the old API docs provider, so that file is completely different from what is currently generated.

Yup, using the latest copy of the oas file found there. By 2023 I mean it was the week just after you had posted the new migrations.

Ok, got it.

Well, ya, ReadMe is the one generating those files so there's not much I can do. It's up to them to generate a valid spec. man_shrugging_tone2

@travisbell said:

Ok, got it.

Well, ya, ReadMe is the one generating those files so there's not much I can do. It's up to them to generate a valid spec. man_shrugging_tone2

True, but the response body on the aforementioned route is empty. Even on the official tmdb api viewer. On your side does the response body to that route show up?

How's it look now?

There was an extra object ({}) defined at the beginning of the response that shouldn't have been there.

Can't find a movie or TV show? Login to create it.

Global

s focus the search bar
p open profile menu
esc close an open window
? open keyboard shortcut window

On media pages

b go back (or to parent when applicable)
e go to edit page

On TV season pages

(right arrow) go to next season
(left arrow) go to previous season

On TV episode pages

(right arrow) go to next episode
(left arrow) go to previous episode

On all image pages

a open add image window

On all edit pages

t open translation selector
ctrl+ s submit form

On discussion pages

n create new discussion
w toggle watching status
p toggle public/private
c toggle close/open
a open activity
r reply to discussion
l go to last reply
ctrl+ enter submit your message
(right arrow) next page
(left arrow) previous page

Settings

Want to rate or add this item to a list?

Masuk