commit:     932910d804e09718fe1d7e6e7a50d4d943557a66
Author:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Mon Jul 20 15:45:59 2015 +0000
Commit:     Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Mon Jul 20 15:45:59 2015 +0000
URL:        
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=932910d8

add CategoriesMetadata

 tbc/pym/db_mapping.py |  7 +++++++
 tbc/pym/sqlquerys.py  | 19 ++++++++++++++++---
 tbc/pym/updatedb.py   | 15 ++++++++++++++-
 3 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/tbc/pym/db_mapping.py b/tbc/pym/db_mapping.py
index 05fccae..cf4a054 100644
--- a/tbc/pym/db_mapping.py
+++ b/tbc/pym/db_mapping.py
@@ -67,6 +67,13 @@ class Categories(Base):
        TimeStamp = Column('time_stamp', DateTime, nullable=False, 
default=datetime.datetime.utcnow)
        __tablename__ = 'categories'
 
+class CategoriesMetadata(Base):
+       Id = Column('id', Integer, primary_key=True)
+       CategoryId = Column('category_id', Integer, 
ForeignKey('categories.category_id'))
+       Checksum = Column('checksum', String(100))
+       Descriptions = Column('descriptions', Text)
+       __tablename__ = 'categories_metadata'
+
 class Repos(Base):
        RepoId = Column('repo_id', Integer, primary_key=True)
        Repo = Column('repo', String(100))

diff --git a/tbc/pym/sqlquerys.py b/tbc/pym/sqlquerys.py
index 9d7189d..a521dbc 100644
--- a/tbc/pym/sqlquerys.py
+++ b/tbc/pym/sqlquerys.py
@@ -8,7 +8,7 @@ from tbc.db_mapping import Configs, Logs, ConfigsMetaData, 
Jobs, BuildJobs, Pack
        Uses, ConfigsEmergeOptions, EmergeOptions, HiLight, BuildLogs, 
BuildLogsConfig, BuildJobsUse, BuildJobsRedo, \
        HiLightCss, BuildLogsHiLight, BuildLogsEmergeOptions, BuildLogsErrors, 
ErrorsInfo, EmergeInfo, BuildLogsUse, \
        BuildJobsEmergeOptions, EbuildsMetadata, EbuildsIUse, Restrictions, 
EbuildsRestrictions, EbuildsKeywords, \
-       Keywords, PackagesMetadata, Emails, PackagesEmails, Setups, 
BuildLogsRepomanQa
+       Keywords, PackagesMetadata, Emails, PackagesEmails, Setups, 
BuildLogsRepomanQa, CategoriesMetadata
 from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
 from sqlalchemy import and_, or_
 
@@ -323,10 +323,23 @@ def update_repo_db(session, repo_list):
                        session.add(Repos(Repo = repo))
                        session.commit()
 
-def update_categories_db(session, category):
-       if not get_category_info(session, category):
+def update_categories_db(session, category, categories_metadataDict):
+       CategoryInfo = get_category_info(session, category)
+       if not CategoryInfo:
                session.add(Categories(Category = category))
                session.commit()
+               CategoryInfo = get_category_info(session, category)
+       try:
+               CategoriesMetadataInfo = 
session.query(CategoriesMetadata).filter_by(CategoryId = 
CategoryInfo.CategoryId).one()
+       except NoResultFound as e:
+               NewCategoriesMetadata = CategoriesMetadata(CategoryId = 
CategoryInfo.CategoryId, Checksum = 
categories_metadataDict['metadata_xml_checksum'], Descriptions = 
categories_metadataDict['metadata_xml_descriptions'])
+               session.add(NewCategoriesMetadata)
+               session.commit()
+               return
+       if CategoriesMetadataInfo.Checksum != 
categories_metadataDict['metadata_xml_checksum']:
+               CategoriesMetadataInfo.Checksum = 
categories_metadataDict['metadata_xml_checksum']
+               CategoriesMetadataInfo.Descriptions = 
categories_metadataDict['metadata_xml_descriptions']
+               session.commit()
 
 def get_keyword_id(session, keyword):
        try:

diff --git a/tbc/pym/updatedb.py b/tbc/pym/updatedb.py
index 1cacc7d..b8be53f 100644
--- a/tbc/pym/updatedb.py
+++ b/tbc/pym/updatedb.py
@@ -7,6 +7,7 @@ import os
 import multiprocessing
 import time
 import portage
+from portage.xml.metadata import MetaDataXML
 from sqlalchemy.orm import scoped_session, sessionmaker
 from tbc.ConnectionManager import NewConnection
 from tbc.sqlquerys import add_logs, get_package_info, update_repo_db, \
@@ -36,6 +37,15 @@ def init_portage_settings(session, config_id):
        add_logs(session, log_msg, "info", config_id)
        return mysettings
 
+def get_categories_metadataDict(pkgdir):
+               # Make categories_metadataDict
+               categories_metadataDict = {}
+               pkg_md = MetaDataXML(pkgdir + "/metadata.xml", None)
+               metadata_xml_descriptions_tree = re.sub('\t', '', 
pkg_md.descriptions()[0])
+        categories_metadataDict['metadata_xml_descriptions'] = re.sub('\n', 
'', metadata_xml_descriptions_tree)
+               categories_metadataDict['metadata_xml_checksum'] =  
portage.checksum.sha256hash(pkgdir + "/metadata.xml")[0]
+               return categories_metadataDict
+
 def update_cpv_db_pool(mysettings, myportdb, cp, repo, tbc_settings, 
config_id):
        session_factory = sessionmaker(bind=NewConnection(tbc_settings))
        Session = scoped_session(session_factory)
@@ -48,7 +58,10 @@ def update_cpv_db_pool(mysettings, myportdb, cp, repo, 
tbc_settings, config_id):
        package = element[1]
 
        # update the categories table
-       update_categories_db(session2, categories)
+       repodir = self._myportdb.getRepositoryPath('gentoo')
+       pkgdir = repodir + "/" + categories
+       categories_metadataDict = get_categories_metadataDict(pkgdir)
+       update_categories_db(session2, categories, categories_metadataDict)
 
        # Check if we have the cp in the package table
        PackagesInfo = get_package_info(session2, categories, package, repo)

Reply via email to