-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into feat-added-balance-serial-no-column-develop
- Loading branch information
Showing
165 changed files
with
5,245 additions
and
3,289 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
import sys | ||
import requests | ||
from urllib.parse import urlparse | ||
|
||
|
||
docs_repos = [ | ||
"frappe_docs", | ||
"erpnext_documentation", | ||
"erpnext_com", | ||
"frappe_io", | ||
] | ||
|
||
|
||
def uri_validator(x): | ||
result = urlparse(x) | ||
return all([result.scheme, result.netloc, result.path]) | ||
|
||
def docs_link_exists(body): | ||
for line in body.splitlines(): | ||
for word in line.split(): | ||
if word.startswith('http') and uri_validator(word): | ||
parsed_url = urlparse(word) | ||
if parsed_url.netloc == "github.com": | ||
_, org, repo, _type, ref = parsed_url.path.split('/') | ||
if org == "frappe" and repo in docs_repos: | ||
return True | ||
|
||
|
||
if __name__ == "__main__": | ||
pr = sys.argv[1] | ||
response = requests.get("https://api.github.com/repos/frappe/erpnext/pulls/{}".format(pr)) | ||
|
||
if response.ok: | ||
payload = response.json() | ||
title = payload.get("title", "").lower() | ||
head_sha = payload.get("head", {}).get("sha") | ||
body = payload.get("body", "").lower() | ||
|
||
if title.startswith("feat") and head_sha and "no-docs" not in body: | ||
if docs_link_exists(body): | ||
print("Documentation Link Found. You're Awesome! 🎉") | ||
|
||
else: | ||
print("Documentation Link Not Found! ⚠️") | ||
sys.exit(1) | ||
|
||
else: | ||
print("Skipping documentation checks... 🏃") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
import re | ||
import sys | ||
|
||
errors_encounter = 0 | ||
pattern = re.compile(r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,\s*(.)*?\s*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)") | ||
words_pattern = re.compile(r"_{1,2}\([\"'`]{1,3}.*?[a-zA-Z]") | ||
start_pattern = re.compile(r"_{1,2}\([f\"'`]{1,3}") | ||
f_string_pattern = re.compile(r"_\(f[\"']") | ||
starts_with_f_pattern = re.compile(r"_\(f") | ||
|
||
# skip first argument | ||
files = sys.argv[1:] | ||
files_to_scan = [_file for _file in files if _file.endswith(('.py', '.js'))] | ||
|
||
for _file in files_to_scan: | ||
with open(_file, 'r') as f: | ||
print(f'Checking: {_file}') | ||
file_lines = f.readlines() | ||
for line_number, line in enumerate(file_lines, 1): | ||
if 'frappe-lint: disable-translate' in line: | ||
continue | ||
|
||
start_matches = start_pattern.search(line) | ||
if start_matches: | ||
starts_with_f = starts_with_f_pattern.search(line) | ||
|
||
if starts_with_f: | ||
has_f_string = f_string_pattern.search(line) | ||
if has_f_string: | ||
errors_encounter += 1 | ||
print(f'\nF-strings are not supported for translations at line number {line_number + 1}\n{line.strip()[:100]}') | ||
continue | ||
else: | ||
continue | ||
|
||
match = pattern.search(line) | ||
error_found = False | ||
|
||
if not match and line.endswith(',\n'): | ||
# concat remaining text to validate multiline pattern | ||
line = "".join(file_lines[line_number - 1:]) | ||
line = line[start_matches.start() + 1:] | ||
match = pattern.match(line) | ||
|
||
if not match: | ||
error_found = True | ||
print(f'\nTranslation syntax error at line number {line_number + 1}\n{line.strip()[:100]}') | ||
|
||
if not error_found and not words_pattern.search(line): | ||
error_found = True | ||
print(f'\nTranslation is useless because it has no words at line number {line_number + 1}\n{line.strip()[:100]}') | ||
|
||
if error_found: | ||
errors_encounter += 1 | ||
|
||
if errors_encounter > 0: | ||
print('\nVisit "https://frappeframework.com/docs/user/en/translations" to learn about valid translation strings.') | ||
sys.exit(1) | ||
else: | ||
print('\nGood To Go!') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
name: 'Documentation Required' | ||
on: | ||
pull_request: | ||
types: [ opened, synchronize, reopened, edited ] | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: 'Setup Environment' | ||
uses: actions/setup-python@v2 | ||
with: | ||
python-version: 3.6 | ||
|
||
- name: 'Clone repo' | ||
uses: actions/checkout@v2 | ||
|
||
- name: Validate Docs | ||
env: | ||
PR_NUMBER: ${{ github.event.number }} | ||
run: | | ||
pip install requests --quiet | ||
python $GITHUB_WORKSPACE/.github/helper/documentation.py $PR_NUMBER |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
name: Frappe Linter | ||
on: | ||
pull_request: | ||
branches: | ||
- develop | ||
- version-12-hotfix | ||
- version-11-hotfix | ||
jobs: | ||
check_translation: | ||
name: Translation Syntax Check | ||
runs-on: ubuntu-18.04 | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Setup python3 | ||
uses: actions/setup-python@v1 | ||
with: | ||
python-version: 3.6 | ||
- name: Validating Translation Syntax | ||
run: | | ||
git fetch origin $GITHUB_BASE_REF:$GITHUB_BASE_REF -q | ||
files=$(git diff --name-only --diff-filter=d $GITHUB_BASE_REF) | ||
python $GITHUB_WORKSPACE/.github/helper/translation.py $files |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,58 +1,126 @@ | ||
{ | ||
"custom_fields": [ | ||
{ | ||
"_assign": null, | ||
"_comments": null, | ||
"_liked_by": null, | ||
"_user_tags": null, | ||
"allow_on_submit": 0, | ||
"bold": 0, | ||
"collapsible": 0, | ||
"collapsible_depends_on": null, | ||
"columns": 0, | ||
"creation": "2018-12-28 22:29:21.828090", | ||
"default": null, | ||
"depends_on": null, | ||
"description": null, | ||
"docstatus": 0, | ||
"dt": "Address", | ||
"fetch_from": null, | ||
"fieldname": "tax_category", | ||
"fieldtype": "Link", | ||
"hidden": 0, | ||
"idx": 14, | ||
"ignore_user_permissions": 0, | ||
"ignore_xss_filter": 0, | ||
"in_global_search": 0, | ||
"in_list_view": 0, | ||
"in_standard_filter": 0, | ||
"insert_after": "fax", | ||
"label": "Tax Category", | ||
"modified": "2018-12-28 22:29:21.828090", | ||
"modified_by": "Administrator", | ||
"name": "Address-tax_category", | ||
"no_copy": 0, | ||
"options": "Tax Category", | ||
"owner": "Administrator", | ||
"parent": null, | ||
"parentfield": null, | ||
"parenttype": null, | ||
"permlevel": 0, | ||
"precision": "", | ||
"print_hide": 0, | ||
"print_hide_if_no_value": 0, | ||
"print_width": null, | ||
"read_only": 0, | ||
"report_hide": 0, | ||
"reqd": 0, | ||
"search_index": 0, | ||
"translatable": 0, | ||
"unique": 0, | ||
"_assign": null, | ||
"_comments": null, | ||
"_liked_by": null, | ||
"_user_tags": null, | ||
"allow_in_quick_entry": 0, | ||
"allow_on_submit": 0, | ||
"bold": 0, | ||
"collapsible": 0, | ||
"collapsible_depends_on": null, | ||
"columns": 0, | ||
"creation": "2018-12-28 22:29:21.828090", | ||
"default": null, | ||
"depends_on": null, | ||
"description": null, | ||
"docstatus": 0, | ||
"dt": "Address", | ||
"fetch_from": null, | ||
"fetch_if_empty": 0, | ||
"fieldname": "tax_category", | ||
"fieldtype": "Link", | ||
"hidden": 0, | ||
"hide_border": 0, | ||
"hide_days": 0, | ||
"hide_seconds": 0, | ||
"idx": 15, | ||
"ignore_user_permissions": 0, | ||
"ignore_xss_filter": 0, | ||
"in_global_search": 0, | ||
"in_list_view": 0, | ||
"in_preview": 0, | ||
"in_standard_filter": 0, | ||
"insert_after": "fax", | ||
"label": "Tax Category", | ||
"length": 0, | ||
"mandatory_depends_on": null, | ||
"modified": "2018-12-28 22:29:21.828090", | ||
"modified_by": "Administrator", | ||
"name": "Address-tax_category", | ||
"no_copy": 0, | ||
"options": "Tax Category", | ||
"owner": "Administrator", | ||
"parent": null, | ||
"parentfield": null, | ||
"parenttype": null, | ||
"permlevel": 0, | ||
"precision": "", | ||
"print_hide": 0, | ||
"print_hide_if_no_value": 0, | ||
"print_width": null, | ||
"read_only": 0, | ||
"read_only_depends_on": null, | ||
"report_hide": 0, | ||
"reqd": 0, | ||
"search_index": 0, | ||
"translatable": 0, | ||
"unique": 0, | ||
"width": null | ||
}, | ||
{ | ||
"_assign": null, | ||
"_comments": null, | ||
"_liked_by": null, | ||
"_user_tags": null, | ||
"allow_in_quick_entry": 0, | ||
"allow_on_submit": 0, | ||
"bold": 0, | ||
"collapsible": 0, | ||
"collapsible_depends_on": null, | ||
"columns": 0, | ||
"creation": "2020-10-14 17:41:40.878179", | ||
"default": "0", | ||
"depends_on": null, | ||
"description": null, | ||
"docstatus": 0, | ||
"dt": "Address", | ||
"fetch_from": null, | ||
"fetch_if_empty": 0, | ||
"fieldname": "is_your_company_address", | ||
"fieldtype": "Check", | ||
"hidden": 0, | ||
"hide_border": 0, | ||
"hide_days": 0, | ||
"hide_seconds": 0, | ||
"idx": 20, | ||
"ignore_user_permissions": 0, | ||
"ignore_xss_filter": 0, | ||
"in_global_search": 0, | ||
"in_list_view": 0, | ||
"in_preview": 0, | ||
"in_standard_filter": 0, | ||
"insert_after": "linked_with", | ||
"label": "Is Your Company Address", | ||
"length": 0, | ||
"mandatory_depends_on": null, | ||
"modified": "2020-10-14 17:41:40.878179", | ||
"modified_by": "Administrator", | ||
"name": "Address-is_your_company_address", | ||
"no_copy": 0, | ||
"options": null, | ||
"owner": "Administrator", | ||
"parent": null, | ||
"parentfield": null, | ||
"parenttype": null, | ||
"permlevel": 0, | ||
"precision": "", | ||
"print_hide": 0, | ||
"print_hide_if_no_value": 0, | ||
"print_width": null, | ||
"read_only": 0, | ||
"read_only_depends_on": null, | ||
"report_hide": 0, | ||
"reqd": 0, | ||
"search_index": 0, | ||
"translatable": 0, | ||
"unique": 0, | ||
"width": null | ||
} | ||
], | ||
"custom_perms": [], | ||
"doctype": "Address", | ||
"property_setters": [], | ||
], | ||
"custom_perms": [], | ||
"doctype": "Address", | ||
"property_setters": [], | ||
"sync_on_migrate": 1 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
import frappe | ||
from frappe import _ | ||
from frappe.contacts.doctype.address.address import Address | ||
from frappe.contacts.doctype.address.address import get_address_templates | ||
|
||
class ERPNextAddress(Address): | ||
def validate(self): | ||
self.validate_reference() | ||
super(ERPNextAddress, self).validate() | ||
|
||
def link_address(self): | ||
"""Link address based on owner""" | ||
if self.is_your_company_address: | ||
return | ||
|
||
return super(ERPNextAddress, self).link_address() | ||
|
||
def validate_reference(self): | ||
if self.is_your_company_address and not [ | ||
row for row in self.links if row.link_doctype == "Company" | ||
]: | ||
frappe.throw(_("Address needs to be linked to a Company. Please add a row for Company in the Links table."), | ||
title=_("Company Not Linked")) | ||
|
||
@frappe.whitelist() | ||
def get_shipping_address(company, address = None): | ||
filters = [ | ||
["Dynamic Link", "link_doctype", "=", "Company"], | ||
["Dynamic Link", "link_name", "=", company], | ||
["Address", "is_your_company_address", "=", 1] | ||
] | ||
fields = ["*"] | ||
if address and frappe.db.get_value('Dynamic Link', | ||
{'parent': address, 'link_name': company}): | ||
filters.append(["Address", "name", "=", address]) | ||
|
||
address = frappe.get_all("Address", filters=filters, fields=fields) or {} | ||
|
||
if address: | ||
address_as_dict = address[0] | ||
name, address_template = get_address_templates(address_as_dict) | ||
return address_as_dict.get("name"), frappe.render_template(address_template, address_as_dict) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.