예제 #1
0
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)

        # Remove trailing whitespace, truncate to max folder name length.
        # Not ideal but necessary to work around MySQL limitations.
        name = name.rstrip()
        if len(name) > MAX_FOLDER_NAME_LENGTH:
            log.warning("Truncating long folder name for account {}; "
                        "original name was '{}'".format(account.id, name))
            name = name[:MAX_FOLDER_NAME_LENGTH]
        q = q.filter(cls.name == name)

        try:
            obj = q.one()
        except NoResultFound:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session,
                namespace_id=account.namespace.id,
                name=role,
                display_name=name,
                type_='folder')
            session.add(obj)
        except MultipleResultsFound:
            log.info('Duplicate folder rows for name {}, account_id {}'.format(
                name, account.id))
            raise

        if obj.canonical_name is None:
            obj.canonical_name = role

        return obj
예제 #2
0
파일: label.py 프로젝트: rf-/sync-engine
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)

        if role is not None:
            q = q.filter(cls.canonical_name == role)
        else:
            # g_label may not have unicode type (in particular for a numeric
            # label, e.g. '42'), so coerce to unicode.
            name = unicode(name)
            # Remove trailing whitespace, truncate (due to MySQL limitations).
            name = name.rstrip()
            if len(name) > MAX_LABEL_NAME_LENGTH:
                log.warning("Truncating label name for account {}; "
                            "original name was '{}'" .format(account.id, name))
                name = name[:MAX_LABEL_NAME_LENGTH]
            q = q.filter(cls.name == name)

        obj = q.first()
        if obj is None:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session, namespace_id=account.namespace.id, name=role,
                display_name=name, type_='label')
            session.add(obj)
        return obj
예제 #3
0
파일: folder.py 프로젝트: rf-/sync-engine
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)

        if role is not None:
            q = q.filter(cls.canonical_name == role)

        # Remove trailing whitespace, truncate to max folder name length.
        # Not ideal but necessary to work around MySQL limitations.
        name = name.rstrip()
        if len(name) > MAX_FOLDER_NAME_LENGTH:
            log.warning("Truncating long folder name for account {}; "
                        "original name was '{}'" .format(account.id, name))
            name = name[:MAX_FOLDER_NAME_LENGTH]
        q = q.filter(cls.name == name)

        try:
            obj = q.one()
        except NoResultFound:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session, namespace_id=account.namespace.id, name=role,
                display_name=name, type_='folder')
            session.add(obj)
        except MultipleResultsFound:
            log.info('Duplicate folder rows for name {}, account_id {}'
                     .format(name, account.id))
            raise

        return obj
예제 #4
0
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)

        if role is not None:
            q = q.filter(cls.canonical_name == role)
        else:
            # g_label may not have unicode type (in particular for a numeric
            # label, e.g. '42'), so coerce to unicode.
            name = unicode(name)
            # Remove trailing whitespace, truncate (due to MySQL limitations).
            name = name.rstrip()
            if len(name) > MAX_LABEL_NAME_LENGTH:
                log.warning("Truncating label name for account {}; "
                            "original name was '{}'".format(account.id, name))
                name = name[:MAX_LABEL_NAME_LENGTH]
            q = q.filter(cls.name == name)

        obj = q.first()
        if obj is None:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session,
                namespace_id=account.namespace.id,
                name=role,
                display_name=name,
                type_='label')
            session.add(obj)
        return obj
예제 #5
0
def schedule_test_action(db_session, account):
    from inbox.models.category import Category

    category_type = 'label' if account.provider == 'gmail' else 'folder'
    category = Category.find_or_create(
        db_session, account.namespace.id, name=None,
        display_name='{}-{}'.format(account.id, random.randint(1, 356)),
        type_=category_type)
    db_session.flush()

    if category_type == 'folder':
        schedule_action('create_folder', category, account.namespace.id,
                        db_session)
    else:
        schedule_action('create_label', category, account.namespace.id,
                        db_session)
    db_session.commit()
예제 #6
0
def schedule_test_action(db_session, account):
    from inbox.models.category import Category

    category_type = 'label' if account.provider == 'gmail' else 'folder'
    category = Category.find_or_create(
        db_session, account.namespace.id, name=None,
        display_name='{}-{}'.format(account.id, random.randint(1, 356)),
        type_=category_type)
    db_session.flush()

    if category_type == 'folder':
        schedule_action('create_folder', category, account.namespace.id,
                        db_session)
    else:
        schedule_action('create_label', category, account.namespace.id,
                        db_session)
    db_session.commit()
예제 #7
0
파일: label.py 프로젝트: aabde/sync-engine
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)

        role = role or ''
        if role:
            q = q.filter(cls.canonical_name == role)
        else:
            q = q.filter(cls.name == name)

        obj = q.first()
        if obj is None:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session, namespace_id=account.namespace.id, name=role,
                display_name=name, type_='label')
            session.add(obj)
        return obj
예제 #8
0
    def find_or_create(cls, session, account, name, role=None):
        # Remove trailing whitespace, truncate to max folder name length.
        # Not ideal but necessary to work around MySQL limitations.
        name = name.rstrip()
        if len(name) > MAX_FOLDER_NAME_LENGTH:
            log.warning("Truncating long folder name for account {}; "
                        "original name was '{}'" .format(account.id, name))
            name = name[:MAX_FOLDER_NAME_LENGTH]

        obj = cls.find(session, account, name, role=role)

        if obj is None:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session, namespace_id=account.namespace.id, name=role,
                display_name=name, type_='folder')
            session.add(obj)
        return obj
예제 #9
0
파일: folder.py 프로젝트: aabde/sync-engine
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)\
            .filter(cls.name == name)

        role = role or ''
        try:
            obj = q.one()
        except NoResultFound:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session, namespace_id=account.namespace.id, name=role,
                display_name=name, type_='folder')
            session.add(obj)
        except MultipleResultsFound:
            log.info('Duplicate folder rows for name {}, account_id {}'
                     .format(name, account.id))
            raise

        return obj
예제 #10
0
def schedule_test_action(db_session, account):
    from inbox.models.category import Category

    category_type = "label" if account.provider == "gmail" else "folder"
    category = Category.find_or_create(
        db_session,
        account.namespace.id,
        name=None,
        display_name="{}-{}".format(account.id, random.randint(1, 356)),
        type_=category_type,
    )
    db_session.flush()

    if category_type == "folder":
        schedule_action("create_folder", category, account.namespace.id,
                        db_session)
    else:
        schedule_action("create_label", category, account.namespace.id,
                        db_session)
    db_session.commit()
예제 #11
0
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)

        role = role or ''
        if role:
            q = q.filter(cls.canonical_name == role)
        else:
            q = q.filter(cls.name == name)

        obj = q.first()
        if obj is None:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session,
                namespace_id=account.namespace.id,
                name=role,
                display_name=name,
                type_='label')
            session.add(obj)
        return obj
예제 #12
0
    def find_or_create(cls, session, account, name, role=None):
        q = session.query(cls).filter(cls.account_id == account.id)\
            .filter(cls.name == name)

        role = role or ''
        try:
            obj = q.one()
        except NoResultFound:
            obj = cls(account=account, name=name, canonical_name=role)
            obj.category = Category.find_or_create(
                session,
                namespace_id=account.namespace.id,
                name=role,
                display_name=name,
                type_='folder')
            session.add(obj)
        except MultipleResultsFound:
            log.info('Duplicate folder rows for name {}, account_id {}'.format(
                name, account.id))
            raise

        return obj