Python Django - Как передать URL HTTPS в качестве параметра функции в оболочке manage.py - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь вызвать функцию insert_db в оболочке python. Для вызова insert_db требуется URL-адрес https для вызова некоторых других функций.

В терминале в моей папке проекта Django python я набираю './manage.py shell', чтобы получить оболочку python для Django собирается.

После этого:

>>> from send_values.api.send_to_db import insert_db
>>> insert_db('https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json')

Я получаю следующую ошибку:

reports.exceptions.MissingSchema: Неверный URL 'h': Схема не предоставлена. Возможно, вы имели в виду http://h?

send_to_db.py код:

# python send_to_db.py 'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json'

from ..models import Correlations
from .lambda_async_s3_uri import filter_complete
import sys

def insert_db(args):

    print(args)

    table_values = filter_complete(args)

    for value_set in table_values:
        new_value_set = Correlations.objects.create(value_set)
        # new_value_set = Correlations.objects.create(experimentName=item[3], colLabel=item[5], rowLabel=item[4], rowNum=item[0], colNum=item[1], cor=item[2])
        new_value_set.save()

def main(args):
    insert_db(args)

if __name__ == '__main__':
    main(sys.argv[1:])

Любая помощь приветствуется. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Примечания:

1) Я знаю, что функция insert_db работает так, как она должна (получение URL, загрузка некоторых файлов, анализ их через некоторые данные, и сделать некоторые расчеты из этих данных). Перед созданием этого Django проекта в чистом Python проекте я обычно называл его так: python send_to_db.py 'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json' На этом более раннем этапе, вместо того, чтобы пытаться добавьте его в базу данных Django, я просто печатал значения, которые будет вычислять insert_db (которые он успешно вывел в терминале). Передача URL через терминал с помощью этой команды bash работала тогда, и мне интересно, как это сделать в python.

2) Я также попробовал следующее в оболочке ./manage.py :

>>> from send_values.api.send_to_db import insert_db
>>> url = 'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json'
>>> insert_db(url)

Но я все еще получаю ту же ошибку:

reports.exceptions.MissingSchema: Неверный URL-адрес 'h': Схема не указана. Возможно, вы имели в виду http://h?

1 Ответ

2 голосов
/ 24 марта 2020

Просто дикое предположение - я не проверял, что должен делать filter_complete(), но, учитывая, как выглядит ваш рабочий код и сообщение об ошибке, похоже, он ожидает список или кортеж, а не строку. Если это правильно, вы должны назвать это следующим образом:

>>> from send_values.api.send_to_db import insert_db
>>> url = 'https://www.encodeproject.org/search/?searchTerm=H3K4ME3&type=Experiment&replication_type=isogenic&assembly=GRCh38&award.rfa=ENCODE4&format=json'
>>> # make the argument a list
>>> insert_db([url])

Если это решит проблему, вы можете обновить код, используя вместо него *varargs:

from ..models import Correlations
def insert_db(*args):
    print(args)
    table_values = filter_complete(args)
    for value_set in table_values:
        new_value_set = Correlations.objects.create(value_set)
        new_value_set.save()

def main(*args):
    insert_db(*args)

if __name__ == '__main__':
    main(*sys.argv[1:])

И тогда вы можете назвать это, как ожидалось:

>>> insert_db('https://some.url.here')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...