Github Connector

github_connector
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/18.0/github_connector
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
COMMITTERS
COMMITTERSCarlos Lopez, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/interface-github
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES GitPython
PyGithub
pathspec
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES cloc
DESCRIPTION
DESCRIPTION
This module allows you to:

- Fetch into Odoo social information from Github (Organizations, Teams,
  Users)
- Fetch into Odoo Code structure information from Github (Repositories,
  Branches)
- Download source code from Github
- Analyze repository code from rules previously created

Code Analysis

Views touched (41)
XML IDNameModelTypeStatus
action_github_repository_branch_rule_info_report_graph github.repository.branch.rule.info.report graph New
action_github_repository_branch_rule_info_report_pivot github.repository.branch.rule.info.report pivot New
view_github_analysis_rule_form github.analysis.rule form New
view_github_analysis_rule_group_form github.analysis.rule.group form New
view_github_analysis_rule_group_tree github.analysis.rule.group list New
view_github_analysis_rule_tree github.analysis.rule list New
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization list New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch list New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository list New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner.kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner list New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository list New
view_github_team_search github.team search New
view_github_team_tree github.team list New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner field Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner field Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_load_github_model_form wizard.load.github.model form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (17)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_name Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (16)
  • button_update_from_github_full(self)
  • button_update_from_github_light(self)
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self)
    Create an object in Github through the API As this depends on each object, it should be overwritten in each implementation class
  • find_related_github_object(self, obj_id=None)
    @api.model
    Query Github API to find the related object This function should be overwritten in the child classes.
  • full_update(self)
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user clicks the 'Full Update' Button
  • get_action(self)
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that builds a map from Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, gh_data=None, data=None, extra_data=None)
    @api.model
    Search if an Odoo object related to the Github data exists in database. If it does, it returns the object. Otherwise, it creates the new object. :param gh_data: Github object the will be used to get/create Odoo record :param data: dict with github 'id' and 'url' keys (deprecated) :param extra_data: dict with extra data to be put into the Odoo record :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( data={'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_base_obj_for_creation(self)
    Should return the base object required to create the given item in Github. Usefull only if your model implements creation in github
  • get_github_connector(self)
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that maps data from a Github object to a dictionary of values ready to create an Odoo record
  • github_login_field(self)
  • process_timezone_fields(self, res)
  • update_from_github(self, child_update)
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (3)
  • group_id Many2one → github.analysis.rule.group
    comodel_name='github.analysis.rule.group' required=True string='Group'
  • name Char
    required=True
  • paths Text
    default='*' help='Define with pathspec especification' required=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' ondelete='cascade' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Doc.'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • scanned_files Integer
  • total_count Integer
    compute='_compute_total_count' store=True string='# Total'
Public methods (0)

No public methods.

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True
  • email Char
    readonly=True
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Image
    readonly=True
  • location Char
    readonly=True
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True
Public methods (11)
  • action_github_repository(self)
  • action_github_team(self)
  • action_res_partner(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • button_sync_team(self)
  • cron_update_organization_team(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (3)
  • name Char
    required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True
Public methods (0)

No public methods.

New fields (13)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • color Integer
    compute='_compute_ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization and those set here.' string='Inhibit inherited rules'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'."
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True
Public methods (10)
  • action_github_repository_branch(self)
  • action_github_team_repository_from_repository(self)
  • button_sync_branch(self)
  • create_in_github(self)
    Create an object in Github through the API
  • cron_update_branch_list(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • analysis_rule_info_ids One2many → github.repository.branch.rule.info
    comodel_name='github.repository.branch.rule.info' inverse_name='repository_branch_id' string='Analysis Rules (info)'
  • ci_url Char
    compute='_compute_ci_url' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True
  • coverage_url Char
    compute='_compute_coverage_url' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization, repository and those set here.' string='Inhibit inherited rules'
  • last_analyze_date Datetime
  • last_download_date Datetime
  • local_path Char
    compute='_compute_local_path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE
Public methods (7)
  • analyze_code_one(self)
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
  • button_download_code(self)
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model
  • set_analysis_rule_info(self)
    Do the cloc command only once and perform the analysis process.

New fields (1)
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' ondelete='cascade' string='Repository Branch'
Public methods (0)

No public methods.

New fields (10)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Documentation'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' string='Organization serie'
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' string='Repository Branch'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' string='Repository'
  • scanned_files Integer
  • total_count Integer
    string='# Total'
Public methods (1)
  • init(self)

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (10)
  • action_github_team_partner_from_team(self)
  • action_github_team_repository_from_team(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • create_in_github(self)
    Create an object in Github through the API
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (5)
  • context_search_default_partner_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • context_search_default_repository_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (5)
  • action_github_organization(self)
  • action_github_team_partner_from_partner(self)
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_name', '!=', False)]" string='Team Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Team Repositories'
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=[('organization', 'Organization'), ('repository', 'Repository'), ('user', 'User')] string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/17.0/github_connector
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
COMMITTERS
COMMITTERSVíctor Martínez, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/interface-github
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES GitPython
PyGithub
pathspec
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES cloc
DESCRIPTION
DESCRIPTION
This module allows you to:

- Fetch into Odoo social information from Github (Organizations, Teams,
  Users)
- Fetch into Odoo Code structure information from Github (Repositories,
  Branches)
- Download source code from Github
- Analyze repository code from rules previously created

Code Analysis

Views touched (41)
XML IDNameModelTypeStatus
action_github_repository_branch_rule_info_report_graph github.repository.branch.rule.info.report graph New
action_github_repository_branch_rule_info_report_pivot github.repository.branch.rule.info.report pivot New
view_github_analysis_rule_form github.analysis.rule form New
view_github_analysis_rule_group_form github.analysis.rule.group form New
view_github_analysis_rule_group_tree github.analysis.rule.group tree New
view_github_analysis_rule_tree github.analysis.rule tree New
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner.kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner field Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner field Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_load_github_model_form wizard.load.github.model form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (17)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_name Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (16)
  • button_update_from_github_full(self)
  • button_update_from_github_light(self)
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self)
    Create an object in Github through the API As this depends on each object, it should be overwritten in each implementation class
  • find_related_github_object(self, obj_id=None)
    @api.model
    Query Github API to find the related object This function should be overwritten in the child classes.
  • full_update(self)
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user clicks the 'Full Update' Button
  • get_action(self)
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that builds a map from Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, gh_data=None, data=None, extra_data=None)
    @api.model
    Search if an Odoo object related to the Github data exists in database. If it does, it returns the object. Otherwise, it creates the new object. :param gh_data: Github object the will be used to get/create Odoo record :param data: dict with github 'id' and 'url' keys (deprecated) :param extra_data: dict with extra data to be put into the Odoo record :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( data={'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_base_obj_for_creation(self)
    Should return the base object required to create the given item in Github. Usefull only if your model implements creation in github
  • get_github_connector(self)
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that maps data from a Github object to a dictionary of values ready to create an Odoo record
  • github_login_field(self)
  • process_timezone_fields(self, res)
  • update_from_github(self, child_update)
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (3)
  • group_id Many2one → github.analysis.rule.group
    comodel_name='github.analysis.rule.group' required=True string='Group'
  • name Char
    required=True
  • paths Text
    default='*' help='Define with pathspec especification' required=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' ondelete='cascade' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Doc.'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • scanned_files Integer
  • total_count Integer
    compute='_compute_total_count' store=True string='# Total'
Public methods (0)

No public methods.

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True
  • email Char
    readonly=True
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Image
    readonly=True
  • location Char
    readonly=True
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True
Public methods (11)
  • action_github_repository(self)
  • action_github_team(self)
  • action_res_partner(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • button_sync_team(self)
  • cron_update_organization_team(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (3)
  • name Char
    required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True
Public methods (0)

No public methods.

New fields (13)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • color Integer
    compute='_compute_ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization and those set here.' string='Inhibit inherited rules'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'."
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True
Public methods (10)
  • action_github_repository_branch(self)
  • action_github_team_repository_from_repository(self)
  • button_sync_branch(self)
  • create_in_github(self)
    Create an object in Github through the API
  • cron_update_branch_list(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • analysis_rule_info_ids One2many → github.repository.branch.rule.info
    comodel_name='github.repository.branch.rule.info' inverse_name='repository_branch_id' string='Analysis Rules (info)'
  • ci_url Char
    compute='_compute_ci_url' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True
  • coverage_url Char
    compute='_compute_coverage_url' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization, repository and those set here.' string='Inhibit inherited rules'
  • last_analyze_date Datetime
  • last_download_date Datetime
  • local_path Char
    compute='_compute_local_path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE
Public methods (7)
  • analyze_code_one(self)
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
  • button_download_code(self)
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model
  • set_analysis_rule_info(self)
    Do the cloc command only once and perform the analysis process.

New fields (1)
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' ondelete='cascade' string='Repository Branch'
Public methods (0)

No public methods.

New fields (10)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Documentation'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' string='Organization serie'
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' string='Repository Branch'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' string='Repository'
  • scanned_files Integer
  • total_count Integer
    string='# Total'
Public methods (1)
  • init(self)

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (10)
  • action_github_team_partner_from_team(self)
  • action_github_team_repository_from_team(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • create_in_github(self)
    Create an object in Github through the API
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (5)
  • context_search_default_partner_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • context_search_default_repository_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (5)
  • action_github_organization(self)
  • action_github_team_partner_from_partner(self)
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_name', '!=', False)]" string='Team Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Team Repositories'
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=[('organization', 'Organization'), ('repository', 'Repository'), ('user', 'User')] string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/16.0/github_connector
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
COMMITTERS
COMMITTERSWeblate, oca-ci, Carolina Fernandez
WEBSITE
WEBSITEhttps://github.com/OCA/interface-github
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:54:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES GitPython
PyGithub
pathspec
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES cloc
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (41)
XML IDNameModelTypeStatus
action_github_repository_branch_rule_info_report_graph github.repository.branch.rule.info.report graph New
action_github_repository_branch_rule_info_report_pivot github.repository.branch.rule.info.report pivot New
view_github_analysis_rule_form github.analysis.rule form New
view_github_analysis_rule_group_form github.analysis.rule.group form New
view_github_analysis_rule_group_tree github.analysis.rule.group tree New
view_github_analysis_rule_tree github.analysis.rule tree New
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner.kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner field Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner field Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_load_github_model_form wizard.load.github.model form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (17)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_name Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (16)
  • button_update_from_github_full(self)
  • button_update_from_github_light(self)
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self)
    Create an object in Github through the API As this depends on each object, it should be overwritten in each implementation class
  • find_related_github_object(self, obj_id=None)
    @api.model
    Query Github API to find the related object This function should be overwritten in the child classes.
  • full_update(self)
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user clicks the 'Full Update' Button
  • get_action(self)
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that builds a map from Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, gh_data=None, data=None, extra_data=None)
    @api.model
    Search if an Odoo object related to the Github data exists in database. If it does, it returns the object. Otherwise, it creates the new object. :param gh_data: Github object the will be used to get/create Odoo record :param data: dict with github 'id' and 'url' keys (deprecated) :param extra_data: dict with extra data to be put into the Odoo record :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( data={'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_base_obj_for_creation(self)
    Should return the base object required to create the given item in Github. Usefull only if your model implements creation in github
  • get_github_connector(self)
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that maps data from a Github object to a dictionary of values ready to create an Odoo record
  • github_login_field(self)
  • process_timezone_fields(self, res)
  • update_from_github(self, child_update)
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (3)
  • group_id Many2one → github.analysis.rule.group
    comodel_name='github.analysis.rule.group' required=True string='Group'
  • name Char
    required=True
  • paths Text
    default='*' help='Define with pathspec especification' required=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' ondelete='cascade' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Doc.'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • scanned_files Integer
  • total_count Integer
    compute='_compute_total_count' store=True string='# Total'
Public methods (0)

No public methods.

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True
  • email Char
    readonly=True
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Image
    readonly=True
  • location Char
    readonly=True
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True
Public methods (11)
  • action_github_repository(self)
  • action_github_team(self)
  • action_res_partner(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • button_sync_team(self)
  • cron_update_organization_team(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (3)
  • name Char
    required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True
Public methods (0)

No public methods.

New fields (13)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • color Integer
    compute='_compute_ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization and those set here.' string='Inhibit inherited rules'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'."
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True
Public methods (10)
  • action_github_repository_branch(self)
  • action_github_team_repository_from_repository(self)
  • button_sync_branch(self)
  • create_in_github(self)
    Create an object in Github through the API
  • cron_update_branch_list(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • analysis_rule_info_ids One2many → github.repository.branch.rule.info
    comodel_name='github.repository.branch.rule.info' inverse_name='repository_branch_id' string='Analysis Rules (info)'
  • ci_url Char
    compute='_compute_ci_url' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True
  • coverage_url Char
    compute='_compute_coverage_url' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization, repository and those set here.' string='Inhibit inherited rules'
  • last_analyze_date Datetime
  • last_download_date Datetime
  • local_path Char
    compute='_compute_local_path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE
Public methods (7)
  • analyze_code_one(self)
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
  • button_download_code(self)
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model
  • set_analysis_rule_info(self)
    Do the cloc command only once and perform the analysis process.

New fields (1)
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' ondelete='cascade' string='Repository Branch'
Public methods (0)

No public methods.

New fields (10)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Documentation'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' string='Organization serie'
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' string='Repository Branch'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' string='Repository'
  • scanned_files Integer
  • total_count Integer
    string='# Total'
Public methods (1)
  • init(self)

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (10)
  • action_github_team_partner_from_team(self)
  • action_github_team_repository_from_team(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • create_in_github(self)
    Create an object in Github through the API
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (5)
  • context_search_default_partner_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • context_search_default_repository_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (5)
  • action_github_organization(self)
  • action_github_team_partner_from_partner(self)
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_name', '!=', False)]" string='Team Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Team Repositories'
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=[('organization', 'Organization'), ('repository', 'Repository'), ('user', 'User')] string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/15.0/github_connector
VERSION
VERSION 2.0.1
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/interface-github
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:44
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES GitPython
PyGithub
pathspec
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES cloc
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (41)
XML IDNameModelTypeStatus
action_github_repository_branch_rule_info_report_graph github.repository.branch.rule.info.report graph New
action_github_repository_branch_rule_info_report_pivot github.repository.branch.rule.info.report pivot New
view_github_analysis_rule_form github.analysis.rule form New
view_github_analysis_rule_group_form github.analysis.rule.group form New
view_github_analysis_rule_group_tree github.analysis.rule.group tree New
view_github_analysis_rule_tree github.analysis.rule tree New
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner.kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner field Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner field Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_load_github_model_form wizard.load.github.model form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (17)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_name Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (16)
  • button_update_from_github_full(self)
  • button_update_from_github_light(self)
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self)
    Create an object in Github through the API As this depends on each object, it should be overwritten in each implementation class
  • find_related_github_object(self, obj_id=None)
    @api.model
    Query Github API to find the related object This function should be overwritten in the child classes.
  • full_update(self)
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user clicks the 'Full Update' Button
  • get_action(self)
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that builds a map from Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, gh_data=None, data=None, extra_data=None)
    @api.model
    Search if an Odoo object related to the Github data exists in database. If it does, it returns the object. Otherwise, it creates the new object. :param gh_data: Github object the will be used to get/create Odoo record :param data: dict with github 'id' and 'url' keys (deprecated) :param extra_data: dict with extra data to be put into the Odoo record :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( data={'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_base_obj_for_creation(self)
    Should return the base object required to create the given item in Github. Usefull only if your model implements creation in github
  • get_github_connector(self)
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that maps data from a Github object to a dictionary of values ready to create an Odoo record
  • github_login_field(self)
  • process_timezone_fields(self, res)
  • update_from_github(self, child_update)
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (3)
  • group_id Many2one → github.analysis.rule.group
    comodel_name='github.analysis.rule.group' required=True string='Group'
  • name Char
    required=True
  • paths Text
    default='*' help='Define with pathspec especification' required=True
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True
Public methods (0)

No public methods.

New fields (7)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' ondelete='cascade' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Doc.'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • scanned_files Integer
  • total_count Integer
    compute='_compute_total_count' store=True string='# Total'
Public methods (0)

No public methods.

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True
  • email Char
    readonly=True
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Image
    readonly=True
  • location Char
    readonly=True
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True
Public methods (11)
  • action_github_repository(self)
  • action_github_team(self)
  • action_res_partner(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • button_sync_team(self)
  • cron_update_organization_team(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (3)
  • name Char
    required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True
Public methods (0)

No public methods.

New fields (13)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • color Integer
    compute='_compute_ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization and those set here.' string='Inhibit inherited rules'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'."
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True
Public methods (10)
  • action_github_repository_branch(self)
  • action_github_team_repository_from_repository(self)
  • button_sync_branch(self)
  • create_in_github(self)
    Create an object in Github through the API
  • cron_update_branch_list(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • analysis_rule_info_ids One2many → github.repository.branch.rule.info
    comodel_name='github.repository.branch.rule.info' inverse_name='repository_branch_id' string='Analysis Rules (info)'
  • ci_url Char
    compute='_compute_ci_url' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True
  • coverage_url Char
    compute='_compute_coverage_url' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • inhibit_inherited_rules Boolean
    default=False help='If checked, the analysis rules to be used will be only those set here.\n If unchecked, the analysis rules to be used will be those set in the organization, repository and those set here.' string='Inhibit inherited rules'
  • last_analyze_date Datetime
  • last_download_date Datetime
  • local_path Char
    compute='_compute_local_path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE
Public methods (7)
  • analyze_code_one(self)
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
  • button_download_code(self)
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model
  • set_analysis_rule_info(self)
    Do the cloc command only once and perform the analysis process.

New fields (1)
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' ondelete='cascade' string='Repository Branch'
Public methods (0)

No public methods.

New fields (10)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Documentation'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' string='Organization serie'
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' string='Repository Branch'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' string='Repository'
  • scanned_files Integer
  • total_count Integer
    string='# Total'
Public methods (1)
  • init(self)

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True
  • description Char
    readonly=True
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (10)
  • action_github_team_partner_from_team(self)
  • action_github_team_repository_from_team(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • create_in_github(self)
    Create an object in Github through the API
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (5)
  • context_search_default_partner_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • context_search_default_repository_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (5)
  • action_github_organization(self)
  • action_github_team_partner_from_partner(self)
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_name', '!=', False)]" string='Team Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Team Repositories'
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=[('organization', 'Organization'), ('repository', 'Repository'), ('user', 'User')] string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/14.0/github_connector
VERSION
VERSION 2.3.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
COMMITTERS
COMMITTERSGitHub, Miquel Raïch, Víctor Martínez, Ernesto Tejeda, João Marques, oca-travis, Weblate, OCA-git-bot, Simone Rubino, Giovanni, oca-git-bot, diga
WEBSITE
WEBSITEhttps://github.com/OCA/interface-github
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES GitPython
PyGithub
pathspec
pygount
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (41)
XML IDNameModelTypeStatus
action_github_repository_branch_rule_info_report_graph github.repository.branch.rule.info.report graph New
action_github_repository_branch_rule_info_report_pivot github.repository.branch.rule.info.report pivot New
view_github_analysis_rule_form github.analysis.rule form New
view_github_analysis_rule_group_form github.analysis.rule.group form New
view_github_analysis_rule_group_tree github.analysis.rule.group tree New
view_github_analysis_rule_tree github.analysis.rule tree New
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner.kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner field Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner field Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_load_github_model_form wizard.load.github.model form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (17)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_name Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (16)
  • button_update_from_github_full(self)
  • button_update_from_github_light(self)
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self)
    Create an object in Github through the API As this depends on each object, it should be overwritten in each implementation class
  • find_related_github_object(self, id=None)
    @api.model
    Query Github API to find the related object This function should be overwritten in the child classes.
  • full_update(self)
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user clicks the 'Full Update' Button
  • get_action(self)
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that builds a map from Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, gh_data=None, data=None, extra_data=None)
    @api.model
    Search if an Odoo object related to the Github data exists in database. If it does, it returns the object. Otherwise, it creates the new object. :param gh_data: Github object the will be used to get/create Odoo record :param data: dict with github 'id' and 'url' keys (deprecated) :param extra_data: dict with extra data to be put into the Odoo record :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( data={'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_base_obj_for_creation(self)
    Should return the base object required to create the given item in Github. Usefull only if your model implements creation in github
  • get_github_connector(self)
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that maps data from a Github object to a dictionary of values ready to create an Odoo record
  • github_login_field(self)
  • process_timezone_fields(self, res)
  • update_from_github(self, child_update)
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (3)
  • group_id Many2one → github.analysis.rule.group
    comodel_name='github.analysis.rule.group' required=True string='Group'
  • name Char
    required=True string='Name'
  • paths Text
    default='*' help='Define with pathspec especification' required=True string='Paths'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (8)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Doc.'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • scanned_files Integer
    string='Scanned files'
  • string_count Integer
    string='# String'
  • total_count Integer
    compute='_compute_total_count' store=True string='# Total'
Public methods (0)

No public methods.

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True string='Description'
  • email Char
    readonly=True string='Email'
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Image
    readonly=True string='Image'
  • location Char
    readonly=True string='Location'
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True string='Website URL'
Public methods (11)
  • action_github_repository(self)
  • action_github_team(self)
  • action_res_partner(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • button_sync_team(self)
  • cron_update_organization_team(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (3)
  • name Char
    required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True string='Sequence'
Public methods (0)

No public methods.

New fields (12)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • color Integer
    compute='_compute_ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'." string='Is Ignored'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True string='Website'
Public methods (10)
  • action_github_repository_branch(self)
  • action_github_team_repository_from_repository(self)
  • button_sync_branch(self)
  • create_in_github(self)
    Create an object in Github through the API
  • cron_update_branch_list(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (17)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • analysis_rule_info_ids One2many → github.repository.branch.rule.info
    comodel_name='github.repository.branch.rule.info' inverse_name='repository_branch_id' string='Analysis Rules (info)'
  • ci_url Char
    compute='_compute_ci_url' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True string='Complete Name'
  • coverage_url Char
    compute='_compute_coverage_url' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • last_analyze_date Datetime
    string='Last Analyze Date'
  • last_download_date Datetime
    string='Last Download Date'
  • local_path Char
    compute='_compute_local_path' string='Local Path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE string='State'
Public methods (8)
  • analyze_code_one(self)
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
  • button_download_code(self)
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model
  • find_related_github_object(self, obj_id=None)
  • set_analysis_rule_info(self)

New fields (1)
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' ondelete='cascade' string='Repository Branch'
Public methods (0)

No public methods.

New fields (11)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Documentation'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' string='Organization serie'
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' string='Repository Branch'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' string='Repository'
  • scanned_files Integer
    string='Scanned files'
  • string_count Integer
    string='# String'
  • total_count Integer
    string='# Total'
Public methods (1)
  • init(self)

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION string='Privacy'
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (10)
  • action_github_team_partner_from_team(self)
  • action_github_team_repository_from_team(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • create_in_github(self)
    Create an object in Github through the API
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_base_obj_for_creation(self)
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (5)
  • context_search_default_partner_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION string='Role'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • context_search_default_repository_id Integer
    compute='_compute_context_search_default'
  • context_search_default_team_id Integer
    compute='_compute_context_search_default'
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION string='Permission'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (5)
  • action_github_organization(self)
  • action_github_team_partner_from_partner(self)
  • find_related_github_object(self, obj_id=None)
    Query Github API to find the related object
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, gh_data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_name', '!=', False)]" string='Team Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Team Repositories'
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=[('organization', 'Organization'), ('repository', 'Repository'), ('user', 'User')] string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/13.0/github_connector
VERSION
VERSION 4.0.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Alexandre Díaz, Víctor Martínez, Ernesto Tejeda, João Marques, oca-travis, OCA-git-bot, Carlos Roca
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:21
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES GitPython
pathspec
pygount
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (41)
XML IDNameModelTypeStatus
action_github_repository_branch_rule_info_report_graph github.repository.branch.rule.info.report graph New
action_github_repository_branch_rule_info_report_pivot github.repository.branch.rule.info.report pivot New
view_github_analysis_rule_form github.analysis.rule form New
view_github_analysis_rule_group_form github.analysis.rule.group form New
view_github_analysis_rule_group_tree github.analysis.rule.group tree New
view_github_analysis_rule_tree github.analysis.rule tree New
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner.kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner field Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner field Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_load_github_model_form wizard.load.github.model form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (17)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_login Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (17)
  • button_update_from_github_full(self)
  • button_update_from_github_light(self)
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self, model_obj)
  • full_update(self)
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user click on 'Full Update' Button
  • get_action(self)
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that map Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, data, extra_data=None)
    @api.model
    Search if the odoo object exists in database. If yes, returns the object. Otherwise, creates the new object. :param data: dict with github 'id' and 'url' keys :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( {'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_args_for_creation(self)
    Should Return list of arguments required to create the given item in Github. Usefull only if your model implement creation in github
  • get_github_connector(self, github_type)
  • get_github_data_from_odoo(self)
    Prepare function that map Odoo data to create in Github. Usefull only if your model implement creation in github
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that map Github data to create in Odoo
  • github_login_field(self)
  • github_type(self)
  • process_timezone_fields(self, res)
  • update_from_github(self, child_update)
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (3)
  • group_id Many2one → github.analysis.rule.group
    comodel_name='github.analysis.rule.group' required=True string='Group'
  • name Char
    required=True string='Name'
  • paths Text
    default='*' help='Define with pathspec especification' required=True string='Paths'
Public methods (0)

No public methods.

New fields (1)
  • name Char
    required=True string='Name'
Public methods (0)

No public methods.

New fields (8)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Doc.'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • scanned_files Integer
    string='Scanned files'
  • string_count Integer
    string='# String'
  • total_count Integer
    compute='_compute_total_count' store=True string='# Total'
Public methods (0)

No public methods.

New fields (18)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True string='Description'
  • email Char
    readonly=True string='Email'
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Image
    readonly=True string='Image'
  • location Char
    readonly=True string='Location'
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' ondelete='cascade' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True string='Website URL'
Public methods (10)
  • action_github_repository(self)
  • action_github_team(self)
  • action_res_partner(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • button_sync_team(self)
  • cron_update_organization_team(self)
    @api.model
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (3)
  • name Char
    required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True string='Sequence'
Public methods (0)

No public methods.

New fields (12)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • color Integer
    compute='_compute_ignore' multi='ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'." multi='ignore' string='Is Ignored'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True string='Website'
Public methods (9)
  • action_github_repository_branch(self)
  • action_github_team_repository_from_repository(self)
  • button_sync_branch(self)
  • cron_update_branch_list(self)
    @api.model
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_args_for_creation(self)
  • get_github_data_from_odoo(self)
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (17)
  • analysis_rule_ids Many2many → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rules'
  • analysis_rule_info_ids One2many → github.repository.branch.rule.info
    comodel_name='github.repository.branch.rule.info' inverse_name='repository_branch_id' string='Analysis Rules (info)'
  • ci_url Char
    compute='_compute_ci' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True string='Complete Name'
  • coverage_url Char
    compute='_compute_coverage' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • last_analyze_date Datetime
    string='Last Analyze Date'
  • last_download_date Datetime
    string='Last Download Date'
  • local_path Char
    compute='_compute_local_path' string='Local Path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE string='State'
Public methods (7)
  • analyze_code_one(self)
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
  • button_download_code(self)
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model
  • set_analysis_rule_info(self)

New fields (1)
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' ondelete='cascade' string='Repository Branch'
Public methods (0)

No public methods.

New fields (11)
  • analysis_rule_id Many2one → github.analysis.rule
    comodel_name='github.analysis.rule' string='Analysis Rule'
  • code_count Integer
    string='# Code'
  • documentation_count Integer
    string='# Documentation'
  • empty_count Integer
    string='# Empty'
  • group_id Many2one
    readonly=True related='analysis_rule_id.group_id' string='Group'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' string='Organization serie'
  • repository_branch_id Many2one → github.repository.branch
    comodel_name='github.repository.branch' string='Repository Branch'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' string='Repository'
  • scanned_files Integer
    string='Scanned files'
  • string_count Integer
    string='# String'
  • total_count Integer
    string='# Total'
Public methods (1)
  • init(self)

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION string='Privacy'
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (9)
  • action_github_team_partner_from_team(self)
  • action_github_team_repository_from_team(self)
  • button_sync_member(self)
  • button_sync_repository(self)
  • full_update(self)
  • get_conversion_dict(self)
    @api.model
  • get_github_args_for_creation(self)
  • get_github_data_from_odoo(self)
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (3)
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION string='Role'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (3)
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION string='Permission'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_ids Many2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (4)
  • action_github_organization(self)
  • action_github_team_partner_from_partner(self)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_login', '!=', False)]" string='Team Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Team Repositories'
Public methods (2)
  • button_create_in_github(self)
  • get_github_data_from_odoo(self)

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=_GITHUB_TYPE string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/12.0/github_connector
VERSION
VERSION 2.2.2
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Akretion, GRAP
COMMITTERS
COMMITTERSPedro M. Baeza, Hugo Adan, Víctor Martínez, Jordi Riera, Moises Lopez - https://www.vauxoo.com/, OCA-git-bot, Cristina Martin, Carlos Roca, Manuel Gómez
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES git
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (38)
XML IDNameModelTypeStatus
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner field Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner field Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_download_analyze_branch_form Download and Analyze Source Code wizard.download.analyze.branch form New
view_wizard_load_github_model_form wizard.load.github.model form New
view_wizard_update_branch_list_form wizard.update.branch.list form New
view_wizard_update_from_github_form wizard.update.from.github form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (15)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True oldname='github_id' readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_login Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (16)
  • button_update_from_github_full(self)
    @api.multi
  • button_update_from_github_light(self)
    @api.multi
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self, model_obj)
    @api.multi
  • full_update(self)
    @api.multi
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user click on 'Full Update' Button
  • get_action(self)
    @api.multi
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that map Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, data, extra_data=None)
    @api.model
    Search if the odoo object exists in database. If yes, returns the object. Otherwise, creates the new object. :param data: dict with github 'id' and 'url' keys :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( {'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_args_for_creation(self)
    @api.multi
    Should Return list of arguments required to create the given item in Github. Usefull only if your model implement creation in github
  • get_github_connector(self, github_type)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
    Prepare function that map Odoo data to create in Github. Usefull only if your model implement creation in github
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that map Github data to create in Odoo
  • github_login_field(self)
  • github_type(self)
  • update_from_github(self, child_update)
    @api.multi
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (17)
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True string='Description'
  • email Char
    readonly=True string='Email'
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Binary
    readonly=True string='Image'
  • location Char
    readonly=True string='Location'
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' ondelete='cascade' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True string='Website URL'
Public methods (7)
  • button_sync_member(self)
    @api.multi
  • button_sync_repository(self)
    @api.multi
  • button_sync_team(self)
    @api.multi
  • cron_update_organization_team(self)
    @api.model
  • full_update(self)
    @api.multi
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (3)
  • name Char
    required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True string='Sequence'
Public methods (0)

No public methods.

New fields (11)
  • color Integer
    compute='_compute_ignore' multi='ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'." multi='ignore' string='Is Ignored'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True string='Website'
Public methods (7)
  • button_sync_branch(self)
    @api.multi
  • cron_update_branch_list(self)
    @api.model
  • full_update(self)
    @api.multi
  • get_conversion_dict(self)
    @api.model
  • get_github_args_for_creation(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (15)
  • ci_url Char
    compute='_compute_ci' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True string='Complete Name'
  • coverage_url Char
    compute='_compute_coverage' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • last_analyze_date Datetime
    string='Last Analyze Date'
  • last_download_date Datetime
    string='Last Download Date'
  • local_path Char
    compute='_compute_local_path' string='Local Path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE string='State'
Public methods (7)
  • analyze_code_one(self)
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
    @api.multi
  • button_download_code(self)
    @api.multi
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model
  • get_github_login(self)
    Get credentials for private repos.

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION string='Privacy'
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (7)
  • button_sync_member(self)
    @api.multi
  • button_sync_repository(self)
    @api.multi
  • full_update(self)
    @api.multi
  • get_conversion_dict(self)
    @api.model
  • get_github_args_for_creation(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (4)
  • image_small Binary
    readonly=True related='partner_id.image_small' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION string='Role'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (3)
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION string='Permission'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_ids Many2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (2)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_login', '!=', False)]" string='Team Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Team Repositories'
Public methods (2)
  • button_create_in_github(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi

New fields (2)
  • analyze_source_code Boolean
    default=True string='Analyze Source Code'
  • download_source_code Boolean
    default=True string='Download Source Code'
Public methods (1)
  • apply(self)
    @api.multi

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=_GITHUB_TYPE string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • button_update_branch_list(self)
    @api.multi

New fields (1)
  • child_update Boolean
    default=False string='Update Child Objects'
Public methods (1)
  • button_update_from_github(self)
    @api.multi
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/11.0/github_connector
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, GRAP, Sylvain LE GAL
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, GRAP, Sylvain LE GAL
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Hugo Adan, Stéphane Bidoul (ACSONE), cubells, Eric @ Elico Corp
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:24:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES git
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (38)
XML IDNameModelTypeStatus
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_download_analyze_branch_form Download and Analyze Source Code wizard.download.analyze.branch form New
view_wizard_load_github_model_form wizard.load.github.model form New
view_wizard_update_branch_list_form wizard.update.branch.list form New
view_wizard_update_from_github_form wizard.update.from.github form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (15)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True oldname='github_id' readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_login Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (16)
  • button_update_from_github_full(self)
    @api.multi
  • button_update_from_github_light(self)
    @api.multi
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self, model_obj)
    @api.multi
  • full_update(self)
    @api.multi
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user click on 'Full Update' Button
  • get_action(self)
    @api.multi
  • get_base64_image_from_github(self, url)
  • get_conversion_dict(self)
    @api.model
    Prepare function that map Github fields to Odoo fields :return: Dictionary {odoo_field: github_field}
  • get_from_id_or_create(self, data, extra_data=None)
    @api.model
    Search if the odoo object exists in database. If yes, returns the object. Otherwise, creates the new object. :param data: dict with github 'id' and 'url' keys :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( {'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_args_for_creation(self)
    @api.multi
    Should Return list of arguments required to create the given item in Github. Usefull only if your model implement creation in github
  • get_github_connector(self, github_type)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
    Prepare function that map Odoo data to create in Github. Usefull only if your model implement creation in github
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that map Github data to create in Odoo
  • github_login_field(self)
  • github_type(self)
  • update_from_github(self, child_update)
    @api.multi
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (17)
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True string='Description'
  • email Char
    readonly=True string='Email'
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\npurchase-workflow\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Binary
    readonly=True string='Image'
  • location Char
    readonly=True string='Location'
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' ondelete='cascade' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True string='Website URL'
Public methods (7)
  • button_sync_member(self)
    @api.multi
  • button_sync_repository(self)
    @api.multi
  • button_sync_team(self)
    @api.multi
  • cron_update_organization_team(self)
    @api.model
  • full_update(self)
    @api.multi
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (3)
  • name Char
    required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True string='Sequence'
Public methods (0)

No public methods.

New fields (11)
  • color Integer
    compute='_compute_ignore' multi='ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source will this way not be downloaded and analyzed. To ignore a repository, go to the organization and add the file 'Ignored Repositories'." multi='ignore' string='Is Ignored'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True string='Website'
Public methods (7)
  • button_sync_branch(self)
    @api.multi
  • cron_update_branch_list(self)
    @api.model
  • full_update(self)
    @api.multi
  • get_conversion_dict(self)
    @api.model
  • get_github_args_for_creation(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (15)
  • ci_url Char
    compute='_compute_ci' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True string='Complete Name'
  • coverage_url Char
    compute='_compute_coverage' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • last_analyze_date Datetime
    string='Last Analyze Date'
  • last_download_date Datetime
    string='Last Download Date'
  • local_path Char
    compute='_compute_local_path' string='Local Path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE string='State'
Public methods (6)
  • analyze_code_one(self, branch)
    @api.model
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
    @api.multi
  • button_download_code(self)
    @api.multi
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION string='Privacy'
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (7)
  • button_sync_member(self)
    @api.multi
  • button_sync_repository(self)
    @api.multi
  • full_update(self)
    @api.multi
  • get_conversion_dict(self)
    @api.model
  • get_github_args_for_creation(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (4)
  • image_small Binary
    readonly=True related='partner_id.image_small' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION string='Role'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (3)
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION string='Permission'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (5)
  • github_team_ids Many2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if this account is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (2)
  • get_conversion_dict(self)
    @api.model
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_login', '!=', False)]" string='Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Repositories'
Public methods (2)
  • button_create_in_github(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi

New fields (2)
  • analyze_source_code Boolean
    default=True string='Analyze Source Code'
  • download_source_code Boolean
    default=True string='Download Source Code'
Public methods (1)
  • apply(self)
    @api.multi

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=_GITHUB_TYPE string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • button_update_branch_list(self)
    @api.multi

New fields (1)
  • child_update Boolean
    default=False string='Update Child Objects'
Public methods (1)
  • button_update_from_github(self)
    @api.multi
REPOSITORY
REPOSITORYOCA/interface-git
GIT
GIThttps://github.com/OCA/interface-git.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/interface-git/tree/10.0/github_connector
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYConnector
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion, GRAP, Sylvain LE GAL
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion, GRAP, Sylvain LE GAL
COMMITTERS
COMMITTERSHolger Brunn, Sylvain LE GAL, GitHub, Stéphane Bidoul (ACSONE), Roel Adriaans, Moises Lopez - https://www.vauxoo.com/
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:03
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
    - web_kanban
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES git
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (38)
XML IDNameModelTypeStatus
view_github_branch_by_serie_graph github.repository.branch graph New
view_github_organization_form github.organization form New
view_github_organization_kanban github.organization kanban New
view_github_organization_search github.organization search New
view_github_organization_tree github.organization tree New
view_github_repository_branch_form github.repository.branch form New
view_github_repository_branch_kanban github.repository.branch kanban New
view_github_repository_branch_search github.repository.branch search New
view_github_repository_branch_tree github.repository.branch tree New
view_github_repository_form github.repository form New
view_github_repository_kanban github.repository kanban New
view_github_repository_search github.repository search New
view_github_repository_tree github.repository tree New
view_github_size_by_serie_graph github.repository.branch graph New
view_github_team_form github.team form New
view_github_team_kanban github.team kanban New
view_github_team_partner_form github.team.partner form New
view_github_team_partner_from_partner_kanban github.team.partner kanban New
view_github_team_partner_from_team_kanban github.team.partner kanban New
view_github_team_partner_search github.team.partner search New
view_github_team_partner_tree github.team.partner tree New
view_github_team_permission_form github.team.repository form New
view_github_team_repository_from_repository_kanban github.team.repository kanban New
view_github_team_repository_from_team_kanban github.team.repository kanban New
view_github_team_repository_search github.team.repository search New
view_github_team_repository_tree github.team.repository tree New
view_github_team_search github.team search New
view_github_team_tree github.team tree New
view_res_partner_form res.partner div Inherits base.view_partner_form
view_res_partner_kanban res.partner Inherits base.res_partner_kanban_view
view_res_partner_search res.partner filter Inherits base.view_res_partner_filter
view_res_partner_tree res.partner Inherits base.view_partner_tree
view_wizard_create_repository_form wizard.create.repository form New
view_wizard_create_team_form wizard.create.team form New
view_wizard_download_analyze_branch_form Download and Analyze Source Code wizard.download.analyze.branch form New
view_wizard_load_github_model_form wizard.load.github.model form New
view_wizard_update_branch_list_form wizard.update.branch.list form New
view_wizard_update_from_github_form wizard.update.from.github form New
HTTP endpoints (0)

No HTTP endpoints found for this module.

Models touched (16)

New fields (6)
  • github_create_date Datetime
    readonly=True string='Create Date on Github'
  • github_id_external Char
    index=True oldname='github_id' readonly=True string='Github Id'
  • github_last_sync_date Datetime
    readonly=True string='Last Sync Date with Github'
  • github_login Char
    index=True readonly=True string='Github Technical Name'
  • github_url Char
    readonly=True string='Github URL'
  • github_write_date Datetime
    readonly=True string='Last Write Date on Github'
Public methods (15)
  • button_update_from_github_full(self)
    @api.multi
  • button_update_from_github_light(self)
    @api.multi
  • create_from_name(self, name)
    @api.model
    Call Github API, using a URL using github name. Load data and Create Odoo object accordingly, if the odoo object doesn't exist. :param name: the github name to load :return: The created object :Example: >>> self.env['github_organization'].create_from_name('OCA') >>> self.env['github_repository'].create_from_name('OCA/web')
  • create_in_github(self, model_obj)
    @api.multi
  • full_update(self)
    @api.multi
    Override this function in models that inherit this abstract to mention which items should be synchronized from github when the user click on 'Full Update' Button
  • get_action(self)
    @api.multi
  • get_base64_image_from_github(self, url)
  • get_from_id_or_create(self, data, extra_data=None)
    @api.model
    Search if the odoo object exists in database. If yes, returns the object. Otherwise, creates the new object. :param data: dict with github 'id' and 'url' keys :return: The searched or created object :Example: >>> self.env['github_organization'].get_from_id_or_create( {'id': 7600578, 'url': 'https://api.github.com/orgs/OCA'})
  • get_github_args_for_creation(self)
    @api.multi
    Should Return list of arguments required to create the given item in Github. Usefull only if your model implement creation in github
  • get_github_connector(self, github_type)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
    Prepare function that map Odoo data to create in Github. Usefull only if your model implement creation in github
  • get_odoo_data_from_github(self, data)
    @api.model
    Prepare function that map Github data to create in Odoo
  • github_login_field(self)
  • github_type(self)
  • update_from_github(self, child_update)
    @api.multi
    Call Github API, using a URL using github id. Load data and update Odoo object accordingly, if the odoo object is obsolete. (Based on last write dates) :param child_update: set to True if you want to reload childs Objects linked to this object. (like members for teams)

New fields (17)
  • ci_url_pattern Char
    string='CI URL Pattern'
  • coverage_url_pattern Char
    string='Coverage URL Pattern'
  • description Char
    readonly=True string='Description'
  • email Char
    readonly=True string='Email'
  • ignored_repository_names Text
    help='Set here repository names you want to ignore. One repository per line. If set, the repositories will be created, but branches synchronization and source code download will be disabled. Exemple:\nodoo-community.org\nOCB\nOpenUpgrade\n' string='Ignored Repositories'
  • image Binary
    readonly=True string='Image'
  • location Char
    readonly=True string='Location'
  • member_ids Many2many → res.partner
    column1='organization_id' column2='partner_id' comodel_name='res.partner' readonly=True relation='github_organization_partner_rel' string='Members'
  • member_qty Integer
    compute='_compute_member_qty' store=True string='Number of Members'
  • name Char
    readonly=True required=True string='Organization Name'
  • organization_serie_ids One2many → github.organization.serie
    comodel_name='github.organization.serie' inverse_name='organization_id' string='Organization Series'
  • organization_serie_qty Integer
    compute='_compute_organization_serie_qty' store=True string='Number of Series'
  • repository_ids One2many → github.repository
    comodel_name='github.repository' inverse_name='organization_id' ondelete='cascade' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
  • team_ids One2many → github.team
    comodel_name='github.team' inverse_name='organization_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website_url Char
    readonly=True string='Website URL'
Public methods (6)
  • button_sync_member(self)
    @api.multi
  • button_sync_repository(self)
    @api.multi
  • button_sync_team(self)
    @api.multi
  • cron_update_organization_team(self)
    @api.model
  • full_update(self)
    @api.multi
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (3)
  • name Char
    required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' ondelete='cascade' required=True string='Organization'
  • sequence Integer
    required=True string='Sequence'
Public methods (0)

No public methods.

New fields (11)
  • color Integer
    compute='_compute_ignore' multi='ignore' string='Color Index'
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • is_ignored Boolean
    compute='_compute_ignore' help="If checked, the branches will not be synchronized, and the code source so will not be downloaded and analyzed. To ignore a repository, go to it organization and fill the file 'Ignored Repositories'." multi='ignore' string='Is Ignored'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • repository_branch_ids One2many → github.repository.branch
    comodel_name='github.repository.branch' inverse_name='repository_id' readonly=True string='Branches'
  • repository_branch_qty Integer
    compute='_compute_repository_branch_qty' store=True string='Number of Branches'
  • team_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='repository_id' readonly=True string='Teams'
  • team_qty Integer
    compute='_compute_team_qty' store=True string='Number of Teams'
  • website Char
    readonly=True string='Website'
Public methods (6)
  • button_sync_branch(self)
    @api.multi
  • cron_update_branch_list(self)
    @api.model
  • full_update(self)
    @api.multi
  • get_github_args_for_creation(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (15)
  • ci_url Char
    compute='_compute_ci' store=True string='CI URL'
  • complete_name Char
    compute='_compute_complete_name' store=True string='Complete Name'
  • coverage_url Char
    compute='_compute_coverage' store=True string='Coverage URL'
  • github_url Char
    compute='_compute_github_url' store=True string='Github URL'
  • last_analyze_date Datetime
    string='Last Analyze Date'
  • last_download_date Datetime
    string='Last Download Date'
  • local_path Char
    compute='_compute_local_path' string='Local Path'
  • mb_size Float
    compute='_compute_mb_size' store=True string='Size (Megabyte)'
  • name Char
    index=True readonly=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' readonly=True related='repository_id.organization_id' store=True string='Organization'
  • organization_serie_id Many2one → github.organization.serie
    comodel_name='github.organization.serie' compute='_compute_organization_serie_id' store=True string='Organization Serie'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • sequence_serie Integer
    related='organization_serie_id.sequence' store=True string='Sequence Serie'
  • size Integer
    readonly=True string='Size (Byte) '
  • state Selection
    default='to_download' selection=_SELECTION_STATE string='State'
Public methods (6)
  • analyze_code_one(self, branch)
    @api.model
    Overload Me in custom Module that manage Source Code analysis.
  • button_analyze_code(self)
    @api.multi
  • button_download_code(self)
    @api.multi
  • create_or_update_from_name(self, repository_id, name)
  • cron_analyze_all(self)
    @api.model
  • cron_download_all(self)
    @api.model

New fields (11)
  • complete_name Char
    compute='_compute_complete_name' readonly=True store=True string='Complete Name'
  • description Char
    readonly=True string='Description'
  • github_url Char
    compute='_compute_github_url' readonly=True string='Github URL'
  • name Char
    index=True readonly=True required=True string='Name'
  • organization_id Many2one → github.organization
    comodel_name='github.organization' index=True ondelete='cascade' readonly=True required=True string='Organization'
  • parent_id Many2one → github.team
    comodel_name='github.team' readonly=True string='Parent Team'
  • partner_ids One2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='team_id' readonly=True string='Members'
  • partner_qty Integer
    compute='_compute_partner_qty' store=True string='Number of Members'
  • privacy Selection
    default='secret' help='The level of privacy this team should have. Can be one of:\n* secret - only visible to organization owners and members of this team.\n* closed - visible to all members of this organization.' readonly=True selection=_PRIVACY_SELECTION string='Privacy'
  • repository_ids One2many → github.team.repository
    comodel_name='github.team.repository' inverse_name='team_id' readonly=True string='Repositories'
  • repository_qty Integer
    compute='_compute_repository_qty' store=True string='Number of Repositories'
Public methods (6)
  • button_sync_member(self)
    @api.multi
  • button_sync_repository(self)
    @api.multi
  • full_update(self)
    @api.multi
  • get_github_args_for_creation(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi
  • get_odoo_data_from_github(self, data)

New fields (4)
  • image_small Binary
    readonly=True related='partner_id.image_small' store=True
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True ondelete='cascade' readonly=True required=True string='Member'
  • role Selection
    readonly=True required=True selection=_ROLE_SELECTION string='Role'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (3)
  • permission Selection
    readonly=True required=True selection=_PERMISSION_SELECTION string='Permission'
  • repository_id Many2one → github.repository
    comodel_name='github.repository' index=True ondelete='cascade' readonly=True required=True string='Repository'
  • team_id Many2one → github.team
    comodel_name='github.team' index=True ondelete='cascade' readonly=True required=True string='Team'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • add_update_from_github_action(self, model, res_id=False)
    @api.model
  • get_actions(self, action_slot, model, res_id=False)
    @api.model
    Add an action to all models that inherit of abstract.github.model

New fields (5)
  • github_team_ids Many2many → github.team.partner
    comodel_name='github.team.partner' inverse_name='partner_id' readonly=True string='Teams'
  • github_team_qty Integer
    compute='_compute_github_team_qty' store=True string='Number of Teams'
  • is_bot_account Boolean
    help='Check this box if thisaccount is a bot or similar.' string='Is Bot Github Account'
  • organization_ids Many2many → github.organization
    column1='partner_id' column2='organization_id' comodel_name='github.organization' readonly=True relation='github_organization_partner_rel' string='Organizations'
  • organization_qty Integer
    compute='_compute_organization_qty' store=True string='Number of Organizations'
Public methods (1)
  • get_odoo_data_from_github(self, data)
    @api.model

New fields (4)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • website Char
    readonly=False
Public methods (2)
  • button_create_in_github(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi

New fields (6)
  • description Char
    readonly=False
  • name Char
    readonly=False
  • organization_id Many2one
    readonly=False
  • privacy Selection
    readonly=False
  • wizard_partner_ids Many2many → res.partner
    comodel_name='res.partner' domain="[('github_login', '!=', False)]" string='Members'
  • wizard_repository_ids Many2many → github.repository
    comodel_name='github.repository' string='Repositories'
Public methods (2)
  • button_create_in_github(self)
    @api.multi
  • get_github_data_from_odoo(self)
    @api.multi

New fields (2)
  • analyze_source_code Boolean
    default=True string='Analyze Source Code'
  • download_source_code Boolean
    default=True string='Download Source Code'
Public methods (1)
  • apply(self)
    @api.multi

New fields (3)
  • child_update Boolean
    default=False string='Update Child Objects'
  • github_type Selection
    default='organization' required=True selection=_GITHUB_TYPE string='Github Type Name'
  • name Char
    required=True string='Github Name'
Public methods (1)
  • button_create_from_github(self)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • button_update_branch_list(self)
    @api.multi

New fields (1)
  • child_update Boolean
    default=False string='Update Child Objects'
Public methods (1)
  • button_update_from_github(self)
    @api.multi
STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/interface-git
PULL REQUEST
PULL REQUEST[MIG] github_connector & github_connector_odoo: Migration to 19.0 (#141)