TIP: You can type at any time to perform a new search.
Github Connector
github_connector · OCA/interface-git
- Repository
- OCA/interface-git · module folder · Try on Runboat
- Module version
- 1.0.1
- Category
- Connector
- Folder size
- 0.93 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- https://github.com/OCA/interface-github
- Last tracking update
- 2026-08-07 08:43:07
- Authors
- Akretion, Odoo Community Association (OCA), GRAP, Tecnativa
- Maintainers
- Akretion, Odoo Community Association (OCA), GRAP, Tecnativa
- Committers
- Carlos Lopez, OCA-git-bot, oca-ci
- Odoo dependencies
- Python dependencies
- GitPython, PyGithub, pathspec
- System dependencies
- cloc
- Required by
- github_connector_odoo
- 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 ID | Name | Model | Type | Status |
|---|---|---|---|---|
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 | form | Inherits base.view_partner_form | |
view_res_partner_kanban |
res.partner | kanban | Inherits base.res_partner_kanban_view | |
view_res_partner_search |
res.partner | search | Inherits base.view_res_partner_filter | |
view_res_partner_tree |
res.partner | tree | 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_dateDatetimereadonly=Truestring='Create Date on Github' -
github_id_externalCharindex=Truereadonly=Truestring='Github Id' -
github_last_sync_dateDatetimereadonly=Truestring='Last Sync Date with Github' -
github_nameCharindex=Truereadonly=Truestring='Github Technical Name' -
github_urlCharreadonly=Truestring='Github URL' -
github_write_dateDatetimereadonly=Truestring='Last Write Date on Github'
-
button_update_from_github_full(self) -
button_update_from_github_light(self) -
create_from_name(self, name)@api.modelCall 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.modelQuery 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.modelPrepare 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.modelSearch 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.modelPrepare 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_idMany2one → github.analysis.rule.groupcomodel_name='github.analysis.rule.group'required=Truestring='Group' -
nameCharrequired=True -
pathsTextdefault='*'help='Define with pathspec especification'required=True
No public methods.
New fields (1)
-
nameCharrequired=True
No public methods.
New fields (7)
-
analysis_rule_idMany2one → github.analysis.rulecomodel_name='github.analysis.rule'ondelete='cascade'string='Analysis Rule' -
code_countIntegerstring='# Code' -
documentation_countIntegerstring='# Doc.' -
empty_countIntegerstring='# Empty' -
group_idMany2onereadonly=Truerelated='analysis_rule_id.group_id'string='Group' -
scanned_filesInteger -
total_countIntegercompute='_compute_total_count'store=Truestring='# Total'
No public methods.
New fields (18)
-
analysis_rule_idsMany2many → github.analysis.rulecomodel_name='github.analysis.rule'string='Analysis Rules' -
ci_url_patternCharstring='CI URL Pattern' -
coverage_url_patternCharstring='Coverage URL Pattern' -
descriptionCharreadonly=True -
emailCharreadonly=True -
ignored_repository_namesTexthelp='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' -
imageImagereadonly=True -
locationCharreadonly=True -
member_idsMany2many → res.partnercolumn1='organization_id'column2='partner_id'comodel_name='res.partner'readonly=Truerelation='github_organization_partner_rel'string='Members' -
member_qtyIntegercompute='_compute_member_qty'store=Truestring='Number of Members' -
nameCharreadonly=Truerequired=Truestring='Organization Name' -
organization_serie_idsOne2many → github.organization.seriecomodel_name='github.organization.serie'inverse_name='organization_id'string='Organization Series' -
organization_serie_qtyIntegercompute='_compute_organization_serie_qty'store=Truestring='Number of Series' -
repository_idsOne2many → github.repositorycomodel_name='github.repository'inverse_name='organization_id'readonly=Truestring='Repositories' -
repository_qtyIntegercompute='_compute_repository_qty'store=Truestring='Number of Repositories' -
team_idsOne2many → github.teamcomodel_name='github.team'inverse_name='organization_id'readonly=Truestring='Teams' -
team_qtyIntegercompute='_compute_team_qty'store=Truestring='Number of Teams' -
website_urlCharreadonly=True
-
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)
-
nameCharrequired=True -
organization_idMany2one → github.organizationcomodel_name='github.organization'ondelete='cascade'required=Truestring='Organization' -
sequenceIntegerrequired=True
No public methods.
New fields (13)
-
analysis_rule_idsMany2many → github.analysis.rulecomodel_name='github.analysis.rule'string='Analysis Rules' -
colorIntegercompute='_compute_ignore'string='Color Index' -
complete_nameCharcompute='_compute_complete_name'readonly=Truestore=True -
descriptionCharreadonly=True -
inhibit_inherited_rulesBooleandefault=Falsehelp='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_ignoredBooleancompute='_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'." -
nameCharindex=Truereadonly=Truerequired=True -
organization_idMany2one → github.organizationcomodel_name='github.organization'index=Trueondelete='cascade'readonly=Truerequired=Truestring='Organization' -
repository_branch_idsOne2many → github.repository.branchcomodel_name='github.repository.branch'inverse_name='repository_id'readonly=Truestring='Branches' -
repository_branch_qtyIntegercompute='_compute_repository_branch_qty'store=Truestring='Number of Branches' -
team_idsOne2many → github.team.repositorycomodel_name='github.team.repository'inverse_name='repository_id'readonly=Truestring='Teams' -
team_qtyIntegercompute='_compute_team_qty'store=Truestring='Number of Teams' -
websiteCharreadonly=True
-
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_idsMany2many → github.analysis.rulecomodel_name='github.analysis.rule'string='Analysis Rules' -
analysis_rule_info_idsOne2many → github.repository.branch.rule.infocomodel_name='github.repository.branch.rule.info'inverse_name='repository_branch_id'string='Analysis Rules (info)' -
ci_urlCharcompute='_compute_ci_url'store=Truestring='CI URL' -
complete_nameCharcompute='_compute_complete_name'store=True -
coverage_urlCharcompute='_compute_coverage_url'store=Truestring='Coverage URL' -
github_urlCharcompute='_compute_github_url'store=Truestring='Github URL' -
inhibit_inherited_rulesBooleandefault=Falsehelp='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_dateDatetime -
last_download_dateDatetime -
local_pathCharcompute='_compute_local_path' -
mb_sizeFloatcompute='_compute_mb_size'store=Truestring='Size (Megabyte)' -
nameCharindex=Truereadonly=True -
organization_idMany2one → github.organizationcomodel_name='github.organization'readonly=Truerelated='repository_id.organization_id'store=Truestring='Organization' -
organization_serie_idMany2one → github.organization.seriecomodel_name='github.organization.serie'compute='_compute_organization_serie_id'store=Truestring='Organization Serie' -
repository_idMany2one → github.repositorycomodel_name='github.repository'index=Trueondelete='cascade'readonly=Truerequired=Truestring='Repository' -
sequence_serieIntegerrelated='organization_serie_id.sequence'store=Truestring='Sequence Serie' -
sizeIntegerreadonly=Truestring='Size (Byte) ' -
stateSelectiondefault='to_download'selection=_SELECTION_STATE
-
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_idMany2one → github.repository.branchcomodel_name='github.repository.branch'ondelete='cascade'string='Repository Branch'
No public methods.
New fields (10)
-
analysis_rule_idMany2one → github.analysis.rulecomodel_name='github.analysis.rule'string='Analysis Rule' -
code_countIntegerstring='# Code' -
documentation_countIntegerstring='# Documentation' -
empty_countIntegerstring='# Empty' -
group_idMany2onereadonly=Truerelated='analysis_rule_id.group_id'string='Group' -
organization_serie_idMany2one → github.organization.seriecomodel_name='github.organization.serie'string='Organization serie' -
repository_branch_idMany2one → github.repository.branchcomodel_name='github.repository.branch'string='Repository Branch' -
repository_idMany2one → github.repositorycomodel_name='github.repository'string='Repository' -
scanned_filesInteger -
total_countIntegerstring='# Total'
-
init(self)
New fields (11)
-
complete_nameCharcompute='_compute_complete_name'readonly=Truestore=True -
descriptionCharreadonly=True -
github_urlCharcompute='_compute_github_url'readonly=Truestring='Github URL' -
nameCharindex=Truereadonly=Truerequired=True -
organization_idMany2one → github.organizationcomodel_name='github.organization'index=Trueondelete='cascade'readonly=Truerequired=Truestring='Organization' -
parent_idMany2one → github.teamcomodel_name='github.team'readonly=Truestring='Parent Team' -
partner_idsOne2many → github.team.partnercomodel_name='github.team.partner'inverse_name='team_id'readonly=Truestring='Members' -
partner_qtyIntegercompute='_compute_partner_qty'store=Truestring='Number of Members' -
privacySelectiondefault='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=Trueselection=_PRIVACY_SELECTION -
repository_idsOne2many → github.team.repositorycomodel_name='github.team.repository'inverse_name='team_id'readonly=Truestring='Repositories' -
repository_qtyIntegercompute='_compute_repository_qty'store=Truestring='Number of Repositories'
-
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_idIntegercompute='_compute_context_search_default' -
context_search_default_team_idIntegercompute='_compute_context_search_default' -
partner_idMany2one → res.partnercomodel_name='res.partner'index=Trueondelete='cascade'readonly=Truerequired=Truestring='Member' -
roleSelectionreadonly=Truerequired=Trueselection=_ROLE_SELECTION -
team_idMany2one → github.teamcomodel_name='github.team'index=Trueondelete='cascade'readonly=Truerequired=Truestring='Team'
No public methods.
New fields (5)
-
context_search_default_repository_idIntegercompute='_compute_context_search_default' -
context_search_default_team_idIntegercompute='_compute_context_search_default' -
permissionSelectionreadonly=Truerequired=Trueselection=_PERMISSION_SELECTION -
repository_idMany2one → github.repositorycomodel_name='github.repository'index=Trueondelete='cascade'readonly=Truerequired=Truestring='Repository' -
team_idMany2one → github.teamcomodel_name='github.team'index=Trueondelete='cascade'readonly=Truerequired=Truestring='Team'
No public methods.
New fields (5)
-
github_team_partner_idsOne2many → github.team.partnercomodel_name='github.team.partner'inverse_name='partner_id'readonly=Truestring='Teams' -
github_team_qtyIntegercompute='_compute_github_team_qty'store=Truestring='Number of Teams' -
is_bot_accountBooleanhelp='Check this box if this account is a bot or similar.'string='Is Bot Github Account' -
organization_idsMany2many → github.organizationcolumn1='partner_id'column2='organization_id'comodel_name='github.organization'readonly=Truerelation='github_organization_partner_rel'string='Organizations' -
organization_qtyIntegercompute='_compute_organization_qty'store=Truestring='Number of Organizations'
-
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)
-
descriptionCharreadonly=False -
nameCharreadonly=False -
organization_idMany2onereadonly=False -
websiteCharreadonly=False
-
button_create_in_github(self) -
get_github_data_from_odoo(self)
New fields (6)
-
descriptionCharreadonly=False -
nameCharreadonly=False -
organization_idMany2onereadonly=False -
privacySelectionreadonly=False -
wizard_partner_idsMany2many → res.partnercomodel_name='res.partner'domain="[('github_name', '!=', False)]"string='Team Members' -
wizard_repository_idsMany2many → github.repositorycomodel_name='github.repository'string='Team Repositories'
-
button_create_in_github(self) -
get_github_data_from_odoo(self)
New fields (3)
-
child_updateBooleandefault=Falsestring='Update Child Objects' -
github_typeSelectiondefault='organization'required=Trueselection=[('organization', 'Organization'), ('repository', 'Repository'), ('user', 'User')]string='Github Type Name' -
nameCharrequired=Truestring='Github Name'
-
button_create_from_github(self)
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
- Status
- Open migration PR — not merged yet for this version
- CI status
- checks failing
- Open since
- 248 days ago
- Last activity
- 141 days ago
- Repository
- OCA/interface-git
- Pull request
- [MIG] github_connector & github_connector_odoo: Migration to 19.0 (#141)