コード例 #1
0
ファイル: models.py プロジェクト: jai2033shankar/pychat-1
class Image(models.Model):
    class MediaTypeChoices(Enum):
        video = 'v'
        image = 'i'

    # character in Message.content that will be replaced with this image
    symbol = models.CharField(null=False, max_length=1)
    message = models.ForeignKey(Message,
                                models.CASCADE,
                                related_name='message',
                                null=False)
    img = FileField(upload_to=get_random_path, null=True)
    preview = FileField(upload_to=get_random_path, null=True)
    type = models.CharField(null=False,
                            max_length=1,
                            default=MediaTypeChoices.image.value)

    @property
    def type_enum(self):
        return self.MediaTypeChoices(self.type)

    @type_enum.setter
    def type_enum(self, p_type):
        self.type = p_type.value

    class Meta:
        unique_together = ('symbol', 'message')
コード例 #2
0
    def test_filefield_awss3_storage(self):
        """
        Simulate a FileField with an S3 storage which uses keys rather than
        folders and names. FileField and Storage shouldn't have any os.path()
        calls that break the key.
        """
        storage = AWSS3Storage()
        folder = 'not/a/folder/'

        f = FileField(upload_to=folder, storage=storage)
        key = 'my-file-key\\with odd characters'
        data = ContentFile('test')
        expected_key = AWSS3Storage.prefix + folder + key

        # Simulate call to f.save()
        result_key = f.generate_filename(None, key)
        self.assertEqual(result_key, expected_key)

        result_key = storage.save(result_key, data)
        self.assertEqual(result_key, expected_key)

        # Repeat test with a callable.
        def upload_to(instance, filename):
            # Return a non-normalized path on purpose.
            return folder + filename

        f = FileField(upload_to=upload_to, storage=storage)

        # Simulate call to f.save()
        result_key = f.generate_filename(None, key)
        self.assertEqual(result_key, expected_key)

        result_key = storage.save(result_key, data)
        self.assertEqual(result_key, expected_key)
コード例 #3
0
    def test_filefield_generate_filename_with_upload_to(self):
        def upload_to(instance, filename):
            return 'some/folder/' + filename

        f = FileField(upload_to=upload_to)
        self.assertEqual(f.generate_filename(None, 'test with space.txt'),
                         os.path.normpath('some/folder/test_with_space.txt'))
コード例 #4
0
 def test_filefield_dangerous_filename(self):
     candidates = ['..', '.', '', '???', '$.$.$']
     f = FileField(upload_to='some/folder/')
     msg = "Could not derive file name from '%s'"
     for file_name in candidates:
         with self.subTest(file_name=file_name):
             with self.assertRaisesMessage(SuspiciousFileOperation, msg % file_name):
                 f.generate_filename(None, file_name)
コード例 #5
0
    def test_filefield_generate_filename_with_upload_to(self):
        def upload_to(instance, filename):
            return 'some/folder/' + filename

        f = FileField(upload_to=upload_to)
        self.assertEqual(
            f.generate_filename(None, 'test with space.txt'),
            os.path.normpath('some/folder/test_with_space.txt')
        )
コード例 #6
0
    def test_filefield_generate_filename_upload_to_dangerous_filename(self):
        def upload_to(instance, filename):
            return '/tmp/' + filename

        f = FileField(upload_to=upload_to)
        candidates = ['..', '.', '']
        for file_name in candidates:
            msg = f"Could not derive file name from '/tmp/{file_name}'"
            with self.subTest(file_name=file_name):
                with self.assertRaisesMessage(SuspiciousFileOperation, msg):
                    f.generate_filename(None, file_name)
コード例 #7
0
 def test_filefield_generate_filename_absolute_path(self):
     f = FileField(upload_to='some/folder/')
     candidates = [
         '/tmp/path',
         '/tmp/../path',
     ]
     for file_name in candidates:
         msg = f"Detected path traversal attempt in '{file_name}'"
         with self.subTest(file_name=file_name):
             with self.assertRaisesMessage(SuspiciousFileOperation, msg):
                 f.generate_filename(None, file_name)
コード例 #8
0
def save_or_store_media(file: models.FileField, filename: str):
    """
    Saves FileField filename as relative path if it's under MEDIA_ROOT.
    Otherwise writes file under media root.
    """
    if is_media_full_path(filename):
        file.name = strip_media_root(filename)  # type: ignore
    else:
        with open(filename, "rb") as fp:
            plain_filename = os.path.basename(filename)
            file.save(plain_filename, File(fp))  # type: ignore  # noqa
コード例 #9
0
ファイル: __init__.py プロジェクト: MaverikMinett/Agape
def file( *args, **kwargs ):
	
	meta = _kwargs_( kwargs )

	meta['type'] = 'float'

	field = FileField( *args, **kwargs )

	field.meta = meta

	return field
コード例 #10
0
    def test_filefield_get_filename_deprecation(self):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter('always')
            f = FileField(upload_to='some/folder/')
            self.assertEqual(f.get_filename('some/folder/test.txt'),
                             'test.txt')

        self.assertEqual(len(warns), 1)
        self.assertEqual(
            warns[0].message.args[0],
            'FileField now delegates file name and folder processing to the '
            'storage. get_filename() will be removed in Django 2.0.')
コード例 #11
0
    def test_filefield_get_filename_deprecation(self):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter('always')
            f = FileField(upload_to='some/folder/')
            self.assertEqual(f.get_filename('some/folder/test.txt'), 'test.txt')

        self.assertEqual(len(warns), 1)
        self.assertEqual(
            warns[0].message.args[0],
            'FileField now delegates file name and folder processing to the '
            'storage. get_filename() will be removed in Django 2.0.'
        )
コード例 #12
0
ファイル: models.py プロジェクト: ivansg44/lexmapr_django
class PipelineJob(Model):
    """Represents job to be run on the original LexMapr pipeline."""
    id = CharField(max_length=128, primary_key=True)
    complete = BooleanField(default=False)
    input_file = FileField(upload_to="input_files/", blank=True)
    output_file = FileField(upload_to="output_files/", blank=True)
    expires = DateTimeField(default=get_expiry_date)
    err = BooleanField(default=False)
    err_msg = TextField(blank=True)

    def get_absolute_url(self):
        return reverse('pipeline:temp', kwargs={"job_id": self.id})
コード例 #13
0
    def test_filefield_get_directory_deprecation(self):
        with warnings.catch_warnings(record=True) as warns:
            warnings.simplefilter('always')
            f = FileField(upload_to='some/folder/')
            self.assertEqual(f.get_directory_name(), os.path.normpath('some/folder/'))

        self.assertEqual(len(warns), 1)
        self.assertEqual(
            warns[0].message.args[0],
            'FileField now delegates file name and folder processing to the '
            'storage. get_directory_name() will be removed in LegionMarket 2.0.'
        )
コード例 #14
0
 def test_filefield_dangerous_filename(self):
     candidates = [
         ('..', 'some/folder/..'),
         ('.', 'some/folder/.'),
         ('', 'some/folder/'),
         ('???', '???'),
         ('$.$.$', '$.$.$'),
     ]
     f = FileField(upload_to='some/folder/')
     for file_name, msg_file_name in candidates:
         msg = f"Could not derive file name from '{msg_file_name}'"
         with self.subTest(file_name=file_name):
             with self.assertRaisesMessage(SuspiciousFileOperation, msg):
                 f.generate_filename(None, file_name)
コード例 #15
0
 def test_filefield_dangerous_filename(self):
     candidates = [
         ("..", "some/folder/.."),
         (".", "some/folder/."),
         ("", "some/folder/"),
         ("???", "???"),
         ("$.$.$", "$.$.$"),
     ]
     f = FileField(upload_to="some/folder/")
     for file_name, msg_file_name in candidates:
         msg = f"Could not derive file name from '{msg_file_name}'"
         with self.subTest(file_name=file_name):
             with self.assertRaisesMessage(SuspiciousFileOperation, msg):
                 f.generate_filename(None, file_name)
コード例 #16
0
ファイル: models.py プロジェクト: unyime1/pychat
class UserProfile(User):
	name = CharField(max_length=30, null=True, blank=True)
	surname = CharField(max_length=30, null=True, blank=True)
	facebook_id = CharField(max_length=30, null=True, blank=True, unique=True)
	google_id = CharField(max_length=190, null=True, blank=True, unique=True)
	# tho email max length is 254 characted mysql supports unique keys only 767 bytes long (utf8 4 bytes = 767/4 = 191)
	email = EmailField(null=True, unique=True, blank=True, max_length=190)
	city = CharField(max_length=50, null=True, blank=True)

	birthday = DateField(null=True, blank=True)
	contacts = CharField(max_length=100, null=True, blank=True)
	# fileField + <img instead of ImageField (removes preview link)
	photo = FileField(upload_to=get_random_path, null=True, blank=True)
	suggestions = BooleanField(null=False, default=True)
	show_when_i_typing = BooleanField(null=False, default=True)
	embedded_youtube = BooleanField(null=False, default=True)
	highlight_code = BooleanField(null=False, default=False)
	logs = CharField(max_length=16, null=False, blank=False, default=JS_CONSOLE_LOGS)
	theme = CharField(max_length=16, null=False, default='color-reg')
	online_change_sound = BooleanField(null=False, default=True)
	incoming_file_call_sound = BooleanField(null=False, default=True)
	message_sound = BooleanField(null=False, default=True)
	send_logs = BooleanField(null=False, default=True)

	email_verification = ForeignKey(Verification, CASCADE, null=True, blank=True)

	def save(self, *args, **kwargs):
		"""
		http://stackoverflow.com/questions/15422606/django-model-email-field-unique-if-not-null-blank
		"""
		if self.email is not None:
			self.email.lower().strip()  # Hopefully reduces junk to ""
			if self.email == "":
				self.email = None
		super(UserProfile, self).save(*args, **kwargs)
コード例 #17
0
ファイル: models.py プロジェクト: petrilli/jeeves
class PaperVersion(Model):
    paper = ForeignKey(Paper, null=True)

    title = CharField(max_length=1024)
    contents = FileField(upload_to='papers')
    abstract = TextField()
    time = DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'paper_versions'

    @staticmethod
    @label_for('paper', 'title', 'contents', 'abstract')
    @jeeves
    def jeeves_restrict_paperversionlabel(pv, ctxt):
        if pv == None or pv.paper == None:
            return False
        if PaperPCConflict.objects.get(paper=pv.paper, pc=ctxt) != None:
            return False
        return (pv.paper != None and pv.paper.author == ctxt) or ctxt.level == 'pc' or ctxt.level == 'chair'
    
    @staticmethod
    def jeeves_get_private_paper(pv): return None
    @staticmethod
    def jeeves_get_private_title(pv): return ""
    @staticmethod
    def jeeves_get_private_contents(pv): return ""
    @staticmethod
    def jeeves_get_private_abstract(pv): return ""
コード例 #18
0
class SaveFile(CoreModel):
    name = CharField(max_length=128,
                     verbose_name="文件名称",
                     null=True,
                     blank=True)
    type = CharField(max_length=200,
                     verbose_name="文件类型",
                     null=True,
                     blank=True)
    size = CharField(max_length=64, verbose_name="文件大小", null=True, blank=True)
    address = CharField(max_length=16,
                        verbose_name="存储位置",
                        null=True,
                        blank=True)  # 本地、阿里云、腾讯云..
    source = CharField(max_length=16,
                       verbose_name="文件来源",
                       null=True,
                       blank=True)  # 导出、用户上传.
    oss_url = CharField(max_length=200,
                        verbose_name="OSS地址",
                        null=True,
                        blank=True)
    status = BooleanField(default=True, verbose_name="文件是否存在")
    file = FileField(
        verbose_name="文件URL",
        upload_to=files_path,
    )

    class Meta:
        verbose_name = '文件管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return f"{self.name}"
コード例 #19
0
class Issue(Model):
    title = CharField(max_length=255)
    file = FileField(upload_to='issues/%Y/%m')
    img = ImageField(upload_to='images/%Y/%m')
    volume = PositiveIntegerField(null=True)
    issue = PositiveIntegerField(null=True)
    date = DateTimeField()
コード例 #20
0
class Resume(Model):

    id = AutoField(primary_key=True)
    title = CharField(max_length=255, null=False)
    author = ForeignKey(User, related_name='user')
    raw = FileField()
    createdAt = DateTimeField(auto_now_add=True)
コード例 #21
0
ファイル: models.py プロジェクト: UKPLab/linspector-web
class Epoch(Model):

    name = CharField(max_length=35)
    upload = FileField()

    def __str__(self):
        return self.name
コード例 #22
0
class Fee(Model):
    IND = 0
    ORG = 1
    STD = 2
    MEMBER_FEES = (
        (IND, 100),
        (ORG, 400),
        (STD, 25),
    )

    member = ForeignKey(Member)
    paid = BooleanField()
    year = CharField(max_length=4)
    paid_date = DateField()
    invoice = FileField(upload_to=rename_invoice)

    def __unicode__(self):
        p = self.paid and ' - payed (' + self.paid_date + ')' or ''
        o = ''
        if self.member.member_type == 1:  # organisation
            o += self.member.organisation + ' - head-of-list: '

        return self.member.member_id + ' (' + o + self.member.firstname + ' ' + unicode.upper(
            self.member.lastname) + ') - ' + self.year + p

    class Meta:
        unique_together = (
            'member',
            'paid',
            'year',
        )
コード例 #23
0
class Game(Model):
    """docstring for Request"""
    name = CharField(max_length=255, )
    description = TextField(blank=True, null=True)
    created_date = DateTimeField(default=timezone.now())
    image = ImageField(upload_to="pic_folder/imgs/", blank=True, null=True)
    min_players = IntegerField(default=1)
    max_players = IntegerField(default=100)
    manual = FileField(upload_to="file_folder/manual", blank=True, null=True)
    min_best_for = IntegerField(default=0)
    max_best_for = IntegerField(default=100)
    difficulty_level = CharField(max_length=25,
                                 choices=(
                                     ('very_easy', 'muito fácil'),
                                     ('easy', 'facil'),
                                     ('normal', 'normal'),
                                     ('hard', 'difícil'),
                                     ('very_hard', 'muito difícil'),
                                 ))
    time = IntegerField(default=0)

    def __str__(self):
        return self.name

    def no_space_name(self):
        return self.name.replace(' ', '-')

    def mechanisms(self):
        return GameXGameMechanism.objects.filter(game=self)
コード例 #24
0
class BuilderFile(Model):
    create_time = DateTimeField(auto_now_add=True,
                                verbose_name=_("Create Time"))
    user = ForeignKey(
        settings.AUTH_USER_MODEL,
        null=True,
        blank=True,
        on_delete=CASCADE,
        related_name="surveys18_files",
        verbose_name=_("User"),
    )
    token = TextField(null=True, blank=True, verbose_name=_("Token String"))
    datafile = FileField(
        null=True,
        blank=True,
        upload_to="surveys18/builders/",
        verbose_name=_("DataFile"),
    )
    type = ForeignKey(
        "surveys18.BuilderFileType",
        null=True,
        blank=True,
        on_delete=CASCADE,
        verbose_name=_("BuilderFileType"),
    )

    class Meta:
        verbose_name = _("BuilderFile")
        verbose_name_plural = _("BuilderFile")

    def __str__(self):
        return str(self.type)

    def __unicode__(self):
        return str(self.type)
コード例 #25
0
class Article(models.Model):
    title = CharField(max_length=128)
    article = FileField(upload_to=md_file_path)
    post_date = DateTimeField(default=timezone.now)
    #スペース区切りのカテゴリー
    category_split_space = CharField(max_length=128)
    category = ManyToManyField(Category)
コード例 #26
0
ファイル: models.py プロジェクト: gregorjerse/bober
class ResourceCache(Model):
    def __str__(self):
        return u"{}: {}".format(self.format, self.file)

    file = FileField(upload_to='caches')
    format = CharField(max_length=16, choices=CACHE_FORMATS)
    resources = ManyToManyField('Resource')
コード例 #27
0
class BuilderFile(Model):
    create_time = DateTimeField(auto_now_add=True,
                                verbose_name=_("Create Time"))
    user = ForeignKey(
        settings.AUTH_USER_MODEL,
        null=True,
        blank=True,
        on_delete=CASCADE,
        related_name="surveys20_files",
        verbose_name=_("User"),
    )
    token = TextField(null=True, blank=True, verbose_name=_("Token String"))
    datafile = FileField(
        null=True,
        blank=True,
        upload_to="surveys20/builders/",
        verbose_name=_("DataFile"),
    )
    delete_exist = BooleanField(default=False)

    class Meta:
        verbose_name = _("BuilderFile")
        verbose_name_plural = _("BuilderFile")

    def __str__(self):
        return str(self.user)
コード例 #28
0
class Outcome(Model):

    study = ForeignKey(Study, related_name='outcomes')

    type_of_outcome = ForeignKey('TypeOfOutcome',
                                 verbose_name='type of output',
                                 null=True,
                                 blank=True)

    content_topic = ForeignKey('ContentTopic',
                               verbose_name='content topic',
                               null=True,
                               blank=True)

    document_title = CharField('title', max_length=255)

    text = TextField('text', null=True, blank=True)

    file_id = FileField(upload_to='outcomes',
                        max_length=256,
                        null=True,
                        blank=True,
                        default='',
                        verbose_name='File')

    def __unicode__(self):
        return self.document_title
コード例 #29
0
    def test_filefield_generate_filename_upload_to_absolute_path(self):
        def upload_to(instance, filename):
            return '/tmp/' + filename

        f = FileField(upload_to=upload_to)
        candidates = [
            'path',
            '../path',
            '???',
            '$.$.$',
        ]
        for file_name in candidates:
            msg = f"Detected path traversal attempt in '/tmp/{file_name}'"
            with self.subTest(file_name=file_name):
                with self.assertRaisesMessage(SuspiciousFileOperation, msg):
                    f.generate_filename(None, file_name)
コード例 #30
0
ファイル: models.py プロジェクト: skeithtan/iris-online-store
class Product(Model):
    name = CharField(max_length=64)
    description = CharField(max_length=256)
    photo = FileField(null=True, blank=True, default="/static/images/product.png")
    stall = ForeignKey(Stall, on_delete=CASCADE)
    quantity = PositiveIntegerField(default=0)
    is_active = BooleanField(default=True)

    def deactivate(self):
        if self.is_active:
            self.is_active = False
            self.save()

    @property
    def current_price_history(self):
        return self.pricehistory_set.all().order_by('-effective_from')[0]

    @property
    def current_price(self):
        return self.current_price_history.price

    def change_price(self, new_price):
        current_price_history = self.current_price_history
        current_price_history.effective_to = datetime.now()
        current_price_history.save()
        self.pricehistory_set.create(price=new_price)

    def price_for_date(self, date):
        # Cut off all that are not within parameter date range and sort descending (present to past)
        price_histories = self.pricehistory_set.filter(effective_from__lte=date).order_by("-effective_from")
        # Take most recent entry
        return price_histories[0].price

    def __str__(self):
        return f"{self.name}" if self.is_active else f"DEACTIVATED - {self.name}"
コード例 #31
0
ファイル: models.py プロジェクト: polz113/bober
class Resource(Model):
    def __str__(self):
        return u"{}: {}".format(self.relative_url, self.file)
    question = ForeignKey('Question', on_delete=CASCADE)
    relative_url = CharField(max_length=255)
    file = FileField(null=True, upload_to='resources')
    resource_type = CharField(max_length=255)
    mimetype = CharField(max_length=255)
    data = BinaryField(null=True)
    part_of_solution = BooleanField(default=False)

    def url(self):
        return self.file.url

    def as_bytes(self):
        s = bytes()
        if self.file:
            self.file.open()
            s = self.file.read()
            self.file.close()
        elif self.data is not None:
            fname = os.path.join('resources', self.question.identifier,
                                 self.relative_url)
            self.file.name = fname
            ensure_dir_exists(self.file.path)
            with open(self.file.path, 'wb') as f:
                f.write(self.data)
            s = self.data
        return s

    def as_base64(self):
        return base64.b64encode(self.as_bytes())
コード例 #32
0
class TestModelFields(Model):
    big_int = BigIntegerField()
    yesno = BooleanField()
    title = CharField(max_length=150)
    csv_data = CommaSeparatedIntegerField(max_length=255)
    when = DateField()
    when_accurate = DateTimeField()
    amount = DecimalField(max_digits=8, decimal_places=4)
    email = EmailField()
    upload = FileField(upload_to='test')
    path = FilePathField(path=d.APP_DIR, recursive=False, match=".json$")
    inaccurate = FloatField()
    img = ImageField(upload_to='test')
    ip = IPAddressField()
    better_ip = GenericIPAddressField(protocol='both')
    yesnomaybe = NullBooleanField(default=None)
    posint = PositiveIntegerField()
    small_posint = PositiveSmallIntegerField()
    slug = SlugField()
    small_int = SmallIntegerField()
    content = TextField()
    when_time = TimeField()
    web_address = URLField()
    user = ForeignKey('auth.User')
    groups = ManyToManyField('auth.Group')
    one_to_one = OneToOneField('auth.Permission')

    class Meta:
        verbose_name = 'test model fields'
        verbose_name_plural = 'test model fields'
コード例 #33
0
class FormFromModelTest(Model):
    f_int = IntegerField()
    f_float = FloatField()
    f_bool = BooleanField()
    f_file = FileField()

    f_int_excluded = IntegerField()
コード例 #34
0
ファイル: myfields.py プロジェクト: GiggleLiu/lala
 def __init__(self, *args, **kwargs):
     FileField.__init__(self)
     self.content_types = '' #kwargs.pop("content_types")
     self.max_upload_size = 20971520 #kwargs.pop("max_upload_size")
     super(AudioField, self).__init__(*args, **kwargs)
コード例 #35
0
 def test_filefield_generate_filename(self):
     f = FileField(upload_to='some/folder/')
     self.assertEqual(
         f.generate_filename(None, 'test with space.txt'),
         os.path.normpath('some/folder/test_with_space.txt')
     )