def aliases(self, 
            aliases, 
            provider_url_template=None,
            cache_enabled=True):            

        # have reported all of these to mendeley, ie http://support.mendeley.com/customer/en/portal/questions/11307109-wrong-pmid?new=11307109
        bad_mendeley_aliases = [
            ("pmid", "19016882"),  # http://www.mendeley.com/catalog/scientific-workflow-management-kepler-system-1/
            ("pmid", "22170219"),  #http://www.mendeley.com/catalog/social-network-analysis-animal-behaviour-promising-tool-study-sociality-1/
            ("pmid", "20433197")  #http://support.mendeley.com/customer/en/portal/questions/11494864-wrong-pmid?new=11494864
        ]

        doc = self._get_doc(aliases)
        new_aliases = []
        if doc:  
            if doc.identifiers:
                from totalimpactwebapp.aliases import alias_dict_from_tuples
                aliases_dict = alias_dict_from_tuples(aliases)
                for namespace in doc.identifiers:
                    if namespace in ["doi", "arxiv", "pmid", "scopus"] and (namespace not in aliases_dict):
                        new_alias = normalize_alias_tuple(namespace, doc.identifiers[namespace])
                        if new_alias and new_alias not in bad_mendeley_aliases:
                            new_aliases += [new_alias]

            new_aliases += [("url", doc.link)]
            new_aliases += [("mendeley_uuid", doc.id)]
            new_aliases = [alias for alias in new_aliases if alias not in aliases]

        return new_aliases
def create_products_from_alias_tuples(profile_id, alias_tuples):
    tiid_alias_mapping = {}
    clean_aliases = [normalize_alias_tuple(ns, nid) for (ns, nid) in alias_tuples]  
    tiids_to_update = []  
    new_products = []

    for alias_tuple in clean_aliases:
        new_product = Product(profile_id=profile_id)
        (ns, nid) = alias_tuple
        if ns=="biblio":
            new_product = put_biblio_in_product(new_product, nid, provider_name="bibtex")
        else:
            new_product = put_aliases_in_product(new_product, [alias_tuple])

        new_product.set_last_refresh_start()

        new_products += [new_product]
        tiids_to_update += [new_product.tiid]

    db.session.add_all(new_products)
    commit(db)

    # has to be after commits to database
    start_product_update(profile_id, tiids_to_update, "high")

    return new_products