Поддержка The Movie Database

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 ответов (на странице 1 из 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.

Не можете найти фильм или сериал? Войдите на сайт, чтобы добавить его.

Глобальные

s фокусироваться на панели поиска
p открыть меню профиля
esc закрыть открытое окно
? открыть окно сочетаний клавиш

На страницах медиа

b назад (или выше, если применимо)
e перейти на страницу правки

На страницах сезонов

(стрелка вправо) перейти к следующему сезону
(стрелка влево) перейти к предыдущему сезону

На страницах эпизодов

(стрелка вправо) перейти к следующему эпизоду
(стрелка влево) перейти к предыдущему эпизоду

На всех страницах изображений

a открыть окно добавления изображения

На всех страницах правки

t открыть переключатель переводов
ctrl+ s отправить форму

На страницах обсуждения

n создать новое обсуждение
w сменить статус отслеживания
p публичное/приватное
c закрыть/открыть
a открыть страницу действий
r ответить в обсуждении
l перейти к последнему ответу
ctrl+ enter отправить своё сообщение
(стрелка вправо) следующая страница
(стрелка влево) предыдущая страница

Параметры

Хотите поставить оценку или добавить в список?

Войти