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
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
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
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
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()
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
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
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
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()
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