Beispiel #1
0
class User(db.Model, UserMixin):
    __tablename__ = 'Users'

    id = db.Column(db.Integer, primary_key=True)

    login = db.Column(db.Unicode(50), unique=True)
    name = db.Column(db.Unicode(50), nullable=False)
    password = db.Column(db.Unicode(50), nullable=False)  # NOT USED!!!
    email = db.Column(db.Unicode(254), nullable=False)
    organization = db.Column(db.Unicode(50))  # Organization and role aren't used either.
    role = db.Column(db.Unicode(50))
    creation_date = db.Column(db.DateTime, nullable=False, index=True)
    last_access_date = db.Column(db.DateTime, nullable=False, index=True)
    auth_system = db.Column(db.Unicode(20), nullable=True)
    auth_data = db.Column(db.Unicode(255), nullable=True)

    def __init__(self, login=None, name=None, password=None, email=None, organization=None, role=None,
                 creation_date=None, last_access_date=None, auth_system=None, auth_data=None):
        self.login = login
        self.name = name
        self.password = password
        self.email = email
        self.organization = organization
        self.role = role
        self.creation_date = creation_date
        self.last_access_date = last_access_date
        self.auth_system = auth_system
        self.auth_data = auth_data

    def __repr__(self):
        return "User(%r, %r, %r, %r, %r, %r, %r, %r, %r, %r)" % (
            self.login, self.name, self.password, self.email, self.organization, self.role, self.creation_date,
            self.last_access_date, self.auth_system, self.auth_data)

    def __unicode__(self):
        return self.name

    @classmethod
    def exists(cls, login, word):
        return cls.query.filter(sql.and_(cls.login == login, cls.password == word)).first()

    @classmethod
    def find_by_id(cls, id):
        return cls.query.filter_by(id=id).first()
Beispiel #2
0
class TranslatedApp(db.Model):
    __tablename__ = 'TranslatedApps'

    id = db.Column(db.Integer, primary_key = True)
    translation_url_id = db.Column(db.Integer, ForeignKey('TranslationUrls.id'))
    url = db.Column(db.Unicode(255), unique = True, nullable = False, index = True)

    translation_url = relation("TranslationUrl", backref="apps")

    def __init__(self, url, translation_url):
        self.url = url
        if isinstance(translation_url, basestring):
            raise Exception("TranslationApp requires a TranslationUrl, not a string")

        self.translation_url = translation_url

    def __unicode__(self):
        return self.url
Beispiel #3
0
class TranslationSubscription(db.Model):
    __tablename__ = 'TranslationSubscriptions'

    id = db.Column(db.Integer, primary_key = True)
    translation_url_id = db.Column(db.Integer, ForeignKey('TranslationUrls.id'))
    recipient_id = db.Column(db.Integer, ForeignKey('TranslationNotificationRecipients.id'))
    mechanism = db.Column(db.Unicode(255), nullable = False, index = True)
    last_check = db.Column(db.DateTime, index = True)
    # mechanism: web, file (...)

    translation_url = relation("TranslationUrl", backref="subscriptions")
    recipient = relation("TranslationNotificationRecipient", backref="subscriptions")

    def __init__(self, translation_url, recipient, mechanism):
        self.translation_url = translation_url
        self.recipient = recipient
        self.mechanism = mechanism
        self.last_check = datetime.datetime.utcnow() - datetime.timedelta(hours = 24)

    def update(self):
        self.last_check = datetime.datetime.utcnow()
Beispiel #4
0
class RepositoryApp(db.Model):
    __tablename__ = 'RepositoryApps'

    id = db.Column(db.Integer, primary_key=True)

    name = db.Column(db.Unicode(200), nullable = False, index = True)
    url = db.Column(db.Unicode(1024), nullable = False)
    app_thumb = db.Column(db.Unicode(255))
    description = db.Column(db.UnicodeText)
    app_link = db.Column(db.Unicode(255))
    app_image = db.Column(db.Unicode(255))
    app_format = db.Column(db.Unicode(255)) # opensocial or html
    preview_link = db.Column(db.Unicode(1024), nullable=True)

    uses_proxy = db.Column(db.Boolean, index=True)

    repository = db.Column(db.Unicode(400), nullable = False, index = True)
    external_id = db.Column(db.Unicode(200), index = True)

    adaptable = db.Column(db.Boolean, index = True)
    translatable = db.Column(db.Boolean, index = True)
    offline = db.Column(db.Boolean, index = True)

    translation_percent = db.Column(db.UnicodeText) # JSON document containing which bundles have been translated how much

    last_check = db.Column(db.DateTime, index = True)
    last_change = db.Column(db.DateTime, index = True)
    last_download_change = db.Column(db.DateTime, index = True)
    failing = db.Column(db.Boolean, index = True)
    failing_since = db.Column(db.DateTime, index = True)

    supports_ssl = db.Column(db.Boolean, index=True)
    proxy_image_works = db.Column(db.Boolean, index=True)
    proxy_image_stored = db.Column(db.Boolean, index=True)
    contains_flash = db.Column(db.Boolean, index=True)

    downloaded_hash = db.Column(db.Unicode(255), index=True)
    contents_hash = db.Column(db.Unicode(255), index=True)
    last_processed_downloaded_hash = db.Column(db.Unicode(255), index=True)
    last_processed_contents_hash = db.Column(db.Unicode(255), index=True)
    last_processed_time = db.Column(db.DateTime, index=True)

    def __init__(self, name, url, repository, external_id = None):
        self.name = name
        self.url = url
        self.repository = repository
        self.external_id = unicode(external_id)

        self.app_thumb = None
        self.description = None

        self.adaptable = False
        self.translatable = False

        self.last_check = None
        self.last_change = None

        self.failing = False
        self.failing_since = None

    @property
    def check_urls_hash(self):
        return unicode(zlib.crc32(json.dumps(sorted([ check_url.url for check_url in self.check_urls if check_url.active ]))))

    @property
    def original_translations(self):
        return ','.join([ ote.language.language for ote in self.languages ])

    @original_translations.setter
    def original_translations(self, attr):
        if not attr:
            return

        languages = list(attr.split(','))
        if not languages:
            return

        for orig_lang in self.original_translations.split(','):
            if orig_lang in languages:
                languages.remove(orig_lang)

        for lang_db in db.session.query(Language).filter(Language.language.in_(languages)).all():
            new_lang = RepositoryAppLanguage(repository_app=self, language=lang_db)
            db.session.add(new_lang)
Beispiel #5
0
from alembic import op
import sqlalchemy as sa
import sqlalchemy.sql as sql

from appcomposer.db import db
from appcomposer.application import app

metadata = db.MetaData()
active_translation = db.Table(
    'ActiveTranslationMessages',
    metadata,
    db.Column('id', db.Integer()),
    db.Column('bundle_id', db.Integer),
    db.Column('taken_from_default', db.Boolean),
    db.Column('from_developer', db.Boolean),
    db.Column('key', db.Unicode(255)),
    db.Column('value', db.UnicodeText()),
)
bundle = db.Table(
    'TranslationBundles',
    metadata,
    db.Column('id', db.Integer()),
    db.Column('from_developer', db.Boolean),
    db.Column('translation_url_id', db.Integer),
    db.Column('language', db.Unicode(20)),
    db.Column('target', db.Unicode(20)),
)


def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
Beispiel #6
0
class App(db.Model):
    __tablename__ = 'Apps'
    __table_args__ = (UniqueConstraint('name', 'owner_id'), )

    id = db.Column(db.Integer, primary_key=True)

    unique_id = db.Column(db.Unicode(50), index=True, unique=True)
    name = db.Column(db.Unicode(50), index=True)

    composer = db.Column(db.Unicode(50),
                         index=True,
                         nullable=False,
                         server_default=u'expert')
    data = db.Column(db.Text, nullable=False, server_default=u'{}')
    creation_date = db.Column(db.DateTime, nullable=False, index=True)
    modification_date = db.Column(db.DateTime, nullable=False, index=True)
    last_access_date = db.Column(db.DateTime, nullable=False, index=True)
    description = db.Column(db.Unicode(1000), nullable=True)

    # TODO: Find out why these relationships seems to not work sometimes.
    owner_id = db.Column(db.Integer,
                         ForeignKey("Users.id"),
                         nullable=False,
                         index=True)
    owner = relation("User",
                     backref=backref("own_apps",
                                     order_by=id,
                                     cascade='all,delete'))

    spec_id = db.Column(db.Integer, ForeignKey("Specs.id"))
    spec = relation(
        "Spec", backref="apps"
    )  # declare the relation and place a backref to the apps on the Spec objects.

    # An app can have many bundles (one-to-many).
    bundles = relation("Bundle", backref="app")

    def __repr__(self):
        return self.to_json()

    def __init__(self, name=None, owner=None, composer=None, description=None):
        self.name = name
        self.owner = owner
        self.composer = composer
        self.creation_date = self.modification_date = self.last_access_date = datetime.datetime.now(
        )

        # Generate a not-too-long unique id.
        uid = base64.urlsafe_b64encode(uuid.uuid4().bytes[0:15])
        self.unique_id = uid
        while App.find_by_unique_id(self.unique_id) is not None:
            self.unique_id = base64.urlsafe_b64encode(uuid.uuid4().bytes[0:15])

        self.description = description

    def to_dict(self):
        """
        Turns the app into a dictionary with just data (which is easy to serialize).
        """
        d = {
            "unique_id": self.unique_id,
            "name": self.name,
            "owner_id": self.owner_id,
            "composer": self.composer,
            "data": self.data,
            "creation_date": self.creation_date.__str__(),
            "modification_date": self.modification_date.__str__(),
            "last_access_date": self.last_access_date.__str__(),
        }
        return d

    def to_json(self):
        """
        Turns the App into a JSON string.
        """
        return json.dumps(self.to_dict())

    @classmethod
    def find_by_unique_id(cls, unique_id):
        return cls.query.filter_by(unique_id=unique_id).first()