djangopython-3.xdjango-modelsdjango-extensions

Django-extension runscript No (valid) module for script


I'm trying to create a script that will populate my model families with informations extracted from a text file. This is my first post in StackOverflow, please be gentle, sorry if the question is not well expressed or not correctly formatted.

Django V 1.9 and running on Python 3.5
Django-extensions installed

This is my model: it's in an app called browse

from django.db import models
from django_extensions.db.models import TimeStampedModel


class families(TimeStampedModel):
     rfam_acc = models.CharField(max_length=7)
     rfam_id = models.CharField(max_length=40)
     description = models.CharField(max_length=75)
     author = models.CharField(max_length=50)
     comment = models.CharField(max_length=500)
     rfam_URL = models.URLField()

Here I have my script familiespopulate.py. Positioned in the PROJECT_ROOT/scripts directory.

import csv
from browse.models import families

file_path =       "/Users/work/Desktop/StructuRNA/website/scripts/RFAMfamily12.1.txt"

def run(file_path):
    listoflists = list(csv.reader(open(file_path, 'rb'), delimiter='\t'))
    for row in listoflists:
        families.objects.create(
                rfam_acc=row[0],
                rfam_id=row[1],
                description=row[3],
                author=row[4],
                comment=row[9],
        )

When from Terminal i run:

python manage.py runscript familiespopulate

it returns:

No (valid) module for script 'familiespopulate' found
Try running with a higher verbosity level like: -v2 or -v3

The problem must be in importing the model families, I'm new to django, and I cannot find any solution here on StackOverflow or anywhere else online. This is why I ask for your help!

Do you know how the model should be imported? Or... Am I doing something else wrong.

Important piece of information is that the script runs if I modify it to PRINT out the parameters, instead of creating an object in families.

For your information and curiosity I will also post here an extract of the textfile that I'm using.

RF00001 5S_rRNA 1302    5S ribosomal RNA    Griffiths-Jones SR, Mifsud W, Gardner PP    Szymanski et al, 5S ribosomal database, PMID:11752286   38.00   38.00   37.90   5S ribosomal RNA (5S rRNA) is a component of the large ribosomal subunit in both prokaryotes and eukaryotes. In eukaryotes, it is synthesised by RNA polymerase III (the other eukaryotic rRNAs are cleaved from a 45S precursor synthesised by RNA polymerase I). In Xenopus oocytes, it has been shown that fingers 4-7 of the nine-zinc finger transcription factor TFIIIA can bind to the central region of 5S RNA. Thus, in addition to positively regulating 5S rRNA transcription, TFIIIA also stabilises 5S rRNA until it is required for transcription.    NULL    cmbuild -F CM SEED  cmcalibrate --mpi CM    cmsearch --cpu 4 --verbose --nohmmonly -T 24.99 -Z 549862.597050 CM SEQDB   712 183439  0   0   Gene; rRNA; Published; PMID:11283358    7946    0       0.59496 -5.32219    1600000 213632  305 119 1   -3.78120    0.71822 2013-10-03 20:41:44 2016-04-21 23:07:03

This is the first line and the result of the extraction from the listoflists is :

RF00002
5_8S_rRNA
5.8S ribosomal RNA
Griffiths-Jones SR, Mifsud W
5.8S ribosomal RNA (5.8S rRNA) is a component of the large subunit of    the eukaryotic ribosome. It is transcribed by RNA polymerase I as part of the 45S precursor that also contains 18S and 28S rRNA. Functionally, it is thought that 5.8S rRNA may be involved in ribosome translocation [2]. It is also known to form covalent linkage to the p53 tumour suppressor protein [3]. 5.8S rRNA is also found in archaea.

Solution

  • Apart from adding init.py you are not supposed to pass any parameters in the run method.

    def run():
         <your code goes here>