Django: импорт модели работает, импорт ее экземпляра сразу после этого завершается неудачно - PullRequest
0 голосов
/ 15 марта 2019

Я работаю с этим репо: https://github.com/IntelligentTrading/data

Для справки, последняя из этих двух строк является оскорбительной, я считаю:

from apps.channel.models import ExchangeData
from apps.channel.models.exchange_data import POLONIEX

На странице есть инструкции,Я почти дошел до конца, затем я запускаю это:

python manage.py poloniex_polling

Для справки, вот код для poloniex_polling.py:

import json
import logging
import schedule
import time

from django.core.management.base import BaseCommand
from requests import get, RequestException

from apps.channel.models import ExchangeData
from apps.channel.models.exchange_data import POLONIEX

logger = logging.getLogger(__name__)


class Command(BaseCommand):
    help = "Polls data from Poloniex every 1 minute"

    def handle(self, *args, **options):
        logger.info("Getting ready to poll Poloniex...")
        schedule.every(1).minutes.do(poll_latest_poloniex_data)

        keep_going=True
        while keep_going:
            try:
                schedule.run_pending()
                time.sleep(1)
            except Exception as e:
                logger.debug(str(e))
                logger.info("Poloniex polling shut down.")
                keep_going = False


def poll_latest_poloniex_data():
    try:
        logger.info("polling for Poloniex data...")
        req = get('https://poloniex.com/public?command=returnTicker')

        poloniex_data_point = ExchangeData.objects.create(
            source=POLONIEX,
            data=req.json(), # the exact json from the request data
            timestamp=time.time() # now
        )
        logger.info("Saving Poloniex data...")

    except RequestException:
        return 'Error to collect data from Poloniex'

Когда я запускаю python manage.py poloniex_polling, я получаю:

INFO:settings:Deployment environment detected: LOCAL
INFO:settings:Importing vendor_services_settings
INFO:settings:LOCAL environment detected. Importing local_settings.py
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/home/cerulean/.virtualenvs/ITF/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/cerulean/.virtualenvs/ITF/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/cerulean/.virtualenvs/ITF/lib/python3.6/site-packages/django/core/management/__init__.py", line 224, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/home/cerulean/.virtualenvs/ITF/lib/python3.6/site-packages/django/core/management/__init__.py", line 36, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/home/cerulean/.virtualenvs/ITF/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/cerulean/Code/ITF/data-fork/data/apps/channel/management/commands/poloniex_polling.py", line 10, in <module>
    from apps.channel.models.exchange_data import POLONIEX
ImportError: cannot import name 'POLONIEX'

Кажется, что

from apps.channel.models.exchange_data import POLONIEX

в poloniex_polling.py пытается импортировать модель с именемPOLONIEX до его создания.

Из моего опыта, связанного с запуском этого приложения, обычно возникает проблема более высокого уровня.Может быть, это база данных, которая не работает?Я использую сервер postgresql как сервис.База данных содержит данные, и localhost: 8000 работает.

вот как выглядит файл exchange_data.py в папке моделей:

from django.db import models
from django.contrib.postgres.fields import JSONField
from unixtimestampfield.fields import UnixTimeStampField



    class ExchangeData(models.Model):
        source = models.CharField(max_length=128)
        data = JSONField(default="")
        timestamp = UnixTimeStampField(null=False)


        # MODEL PROPERTIES

        # MODEL FUNCTIONS

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Я понял это. Я добавил код в модель, которую я взял из связанного хранилища, и исправил ошибку:

from settings import SOURCE_CHOICES

(POLONIEX, BITTREX) = list(range(2))
SOURCE_CHOICES = (
    (POLONIEX, 'poloniex'),
    (BITTREX, 'bittrex'),
)

Теперь объект Poloniex существует.

0 голосов
/ 15 марта 2019

Это явно ошибка в этой команде. Как видно из кода , этот файл моделей не содержит объект с именем POLONIEX. Отсутствующие базы данных не могут это исправить.

Ваш опыт "борьбы с этим приложением", вероятно, сводится к тому, что не работает .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...