コード例 #1
0
    def test_locate(self):
        import functools
        from sqlalchemy import Column, Integer
        from sqlalchemy_media import File, StoreManager
        from sqlalchemy_media.tests.helpers.types import Json
        StoreManager.register('ftp',
                              functools.partial(FTPStore,
                                                hostname=MockFTP(),
                                                root_path=self.root_path,
                                                base_url=self.base_url),
                              default=True)

        class Person(self.Base):
            __tablename__ = 'person'
            id = Column(Integer, primary_key=True)
            file = Column(File.as_mutable(Json))

        session = self.create_all_and_get_session()

        person1 = Person()
        self.assertIsNone(person1.file)
        sample_content = b'Simple text.'

        with StoreManager(session):
            person1 = Person()
            person1.file = File.create_from(io.BytesIO(sample_content),
                                            content_type='text/plain',
                                            extension='.txt')
            self.assertIsInstance(person1.file, File)
            self.assertEqual(
                person1.file.locate(), '%s%s?_ts=%s' %
                (self.base_url, person1.file.path, person1.file.timestamp))
コード例 #2
0
    def test_model_constructor(self):
        class Person(self.Base):
            __tablename__ = 'person'
            id = Column(Integer, primary_key=True)
            cv = Column(File.as_mutable(Json), nullable=True)

        session = self.create_all_and_get_session()
        person1 = Person(cv=File())
        self.assertIsInstance(person1.cv, File)
        with StoreManager(session):
            person1.cv.attach(BytesIO(b'Simple text'))
            session.add(person1)
            session.commit()
コード例 #3
0
    def test_overwrite(self):
        class Person(self.Base):
            __tablename__ = 'person'
            id = Column(Integer, primary_key=True)
            cv = Column(File.as_mutable(Json), nullable=True)

        session = self.create_all_and_get_session()
        person1 = Person(cv=File())
        self.assertIsInstance(person1.cv, File)
        with StoreManager(session):
            person1.cv.attach(BytesIO(b'Simple text'))
            cv_filename = join(self.temp_path, person1.cv.path)
            self.assertTrue(exists(cv_filename))
            session.add(person1)
            session.commit()

            # Now overwriting the file
            person1 = session.query(Person).filter(
                Person.id == person1.id).one()
            person1.cv.attach(BytesIO(b'Another simple text'), overwrite=True)
            self.assertTrue(exists(cv_filename))
            session.commit()
            self.assertTrue(exists(cv_filename))
コード例 #4
0
 class Person(self.Base):
     __tablename__ = 'person'
     id = Column(Integer, primary_key=True)
     file = Column(File.as_mutable(Json))
コード例 #5
0
    def test_file(self):
        class Person(self.Base):
            __tablename__ = 'person'
            id = Column(Integer, primary_key=True)
            cv = Column(File.as_mutable(Json), nullable=True)

        session = self.create_all_and_get_session()

        # person1 = Person(name='person1')
        person1 = Person()
        self.assertIsNone(person1.cv)
        sample_content = b'Simple text.'

        with StoreManager(session):

            # First file before commit
            person1.cv = File.create_from(BytesIO(sample_content),
                                          content_type='text/plain',
                                          extension='.txt')
            self.assertIsInstance(person1.cv, File)
            self.assertEqual(
                person1.cv.locate(), '%s/%s?_ts=%s' %
                (self.base_url, person1.cv.path, person1.cv.timestamp))
            self.assertDictEqual(
                person1.cv, {
                    'content_type': 'text/plain',
                    'key': person1.cv.key,
                    'extension': '.txt',
                    'length': len(sample_content),
                    'reproducible': False,
                    'timestamp': person1.cv.timestamp
                })
            first_filename = join(self.temp_path, person1.cv.path)
            self.assertTrue(exists(first_filename))
            self.assertEqual(person1.cv.length, len(sample_content))

            # Second file before commit
            person1.cv.attach(BytesIO(sample_content),
                              content_type='text/plain',
                              extension='.txt')
            second_filename = join(self.temp_path, person1.cv.path)
            self.assertTrue(exists(second_filename))

            # Adding object to session, the new life-cycle of the person1 just began.
            session.add(person1)
            session.commit()
            self.assertFalse(exists(first_filename))
            self.assertTrue(exists(second_filename))

            # Loading again
            sample_content = b'Lorem ipsum dolor sit amet'
            person1 = session.query(Person).filter(
                Person.id == person1.id).one()
            person1.cv.attach(BytesIO(sample_content),
                              content_type='text/plain',
                              extension='.txt')
            self.assertIsInstance(person1.cv, File)
            self.assertDictEqual(
                person1.cv, {
                    'content_type': 'text/plain',
                    'key': person1.cv.key,
                    'extension': '.txt',
                    'length': len(sample_content),
                    'reproducible': False,
                    'timestamp': person1.cv.timestamp
                })
            third_filename = join(self.temp_path, person1.cv.path)
            self.assertTrue(exists(second_filename))
            self.assertTrue(exists(third_filename))

            # Committing the session, so the store must done the scheduled jobs
            session.commit()
            self.assertFalse(exists(second_filename))
            self.assertTrue(exists(third_filename))

            # Rollback
            person1.cv.attach(BytesIO(sample_content),
                              content_type='text/plain',
                              extension='.txt')
            forth_filename = join(self.temp_path, person1.cv.path)
            self.assertTrue(exists(forth_filename))
            session.rollback()
            self.assertTrue(exists(third_filename))
            self.assertFalse(exists(forth_filename))

            # Delete file after object deletion
            person1 = session.query(Person).filter(
                Person.id == person1.id).one()
            session.delete(person1)
            session.commit()
            self.assertFalse(exists(third_filename))

            # Delete file on set to null
            person1 = Person()
            self.assertIsNone(person1.cv)
            person1.cv = File()
            person1.cv.attach(BytesIO(sample_content),
                              content_type='text/plain',
                              extension='.txt')
            fifth_filename = join(self.temp_path, person1.cv.path)
            person1.cv = None
            session.add(person1)
            self.assertTrue(exists(fifth_filename))
            session.commit()
            # Because delete_orphan is not set.
            self.assertTrue(exists(fifth_filename))

            # storing a file on separate store:
            person1.cv = File.create_from(BytesIO(sample_content),
                                          store_id='temp_fs')
            fifth_filename = join(self.sys_temp_path, person1.cv.path)
            session.commit()
            self.assertTrue(exists(fifth_filename))