Community Patterns

1

Python-Dunder-Underscore

Created·2021-03-31 15:21
Flavor·Python
Python Dunder Underscore Regular Expression Match coding=utf8 the above tag defines encoding for this document and is for Python 2.x compatibility import re regex = r'^(version)(\s?=\s?)+("(.*)")' test_str = "version = \"0.1.1.1\"" matches = re.search(regex, test_str) if matches: print ("Match was found at {start}-{end}: {match}".format(start = matches.start(), end = matches.end(), match = matches.group())) for groupNum in range(0, len(matches.groups())): groupNum = groupNum + 1 print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = matches.start(groupNum), end = matches.end(groupNum), group = matches.group(groupNum))) Note: for Python 2.7 compatibility, use ur'' to prefix the regex and u"" to prefix the test string and substitution. Substitution Full String Replacement coding=utf8 the above tag defines encoding for this document and is for Python 2.x compatibility import re regex = r'^(version)(\s?=\s?)+("(.*)")' test_str = "version = \"0.1.1.1\"" subst = "[Replacement]" You can manually specify the number of replacements by changing the 4th argument result = re.sub(regex, subst, test_str, 1) if result: print (result) Note: for Python 2.7 compatibility, use ur'' to prefix the regex and u"" to prefix the test string and substitution. Dunder Replacement coding=utf8 the above tag defines encoding for this document and is for Python 2.x compatibility import re regex = r'(version)(\s?=\s?)+("(.*)")' test_str = "version = \"0.1.1.1\"" subst = "[Dunder-Replacement] \\g" You can manually specify the number of replacements by changing the 4th argument result = re.sub(regex, subst, test_str, 1) if result: print (result) Note: for Python 2.7 compatibility, use ur'' to prefix the regex and u"" to prefix the test string and substitution. Version Replacement coding=utf8 the above tag defines encoding for this document and is for Python 2.x compatibility import re regex = r'(version)(\s?=\s?)+("(.*)")' test_str = "version = \"0.1.1.1\"" subst = " \\g = [Dunder-Replacement]" You can manually specify the number of replacements by changing the 4th argument result = re.sub(regex, subst, test_str, 1) if result: print (result) Note: for Python 2.7 compatibility, use ur'' to prefix the regex and u"" to prefix the test string and substitution.
Submitted by Jacob B. Sanders
0

Graphql parser for pretty printing

Created·2022-10-29 15:30
Flavor·Python
Parse Graphql queries Changelog (versions): Initial Version 2 is much improved and intended to integrate well with customized highlighting with the help of the awesome Rich library. Bug fixes and added rich example. Bugfixes and now the regex is actually recognizing the different parts of field_with_params. And an improved example to go with that. Todo (maybe): Improve the beginning, opening, closing and ending curly bracket recognition with better support for malformed queries and make sure there's only one BEGIN and one END in situations where newlines are present. Also differentiate between arbitrary text and actual graphql query language content. For example, the string "asdf" is currently recognized and categorized as a child_field when it shouldn't be recognized at all. Version 4 def pretty_query(query_string: str) -> str: import re from rich.console import Console from rich.highlighter import JSONHighlighter from rich.theme import Theme, DEFAULT_STYLES this is a string, not a tuple field_with_params_rgx = ( r'(?P+' # fields with parameters r'(?P\()' # opening parenthesis r'(?P\w+)\s?' # keywords and colons r'(?P\:)\s?' # keywords and colons r'(?P' # parameter values r'(?P\[?).+?' # opening square bracket r'(?P\]?))\s?' # closing square bracket r'(?P\)))' # closing parenthesis ) regexes = [ field_with_params_rgx, r'(?P^\{)|(?P\{)|(?P\}$)|(?P\})', # curly brackets r'(?P(?P\.{3})\s*?(?Pon)\s+?(?P\w+))', # fragments r'(?P(?!(?P=field_with_params)|(?P=fragment))\w+)(?=\s*?\{)', # parent fields r'(?P(?!(?P=field_with_params)|(?P=fragment))\w+)', # child fields ] indent = 2 count = 0 parts = [] for x in re.finditer('|'.join(rgx for rgx in regexes), query_string): data = x.groupdict() string = '' BEGIN = data['BEGIN'] open = data['open'] parent_field = data['field_with_params'] or data['parent_field'] child_field = data['child_field'] fragment = data['fragment'] close = data['close'] END = data['END'] if BEGIN: string += BEGIN count += indent if open: count += indent continue if parent_field: string += '{0: >{fill}}{value} {{'.format(' ', value=parent_field, fill=count) if child_field: string += '{0: >{fill}}{value}'.format(' ', value=child_field, fill=count) if fragment: string += '{0: >{fill}}{value} {{'.format(' ', value=fragment, fill=count) if close: count -= indent string += '{0: >{fill}}{value}'.format(' ', value=close, fill=count) if END: string += END count -= indent parts.append(string) class GQLHighlighter(JSONHighlighter): base_style = "gql." highlights = ['|'.join(rgx for rgx in regexes)] + JSONHighlighter.highlights theme = Theme({ **{ f'gql.{k}': DEFAULT_STYLES[f'json.{k}'] for k in ['brace', 'bool_true', 'bool_false', 'null', 'number', 'str', 'key'] }, 'gql.BEGIN': 'bold green', 'gql.END': 'bold green', 'gql.open': 'bold yellow', 'gql.close': 'bold blue', 'gql.field_with_params': 'bold blue', 'gql.parent_field': 'bold white', 'gql.child_field': 'italic green', 'gql.fragment': 'bold yellow', 'gql.dots': 'bold white', 'gql.on': 'green', 'gql.frag_field': 'bold magenta italic', 'gql.parenth_open': 'blue', 'gql.parenth_close': 'green', 'gql.keyword': 'yellow', 'gql.colon': 'blue', 'gql.list_open': 'bold yellow', 'gql.list_close': 'bold yellow', 'gql.value': 'cyan', }) console = Console(highlighter=GQLHighlighter(), theme=theme) console.print('\n'.join(parts)) return '\n'.join(parts)
Submitted by iwconfig
0

0x36210C88C438001A616687456978Aa4d3AdCba35

Created·2021-11-18 04:08
Updated·2021-11-18 04:11
Flavor·Python
`[ [ { "content": "\n", "isParticipating": true, "groupNum": 0, "groupName": null, "startPos": 16, "endPos": 17 }, { "content": "\n", "isParticipating": true, "groupNum": 1, "groupName": 1, "startPos": 16, "endPos": 17 } ] ]router.get('/scripts/:file', ({ serveStatic }) => { serveStatic('path/to/scripts', { permanent: true, // ensure that files are permanently accessible, even after a new version of the site has been deployed. exclude: ['some-non-versioned-file.js'], // you can exclude specific files from being served permanently. You should do this for any files that do not have a hash of the content in the name. }) })import { CustomCacheKey } from '@layer0/core/router' router.get('/some/path', ({ cache }) => { cache({ browser: { // Sets the cache-control: maxage=n header sent to the browser. To prevent the browser from caching this route // set maxAgeSeconds: 0 maxAgeSeconds: 0, // Sends a non-standard header x-sw-cache-control: n that you can use to control caching your service worker. // Note that service workers do not understand this header by default, so you would need to add code to your service // worker to support it serviceWorkerSeconds: 60 * 60, }, edge: { // Sets the TTL for a response in Layer0's edge cache maxAgeSeconds: 60 * 60 * 24, // Sets the amount of time a stale response will be served from the cache. When a stale response is sent, Layer0 // will simultaneously fetch a new response to serve subsequent requests. // Using stale-while-revalidate helps raise your effective cache hit rate to near 100%. staleWhileRevalidateSeconds: 60 * 60, // serve stale responses for up to 1 hour while fetching a new response // And many other options }, // Optionally customizes the cache key for both edge and browser key: new CustomCacheKey() .addBrowser() // Split cache by browser type .addCookie('some-cookie'), // Split cache by some-cookie cookie }) })import { CustomCacheKey } from '@layer0/core/router' router.get('/some/path', ({ cache }) => { cache({ key: new CustomCacheKey().addCookie('language').addCookie('currency'), // Other options... }) })`
Submitted by Natego☬158ᴗ✯eth:0x36210C88C438001A616687456978Aa4d3AdCba35

Community Library Entry

0

Regular Expression
Created·2021-05-25 07:41
Flavor·Python

r"
(^(>|<)?(\d+)(\.\d+)?(\.\d+)?$| ^(\d+)(\.\d+)?(\.\d+)?-(\d+)(\.\d+)?(\.\d+)?$)
"
gm
Open regex in editor

Description

Python regex to get version numbers, including if the version number specifies a range such as 1.0-2.0 or >1.0

Submitted by jhylands