From 21a1c5fa540207e6fdd956a281996e503f6c7c32 Mon Sep 17 00:00:00 2001 From: Caroline Russell Date: Tue, 30 Jul 2024 23:06:38 -0400 Subject: [PATCH 1/2] Feat: Reachability Enricher Signed-off-by: Caroline Russell --- components/enrichers/reachability/main.go | 357 ++++++++++++++++++ .../enrichers/reachability/main_test.go | 65 ++++ components/enrichers/reachability/task.yaml | 27 ++ .../reachability/testdata/bandit.tagged.pb | Bin 0 -> 736 bytes .../testdata/pip-safety.tagged.pb | 83 ++++ .../testdata/reachability.tagged.pb | 4 + .../testdata/sampleReachables.json | 1 + 7 files changed, 537 insertions(+) create mode 100644 components/enrichers/reachability/main.go create mode 100644 components/enrichers/reachability/main_test.go create mode 100644 components/enrichers/reachability/task.yaml create mode 100644 components/enrichers/reachability/testdata/bandit.tagged.pb create mode 100644 components/enrichers/reachability/testdata/pip-safety.tagged.pb create mode 100644 components/enrichers/reachability/testdata/reachability.tagged.pb create mode 100644 components/enrichers/reachability/testdata/sampleReachables.json diff --git a/components/enrichers/reachability/main.go b/components/enrichers/reachability/main.go new file mode 100644 index 000000000..9fc2e6fa3 --- /dev/null +++ b/components/enrichers/reachability/main.go @@ -0,0 +1,357 @@ +package main + +import ( + "encoding/json" + "errors" + "flag" + "fmt" + "github.com/jmespath/go-jmespath" + v1 "github.com/ocurity/dracon/api/proto/v1" + "github.com/ocurity/dracon/pkg/putil" + "io" + "log" + "os" + "path/filepath" + "regexp" + "strconv" + "strings" +) + +const defaultAnnotation = "Reachability" + +var ( + readPath string + writePath string + annotation string + sliceFile string +) + +type regexes struct { + purlPkg *regexp.Regexp + purlTrailingVersion *regexp.Regexp + purlVersion *regexp.Regexp + filename *regexp.Regexp + fileLine *regexp.Regexp +} + +// checkReachable checks if the search term is reachable +func checkReachable(data ReachableSlice, search string, patterns regexes) (bool, error) { + if search == "" { + return false, nil + } + if result := checkReachablePurl(data, search, patterns); result == true { + return true, nil + } + + match := patterns.fileLine.FindStringSubmatch(search) + if match != nil { + file := match[1] + lineMin, lineMax := getLnRange(match[2]) + return filterFlows(data, file, lineMin, lineMax), nil + } + return false, errors.New(fmt.Sprintf("Invalid search term: %s", search)) +} + +// checkReachablePurl checks if a given pkg:version is included in the reachables +func checkReachablePurl(data ReachableSlice, purl string, patterns regexes) bool { + purls := enumerateReachablePurls(data, patterns) + purl = strings.ToLower(purl) + _, exists := purls[purl] + if exists { + return true + } + return false +} + +func enrichIssue(i *v1.Issue, data ReachableSlice, patterns regexes) (*v1.EnrichedIssue, error) { + enrichedIssue := v1.EnrichedIssue{} + //annotations := map[string]string{} + //targetType, newTarget := identifyTargetType(i.Target) + //var result bool + //var err error + result, err := checkReachable(data, i.Target, patterns) + if err != nil { + } + if result == true { + + } + enrichedIssue = v1.EnrichedIssue{ + RawIssue: i, + Annotations: map[string]string{}, + } + enrichedIssue.Annotations["reachable"] = strconv.FormatBool(result) + return &enrichedIssue, err +} + +// enumerateReachablePurls extracts all the reached purls from the reachables +func enumerateReachablePurls(data ReachableSlice, patterns regexes) map[string]string { + rawPurls, _ := jmespath.Search("reachables[].purls[]", data) + allPurls := make(map[string]string) + for _, purl := range rawPurls.([]interface{}) { + parsedPurls := parsePurl(purl.(string), patterns) + for _, pp := range parsedPurls { + allPurls[pp] = "" + } + } + return allPurls +} + +// filterFlows filters flows based on reachables, filename, and line numbers. +func filterFlows(data ReachableSlice, filename string, lnMin int, lnMax int) bool { + for _, flows := range data.Reachables { + for _, f := range flows.Flows { + if f.LineNumber != 0 && !contains(lnMin, lnMax, f.LineNumber) { + continue + } + if strings.HasSuffix(f.ParentFileName, filename) { + return true + } + } + } + return false +} + +// getLnRange extracts line numbers from a string and returns a tuple of (start, end). +func getLnRange(value string) (int, int) { + if strings.Contains(value, "-") { + values := strings.Split(value, "-") + if len(values) == 2 { + start, err1 := strconv.Atoi(values[0]) + end, err2 := strconv.Atoi(values[1]) + if err1 == nil && err2 == nil { + return start, end + } + } + } else { + num, err := strconv.Atoi(value) + if err == nil { + return num, num + } + } + log.Printf("Ignoring invalid line number: %s.", value) + return 0, 0 +} + +// contains checks if an integer is in a slice. +func contains(ln int, lnMin int, lnMax int) bool { + return (ln-lnMax)*(ln-lnMin) <= 0 +} + +// parsePurlPkgs extracts package and version variations from a purl. +func parsePurlPkgs(matches []string, pattern *regexp.Regexp) []string { + // Creating a map to ensure uniqueness + pkgSet := make(map[string]struct{}) + + // Adding the packages + pkgSet[matches[pattern.SubexpIndex("p1")]] = struct{}{} + pkgSet[matches[pattern.SubexpIndex("p2")]] = struct{}{} + + // Converting the map to a slice and cleaning up the packages + var pkgs []string + for pkg := range pkgSet { + pkg = strings.ReplaceAll(pkg, "pypi/", "") + pkg = strings.ReplaceAll(pkg, "npm/", "") + pkg = strings.ReplaceAll(pkg, "%40", "@") + pkgs = append(pkgs, pkg) + } + + return pkgs +} + +// parsePurlVersions returns a list of version variations from a purl. +func parsePurlVersions(matches []string, pattern *regexp.Regexp) []string { + var versions []string + if len(matches) == 0 { + return versions + } + + // Creating a map to ensure uniqueness + versionSet := make(map[string]struct{}) + + // Assuming the named groups are in the match + vers1 := matches[pattern.SubexpIndex("v1")] + vers2 := matches[pattern.SubexpIndex("v2")] + ext := matches[pattern.SubexpIndex("ext")] + + // Adding the basic versions + versionSet[vers1] = struct{}{} + versionSet[vers2] = struct{}{} + + // Adding the extended versions if ext exists + if ext != "" { + versionSet[vers1+ext] = struct{}{} + versionSet[vers2+ext] = struct{}{} + } + + // Converting the map to a slice + for version := range versionSet { + versions = append(versions, version) + } + + return versions +} + +// parsePurl returns a list of permutations of pkg:version from a purl. +func parsePurl(purl string, patterns regexes) []string { + purl = patterns.purlTrailingVersion.ReplaceAllString(purl, "$1@") + var result []string + var pkgs []string + var versions []string + + if match := patterns.purlVersion.FindStringSubmatch(purl); match != nil { + versions = parsePurlVersions(match, patterns.purlVersion) + match = nil + } + if match := patterns.purlPkg.FindStringSubmatch(purl); match != nil { + pkgs = parsePurlPkgs(match, patterns.purlPkg) + } + + for _, i := range pkgs { + for _, j := range versions { + result = append(result, i+":"+j) + } + } + return removeDuplicates(result) +} + +// removeDuplicates removes duplicate strings from a slice. +func removeDuplicates(elements []string) []string { + encountered := map[string]bool{} + result := []string{} + + for v := range elements { + if encountered[elements[v]] == true { + } else { + encountered[elements[v]] = true + result = append(result, elements[v]) + } + } + return result +} + +func lookupEnvOrString(key string, defaultVal string) string { + if val, ok := os.LookupEnv(key); ok { + return val + } + return defaultVal +} + +// readSlice loads the atom reachables slice +func readSlice(sliceFile string) (ReachableSlice, error) { + // Define a variable to hold the JSON data + var data ReachableSlice + + // Open the JSON file + file, err := os.Open(sliceFile) + defer func(file *os.File) { + err := file.Close() + if err != nil { + } + }(file) + + if err != nil { + //fmt.Println("Error opening file:", err) + //return data, err + } + + // Read the file content + byteValue, err := io.ReadAll(file) + if err != nil { + fmt.Println("Error reading file:", err) + //return data, err + } + + // Unmarshal the JSON data into the variable + if err := json.Unmarshal(byteValue, &data); err != nil { + fmt.Println("Error unmarshaling JSON:", err) + return data, err + } + + return data, nil +} + +type ReachableSlice struct { + Reachables []struct { + Flows []struct { + ID int `json:"id"` + Label string `json:"label"` + Name string `json:"name"` + FullName string `json:"fullName"` + Signature string `json:"signature"` + IsExternal bool `json:"isExternal"` + Code string `json:"code"` + TypeFullName string `json:"typeFullName"` + ParentMethodName string `json:"parentMethodName"` + ParentMethodSignature string `json:"parentMethodSignature"` + ParentFileName string `json:"parentFileName"` + ParentPackageName string `json:"parentPackageName"` + ParentClassName string `json:"parentClassName"` + LineNumber int `json:"lineNumber"` + ColumnNumber int `json:"columnNumber"` + Tags string `json:"tags"` + } `json:"flows"` + Purls []string `json:"purls"` + } `json:"reachables"` +} + +func run() { + res, err := putil.LoadTaggedToolResponse(readPath) + if err != nil { + log.Fatalf("could not load tool response from path %s , error:%v", readPath, err) + } + //if annotation == "" { + // annotation = defaultAnnotation + //} + data, err := readSlice(sliceFile) + patterns := regexes{ + purlPkg: regexp.MustCompile(`(?P[^/:]+/(?P[^/]+))(?:(?:.|/)v\d+)?@`), + purlTrailingVersion: regexp.MustCompile(`[./]v\d+@`), + purlVersion: regexp.MustCompile(`@(?Pv?(?P[\d.]+){1,3})(?P[^?\s]+)?`), + filename: regexp.MustCompile(`[^/]+[^/]?`), + fileLine: regexp.MustCompile(`(?P[^/]+):(?P[\d-]+)`), + } + + for _, r := range res { + enrichedIssues := []*v1.EnrichedIssue{} + for _, i := range r.GetIssues() { + eI, err := enrichIssue(i, data, patterns) + if err != nil { + log.Println(err) + continue + } + enrichedIssues = append(enrichedIssues, eI) + } + if len(enrichedIssues) > 0 { + if err := putil.WriteEnrichedResults(r, enrichedIssues, + filepath.Join(writePath, fmt.Sprintf("%s.reachability.enriched.pb", r.GetToolName())), + ); err != nil { + log.Fatal(err) + } + } else { + log.Println("no enriched issues were created for", r.GetToolName()) + } + if len(r.GetIssues()) > 0 { + scanStartTime := r.GetScanInfo().GetScanStartTime().AsTime() + if err := putil.WriteResults( + r.GetToolName(), + r.GetIssues(), + filepath.Join(writePath, fmt.Sprintf("%s.raw.pb", r.GetToolName())), + r.GetScanInfo().GetScanUuid(), + scanStartTime, + r.GetScanInfo().GetScanTags(), + ); err != nil { + log.Fatalf("could not write results: %s", err) + } + } + + } +} + +func main() { + flag.StringVar(&readPath, "read_path", lookupEnvOrString("READ_PATH", ""), "where to find producer results") + flag.StringVar(&writePath, "write_path", lookupEnvOrString("WRITE_PATH", ""), "where to put enriched results") + flag.StringVar(&annotation, "annotation", lookupEnvOrString("ANNOTATION", defaultAnnotation), "what is the annotation this enricher will add to the issues, by default `Reachability`") + flag.StringVar(&sliceFile, "atom_slice", lookupEnvOrString("ATOM_SLICE", ""), "location of the atom slice file") + flag.Parse() + run() +} diff --git a/components/enrichers/reachability/main_test.go b/components/enrichers/reachability/main_test.go new file mode 100644 index 000000000..6cb57f005 --- /dev/null +++ b/components/enrichers/reachability/main_test.go @@ -0,0 +1,65 @@ +package main + +import ( + "fmt" + v1 "github.com/ocurity/dracon/api/proto/v1" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/proto" + "os" + "strings" + "testing" +) + +func TestReachableEnricher(t *testing.T) { + // prepare + //dir, err := os.MkdirTemp("/tmp", "") + //require.NoError(t, err) + + dir := "testdata" + readPath = dir + writePath = dir + sliceFile = dir + "/sampleReachables.json" + + run() + + pbBytes, err := os.ReadFile(dir + "/reachability.reachability.enriched.pb") + require.NoError(t, err) + + res := v1.EnrichedLaunchToolResponse{} + require.NoError(t, proto.Unmarshal(pbBytes, &res)) + + for _, finding := range res.Issues { + assert.Contains(t, fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"false\"") + } + + pbBytes, err = os.ReadFile(dir + "/bandit.reachability.enriched.pb") + require.NoError(t, err) + + res = v1.EnrichedLaunchToolResponse{} + require.NoError(t, proto.Unmarshal(pbBytes, &res)) + + for _, finding := range res.Issues { + assert.Contains(t, fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"true\"") + } + + pbBytes, err = os.ReadFile(dir + "/pip-safety.reachability.enriched.pb") + require.NoError(t, err) + + res = v1.EnrichedLaunchToolResponse{} + require.NoError(t, proto.Unmarshal(pbBytes, &res)) + + r := 0 + f := 0 + for _, finding := range res.Issues { + if strings.Contains(fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"false\"") { + f++ + } + if strings.Contains(fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"true\"") { + r++ + } + } + assert.Equal(t, 14, r) + assert.Equal(t, 9, f) + +} diff --git a/components/enrichers/reachability/task.yaml b/components/enrichers/reachability/task.yaml new file mode 100644 index 000000000..852021d64 --- /dev/null +++ b/components/enrichers/reachability/task.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: enricher-reachability + labels: + v1.dracon.ocurity.com/component: enricher +spec: + params: + - name: enricher-reachability-atom-slice-file + type: string + + workspaces: + - name: output + description: The workspace containing the source-code to scan. + steps: + - name: run-enricher + imagePullPolicy: IfNotPresent + image: '{{ default "ghcr.io/ocurity/dracon" .Values.container_registry }}/components/enrichers/reachability:latest' + command: ["/app/components/enrichers/reachability/reachability"] + env: + - name: READ_PATH + value: $(workspaces.output.path)/.dracon/producers + - name: WRITE_PATH + value: "$(workspaces.output.path)/.dracon/enrichers/reachability" + - name: ATOM_SLICE + value: "$(params.enricher-reachability-atom-slice-file)" diff --git a/components/enrichers/reachability/testdata/bandit.tagged.pb b/components/enrichers/reachability/testdata/bandit.tagged.pb new file mode 100644 index 0000000000000000000000000000000000000000..15d37f943756b20ad43edd75313098da714a4f28 GIT binary patch literal 736 zcmYjO%Wm306ipLEA|y6QU6gLFkPx;M8)F-6EU{?XREm_QZAiLBW6w2qamFw+Es;ymH@>R z5{^Wop|C81w<_+-p93Qg80oTR)Nc81P19imGcbBrH}lKeJGi>J`=~JWY61++F`=jM z-V?q)^uD~gzQ3GVqo^558nrxGKlJKKTJjRpNRVzx4F#pCd^JME=q2gYIsm* zHPyvw#a67`vfF+Xdu|$z(6{1nP%^Tq>VXlw_ZLorV_|& zS4PSb&-J^f84+2L$Ix&Z+JG1L0-;P{i(~~K-i<-$AywK7RCDBVXKUd^PLYGEMpf#N znY|~4z=QTqy<4q%hRJHNCPHjWP7Q%YdJc!{f7SP9X% z9C$V|?XfYaWNL*2)3h^ur1=tsG?cW@)pFcm63`^DLI)ko54_kSqtvs;flrg^2&t1! I=0,<2.10.1]0:�Advisory: Jinja2 2.10.1 adds 'SandboxedEnvironment' to handle 'str.format_map' in order to prevent code execution through untrusted format strings. +https://github.com/pallets/jinja/commit/a2a6c930bcca591a25d2b316fcfd2d6793897b26 +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/54679/97cBunknownJCVE-2019-10906RI7b455932-99b1-4bca-8514-4dbf501767ba:fa85d66b-6e1a-4f45-ada4-37919e3415ac� + jinja2:2.10Vulnerable Dependency jinja2[>=0]0:�Advisory: In Jinja2, the from_string function is prone to Server Side Template Injection (SSTI) where it takes the "source" parameter as a template object, renders it, and then returns it. The attacker can exploit it with {{INJECTION COMMANDS}} in a URI. +NOTE: The maintainer and multiple third parties believe that this vulnerability isn't valid because users shouldn't use untrusted templates without sandboxing. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/70612/97cBunknownJ +CVE-2019-8341RI7b455932-99b1-4bca-8514-4dbf501767ba:7f4ad151-c505-45af-9437-7a15a6fd7e69� + jinja2:2.10Vulnerable Dependencyjinja2[<3.1.3]0:�Advisory: Jinja2 before 3.1.3 is affected by a Cross-Site Scripting vulnerability. Special placeholders in the template allow writing code similar to Python syntax. It is possible to inject arbitrary HTML attributes into the rendered HTML template. The Jinja 'xmlattr' filter can be abused to inject arbitrary HTML attribute keys and values, bypassing the auto escaping mechanism and potentially leading to XSS. It may also be possible to bypass attribute validation checks if they are blacklist-based. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/64227/97cBunknownJCVE-2024-22195RI7b455932-99b1-4bca-8514-4dbf501767ba:1e8166ce-93bc-4d6b-8c0b-ab7939bed6f1� + jinja2:2.10Vulnerable Dependencyjinja2[<2.11.3]0:�Advisory: This affects the package jinja2 from 0.0.0 and before 2.11.3. The ReDoS vulnerability is mainly due to the '_punctuation_re regex' operator and its use of multiple wildcards. The last wildcard is the most exploitable as it searches for trailing punctuation. This issue can be mitigated by Markdown to format user content instead of the urlize filter, or by implementing request timeouts and limiting process memory. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/39525/97cBunknownJCVE-2020-28493RI7b455932-99b1-4bca-8514-4dbf501767ba:c73d960e-7b9f-426a-a9e4-56eac749d359� +idna:2.8Vulnerable Dependency +idna[<3.7]0:�Advisory: CVE-2024-3651 impacts the idna.encode() function, where a specially crafted argument could lead to significant resource consumption, causing a denial-of-service. In version 3.7, this function has been updated to reject such inputs efficiently, minimizing resource use. A practical workaround involves enforcing a maximum domain name length of 253 characters before encoding, as the vulnerability is triggered by unusually large inputs that normal operations wouldn't encounter. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/67895/97cBunknownJ +CVE-2024-3651RI7b455932-99b1-4bca-8514-4dbf501767ba:03b5ff48-5571-4eab-8cc1-60d5e6abeb6c� + +hiredis:0.3.1Vulnerable Dependencyhiredis[<2.1.0]0:�Advisory: Hiredis (python wrapper for hiredis) 2.1.0 supports hiredis 1.1.0, that includes a security fix. +https://github.com/redis/hiredis-py/pull/135 +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/53276/97cBunknownJCVE-2021-32765RI7b455932-99b1-4bca-8514-4dbf501767ba:dced5cc4-2136-4839-8520-5f822eec5cbd� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.9.0]0:�Advisory: Aiohttp 3.9.0 includes a fix for CVE-2023-49081: Improper validation made it possible for an attacker to modify the HTTP request (e.g. to insert a new header) or create a new HTTP request if the attacker controls the HTTP version. The vulnerability only occurs if the attacker can control the HTTP version of the request. +https://github.com/aio-libs/aiohttp/security/advisories/GHSA-q3qx-c6g2-7pw2 +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/62582/97cBunknownJCVE-2023-49081RI7b455932-99b1-4bca-8514-4dbf501767ba:bef0fcad-7093-4288-80d8-665cda75f374� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.9.0]0:�Advisory: Affected versions of aiohttp are vulnerable to an Improper Validation vulnerability. It is possible for an attacker to modify the HTTP request (e.g. insert a new header) or even create a new HTTP request if the attacker controls the HTTP method. The vulnerability occurs only if the attacker can control the HTTP method (GET, POST etc.) of the request. If the attacker can control the HTTP version of the request it will be able to modify the request (request smuggling). +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/62583/97cBunknownJCVE-2023-49082RI7b455932-99b1-4bca-8514-4dbf501767ba:1450429f-2e1b-4c8b-93d5-124b6f2ef529� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[>1.0.5,<3.9.2]0:�Advisory: The vulnerability lies in the improper configuration of static resource resolution when aiohttp is used as a web server. It occurs when the follow_symlinks option is enabled without proper validation, leading to directory traversal vulnerabilities. Unauthorized access to arbitrary files on the system could potentially occur. The affected versions are >1.0.5, and the issue was patched in version 3.9.2. As a workaround, it is advised to disable the follow_symlinks option outside of a restricted local development environment, especially in a server accepting requests from remote users. Using a reverse proxy server to handle static resources is also recommended. +https://github.com/aio-libs/aiohttp/commit/1c335944d6a8b1298baf179b7c0b3069f10c514b +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/64642/97cBunknownJCVE-2024-23334RI7b455932-99b1-4bca-8514-4dbf501767ba:7968ef82-cf5e-4d2e-9787-a89f866e5f24� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.9.4]0:�Advisory: aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. A XSS vulnerability exists on index pages for static file handling. This vulnerability is fixed in 3.9.4. We have always recommended using a reverse proxy server (e.g. nginx) for serving static files. Users following the recommendation are unaffected. Other users can disable `show_index` if unable to upgrade. See CVE-2024-27306. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/70630/97cBunknownJCVE-2024-27306RI7b455932-99b1-4bca-8514-4dbf501767ba:78fbec5a-8968-4313-afac-ddcf4b235de3� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.8.6]0:�Advisory: Aiohttp 3.8.6 updates vendored copy of 'llhttp' to v9.1.3 to include a security fix. +https://github.com/aio-libs/aiohttp/security/advisories/GHSA-pjjw-qhg8-p2p9 +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/61657/97cBunknownRI7b455932-99b1-4bca-8514-4dbf501767ba:265ccdf9-1783-408c-8b95-1d69b03d9116� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.8.6]0:�Advisory: Aiohttp 3.8.6 includes a fix for CVE-2023-47627: The HTTP parser in AIOHTTP has numerous problems with header parsing, which could lead to request smuggling. This parser is only used when AIOHTTP_NO_EXTENSIONS is enabled (or not using a prebuilt wheel). +https://github.com/aio-libs/aiohttp/security/advisories/GHSA-gfw2-4jvh-wgfg +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/62326/97cBunknownJCVE-2023-47627RI7b455932-99b1-4bca-8514-4dbf501767ba:1955efb5-e200-4924-8ba2-ac3688016b31� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<=3.8.4]0:�Advisory: Aiohttp 3.8.5 includes a fix for CVE-2023-37276: Sending a crafted HTTP request will cause the server to misinterpret one of the HTTP header values leading to HTTP request smuggling. +https://github.com/aio-libs/aiohttp/commit/9337fb3f2ab2b5f38d7e98a194bde6f7e3d16c40 +https://github.com/aio-libs/aiohttp/security/advisories/GHSA-45c4-8wx5-qw6w +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/59725/97cBunknownJCVE-2023-37276RI7b455932-99b1-4bca-8514-4dbf501767ba:d0b61b47-3bd3-453c-9210-55a48f22dce3� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.7.4]0:�Advisory: Aiohttp 3.7.4 includes a fix for CVE-2021-21330: In aiohttp before version 3.7.4 there is an open redirect vulnerability. A maliciously crafted link to an aiohttp-based web-server could redirect the browser to a different website. It is caused by a bug in the 'aiohttp.web_middlewares.normalize_path_middleware' middleware. A workaround can be to avoid using 'aiohttp.web_middlewares.normalize_path_middleware' in your applications. +https://github.com/aio-libs/aiohttp/security/advisories/GHSA-v6wp-4m6f-gcjg +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/39659/97cBunknownJCVE-2021-21330RI7b455932-99b1-4bca-8514-4dbf501767ba:f31222f3-3484-479c-9926-6f65c17da4a6� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.9.1]0:�Advisory: The aiohttp versions minor than 3.9. has a vulnerability that affects the Python HTTP parser used in the aiohttp library. It allows for minor differences in allowable character sets, which could lead to robust frame boundary matching of proxies to protect against the injection of additional requests. The vulnerability also allows + exceptions during validation that aren't handled consistently with other malformed inputs. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/64644/97cBunknownJCVE-2024-23829RI7b455932-99b1-4bca-8514-4dbf501767ba:7e438725-6968-4630-94de-cd3314ff51f4� + + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.8.0]0:� Advisory: Aiohttp 3.8.0 includes a fix for CVE-2023-47641: Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. +https://github.com/aio-libs/aiohttp/security/advisories/GHSA-xx9p-xxvh-7g8j +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/62327/97cBunknownJCVE-2023-47641RI7b455932-99b1-4bca-8514-4dbf501767ba:a84ca030-3da6-475d-8077-adc03c5a4a92� + +aiohttp:3.5.3Vulnerable Dependencyaiohttp[<3.8.0]0:�Advisory: Aiohttp 3.8.0 adds validation of HTTP header keys and values to prevent header injection. +https://github.com/aio-libs/aiohttp/issues/4818 +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/42692/97cBunknownRI7b455932-99b1-4bca-8514-4dbf501767ba:b175837a-1d67-45e8-b811-cd44acbc619d� +aiohttp-jinja2:1.1.0Vulnerable Dependencyaiohttp-jinja2[<1.1.1]0:�Advisory: Aiohttp-jinja2 1.1.1 updates minimal supported 'Jinja2' version to 2.10.1 to include security fixes. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/37095/97cBunknownJ +CVE-2014-1402RI7b455932-99b1-4bca-8514-4dbf501767ba:9a3ba115-0cc3-427b-b734-d1b3e17fc40c� +aiohttp-jinja2:1.1.0Vulnerable Dependencyaiohttp-jinja2[<1.1.1]0:�Advisory: Aiohttp-jinja2 1.1.1 updates minimal supported 'Jinja2' version to 2.10.1 to include security fixes. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/44431/97cBunknownJCVE-2016-10745RI7b455932-99b1-4bca-8514-4dbf501767ba:5547c6ed-d33b-4c08-87cc-cde8a002a47e� +aiohttp-jinja2:1.1.0Vulnerable Dependencyaiohttp-jinja2[<1.1.1]0:�Advisory: Aiohttp-jinja2 1.1.1 updates minimal supported 'Jinja2' version to 2.10.1 to include security fixes. +Fixed Versions: [],Resources: [], More Info: https://data.safetycli.com/v/44432/97cBunknownJCVE-2019-10906RI7b455932-99b1-4bca-8514-4dbf501767ba:37891a4f-4799-46e7-bc02-3bc095ebf2ec diff --git a/components/enrichers/reachability/testdata/reachability.tagged.pb b/components/enrichers/reachability/testdata/reachability.tagged.pb new file mode 100644 index 000000000..67f79d95a --- /dev/null +++ b/components/enrichers/reachability/testdata/reachability.tagged.pb @@ -0,0 +1,4 @@ + +. +$afbd6e5c-70c3-4330-9540-ffd0647812e9���� reachabilityd + pyyaml:3.13 some type/some/target reachables 0:foo barR$e76c1e8f-4973-4c25-9475-179e0e7d35d7 diff --git a/components/enrichers/reachability/testdata/sampleReachables.json b/components/enrichers/reachability/testdata/sampleReachables.json new file mode 100644 index 000000000..3fd4e92e0 --- /dev/null +++ b/components/enrichers/reachability/testdata/sampleReachables.json @@ -0,0 +1 @@ +{"reachables":[{"flows":[{"id":4716,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":64,"columnNumber":19,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4721,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":65,"columnNumber":24,"tags":""},{"id":4767,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4774,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp19.acquire()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4790,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp20()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4732,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":68,"columnNumber":37,"tags":""},{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5994,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":19,"tags":"framework-input"},{"id":4748,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Mark.get_for_student(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":71,"columnNumber":44,"tags":""},{"id":909,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":19,"columnNumber":31,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":975,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":24,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":976,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":24,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":991,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp3()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":24,"columnNumber":20,"tags":""},{"id":927,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q, params)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":25,"columnNumber":19,"tags":""},{"id":932,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":26,"columnNumber":28,"tags":""},{"id":933,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":26,"columnNumber":28,"tags":""},{"id":954,"label":"IDENTIFIER","name":"result","fullName":"","signature":"","isExternal":false,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":47,"tags":""},{"id":955,"label":"CALL","name":"__iter__","fullName":"result.__iter__","signature":"","isExternal":true,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":20,"tags":""},{"id":964,"label":"CALL","name":"__next__","fullName":"tmp1.__next__","signature":"","isExternal":true,"code":"tmp1.__next__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":20,"tags":""},{"id":888,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":15,"columnNumber":23,"tags":""},{"id":890,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":21,"tags":""},{"id":891,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":20,"tags":""},{"id":896,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":16,"tags":""},{"id":897,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":9,"tags":""},{"id":944,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\mark.py:.Mark.from_raw","signature":"","isExternal":false,"code":"Mark.from_raw(r)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":21,"tags":""},{"id":971,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Mark.from_raw(r) for r in result]","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":13,"tags":""},{"id":4754,"label":"CALL","name":"get_for_student","fullName":"sqli\\dao\\mark.py:.Mark.get_for_student","signature":"","isExternal":false,"code":"Mark.get_for_student(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":71,"columnNumber":23,"tags":""},{"id":4817,"label":"IDENTIFIER","name":"marks","fullName":"","signature":"","isExternal":false,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":33,"tags":""},{"id":4832,"label":"CALL","name":"groupby","fullName":"itertools.py:.groupby","signature":"","isExternal":true,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":25,"tags":""},{"id":4833,"label":"IDENTIFIER","name":"tmp25","fullName":"","signature":"","isExternal":false,"code":"tmp25 = groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4839,"label":"CALL","name":"__iter__","fullName":"","signature":"","isExternal":false,"code":"tmp25.__iter__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4849,"label":"CALL","name":"__next__","fullName":"","signature":"","isExternal":false,"code":"tmp24.__next__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4860,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp26[1]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4813,"label":"CALL","name":"list","fullName":"__builtin.list","signature":"","isExternal":true,"code":"list(ms)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":25,"tags":""},{"id":4810,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp23[c]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4906,"label":"IDENTIFIER","name":"courses_marks","fullName":"","signature":"","isExternal":false,"code":"course.id in courses_marks","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":25,"tags":""},{"id":4905,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":12,"tags":""},{"id":4874,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":36,"tags":""},{"id":4880,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(course, courses_marks.get(course.id))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":9,"tags":""},{"id":4884,"label":"IDENTIFIER","name":"tmp27","fullName":"","signature":"","isExternal":false,"code":"tmp27.append((course, courses_marks.get(course.id)))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":75,"columnNumber":15,"tags":""},{"id":4929,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"tmp29['results'] = results","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":44,"tags":""},{"id":4928,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp29['results']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":12,"tags":""},{"id":4933,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'student': student, 'results': results}","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":4412,"label":"IDENTIFIER","name":"last_visited","fullName":"","signature":"","isExternal":false,"code":"last_visited = session.get('last_visited', 'never')","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":28,"columnNumber":5,"tags":"framework-input"},{"id":4546,"label":"IDENTIFIER","name":"last_visited","fullName":"","signature":"","isExternal":false,"code":"tmp6['last_visited'] = last_visited","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":29,"tags":""},{"id":4545,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['last_visited']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""},{"id":6315,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"tmp0.add_route('GET', r'/', views.index)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":10,"columnNumber":39,"tags":""},{"id":2948,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.index","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":10,"columnNumber":39,"tags":""},{"id":2964,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.index","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":11,"columnNumber":40,"tags":""},{"id":4388,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":23,"columnNumber":17,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4395,"label":"IDENTIFIER","name":"request","fullName":"","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":37,"tags":"pkg:pypi/aiohttp@3.5.3"},{"id":3988,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web_request.py:.Request","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":26,"columnNumber":25,"tags":"pkg:pypi/aiohttp@3.5.3, framework"},{"id":3993,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":24,"tags":""},{"id":4018,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4025,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp1.acquire()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4041,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp2()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4008,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":31,"tags":""},{"id":2157,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":2184,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2185,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2200,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":431,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":436,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":18,"tags":""},{"id":437,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":17,"tags":""},{"id":435,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, title, description ' 'FROM courses WHERE id = %s'","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":19,"columnNumber":17,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5433,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":24,"tags":""},{"id":5438,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":143,"columnNumber":31,"tags":""},{"id":5470,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp56['course'] = course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":149,"columnNumber":31,"tags":""},{"id":5469,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp56['course']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":20,"tags":""},{"id":5479,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'errors': e.as_dict(),\n 'course': course,\n 'student': student}","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":13,"tags":""}],"purls":[]},{"flows":[{"id":2158,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":37,"tags":"framework-input"},{"id":2163,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":26,"columnNumber":18,"tags":""},{"id":2164,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":26,"columnNumber":17,"tags":""},{"id":2162,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s'","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":24,"columnNumber":17,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""}],"purls":[]},{"flows":[{"id":5215,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":112,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5220,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":113,"columnNumber":24,"tags":""},{"id":5335,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5342,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp52.acquire()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5358,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp53()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5231,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5240,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":117,"columnNumber":16,"tags":""},{"id":5319,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp49['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":27,"tags":""},{"id":5318,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp49['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":16,"tags":""},{"id":5332,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course, 'errors': {}}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":9,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":5215,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":112,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5220,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":113,"columnNumber":24,"tags":""},{"id":5335,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5342,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp52.acquire()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5358,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp53()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5231,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5240,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":117,"columnNumber":16,"tags":""},{"id":5319,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp49['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":27,"tags":""},{"id":5318,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp49['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":16,"tags":""},{"id":5332,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course, 'errors': {}}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":9,"tags":""},{"id":6324,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"tmp9.add_route('GET', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":26,"tags":""},{"id":3101,"label":"IDENTIFIER","name":"tmp9","fullName":"","signature":"","isExternal":false,"code":"tmp9.add_route('GET', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":5,"tags":""},{"id":3092,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.review","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":26,"tags":""},{"id":3108,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.review","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":26,"tags":""},{"id":3117,"label":"IDENTIFIER","name":"tmp10","fullName":"","signature":"","isExternal":false,"code":"tmp10.add_route('POST', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":28,"columnNumber":5,"tags":""},{"id":5215,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":112,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5220,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":113,"columnNumber":24,"tags":""},{"id":5335,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5342,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp52.acquire()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5358,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp53()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5275,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp47['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":124,"columnNumber":31,"tags":""},{"id":5274,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp47['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":123,"columnNumber":24,"tags":""},{"id":5293,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {\n 'course': course,\n 'errors': {\n 'review_text': 'this is required field',\n },\n }","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":123,"columnNumber":17,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":4947,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":84,"columnNumber":19,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4952,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":85,"columnNumber":24,"tags":""},{"id":5030,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":91,"columnNumber":16,"tags":""},{"id":5037,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp36.acquire()","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":91,"columnNumber":16,"tags":""},{"id":5053,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp37()","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":91,"columnNumber":16,"tags":""},{"id":5020,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get_many(conn)","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":92,"columnNumber":41,"tags":""},{"id":499,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":26,"columnNumber":24,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":591,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":36,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":592,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":36,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":607,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp8()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":36,"columnNumber":20,"tags":""},{"id":543,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":37,"columnNumber":19,"tags":""},{"id":548,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":38,"columnNumber":28,"tags":""},{"id":549,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":38,"columnNumber":28,"tags":""},{"id":570,"label":"IDENTIFIER","name":"result","fullName":"","signature":"","isExternal":false,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":39,"columnNumber":49,"tags":""},{"id":571,"label":"CALL","name":"__iter__","fullName":"result.__iter__","signature":"","isExternal":true,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":39,"columnNumber":20,"tags":""},{"id":580,"label":"CALL","name":"__next__","fullName":"tmp6.__next__","signature":"","isExternal":true,"code":"tmp6.__next__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":39,"columnNumber":20,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":560,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(r)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":39,"columnNumber":21,"tags":""},{"id":587,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Course.from_raw(r) for r in result]","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":39,"columnNumber":13,"tags":""},{"id":5025,"label":"CALL","name":"get_many","fullName":"sqli\\dao\\course.py:.Course.get_many","signature":"","isExternal":false,"code":"Course.get_many(conn)","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":92,"columnNumber":25,"tags":""},{"id":5074,"label":"IDENTIFIER","name":"courses","fullName":"","signature":"","isExternal":false,"code":"tmp40['courses'] = courses","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":93,"columnNumber":24,"tags":""},{"id":5073,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp40['courses']","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":93,"columnNumber":12,"tags":""},{"id":5078,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'courses': courses}","typeFullName":"","parentMethodName":"courses","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":93,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":4450,"label":"IDENTIFIER","name":"data","fullName":"","signature":"","isExternal":false,"code":"data = request.post()","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":36,"columnNumber":9,"tags":"framework-input"},{"id":4459,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"data['password']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":38,"columnNumber":20,"tags":""},{"id":4512,"label":"IDENTIFIER","name":"password","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":41,"tags":""},{"id":4517,"label":"CALL","name":"check_password","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":21,"tags":""},{"id":4526,"label":"IDENTIFIER","name":"user","fullName":"","signature":"","isExternal":false,"code":"auth_user = user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":43,"columnNumber":25,"tags":""},{"id":4556,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp6['auth_user'] = auth_user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":48,"columnNumber":26,"tags":""},{"id":4555,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['auth_user']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""}],"purls":[]},{"flows":[{"id":2157,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":2184,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2185,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2200,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":2158,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":37,"tags":"framework-input"},{"id":2163,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":26,"columnNumber":18,"tags":""},{"id":2164,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":26,"columnNumber":17,"tags":""},{"id":2162,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s'","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":24,"columnNumber":17,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""},{"id":4014,"label":"CALL","name":"get","fullName":"sqli\\dao\\user.py:.User.get","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":22,"tags":""},{"id":4015,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return await User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":9,"tags":""},{"id":4397,"label":"CALL","name":"get_auth_user","fullName":"sqli\\utils\\auth.py:.get_auth_user","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":23,"tags":""},{"id":4556,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp6['auth_user'] = auth_user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":48,"columnNumber":26,"tags":""},{"id":4555,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['auth_user']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""}],"purls":[]},{"flows":[{"id":4388,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":23,"columnNumber":17,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4395,"label":"IDENTIFIER","name":"request","fullName":"","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":37,"tags":"pkg:pypi/aiohttp@3.5.3"},{"id":3988,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web_request.py:.Request","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":26,"columnNumber":25,"tags":"pkg:pypi/aiohttp@3.5.3, framework"},{"id":3993,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":24,"tags":""},{"id":4018,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4025,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp1.acquire()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4041,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp2()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4008,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":31,"tags":""},{"id":2157,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":2184,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2185,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2200,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5994,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":19,"tags":"framework-input"},{"id":5418,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":141,"columnNumber":37,"tags":""},{"id":5427,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5433,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":24,"tags":""},{"id":5438,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":143,"columnNumber":31,"tags":""},{"id":5470,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp56['course'] = course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":149,"columnNumber":31,"tags":""},{"id":5469,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp56['course']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":20,"tags":""},{"id":5479,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'errors': e.as_dict(),\n 'course': course,\n 'student': student}","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5240,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":117,"columnNumber":16,"tags":""},{"id":5319,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp49['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":27,"tags":""},{"id":5318,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp49['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":16,"tags":""},{"id":5332,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course, 'errors': {}}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":9,"tags":""},{"id":6324,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"tmp9.add_route('GET', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":26,"tags":""},{"id":3101,"label":"IDENTIFIER","name":"tmp9","fullName":"","signature":"","isExternal":false,"code":"tmp9.add_route('GET', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":5,"tags":""},{"id":3092,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.review","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":26,"tags":""},{"id":3108,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.review","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":26,"tags":""},{"id":3117,"label":"IDENTIFIER","name":"tmp10","fullName":"","signature":"","isExternal":false,"code":"tmp10.add_route('POST', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":28,"columnNumber":5,"tags":""},{"id":5215,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":112,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5220,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":113,"columnNumber":24,"tags":""},{"id":5335,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5342,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp52.acquire()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5358,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp53()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5275,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp47['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":124,"columnNumber":31,"tags":""},{"id":5274,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp47['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":123,"columnNumber":24,"tags":""},{"id":5293,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {\n 'course': course,\n 'errors': {\n 'review_text': 'this is required field',\n },\n }","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":123,"columnNumber":17,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5994,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":19,"tags":"framework-input"},{"id":4732,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":68,"columnNumber":37,"tags":""},{"id":4748,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Mark.get_for_student(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":71,"columnNumber":44,"tags":""},{"id":909,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":19,"columnNumber":31,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":975,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":24,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":976,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":24,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":991,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp3()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":24,"columnNumber":20,"tags":""},{"id":927,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q, params)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":25,"columnNumber":19,"tags":""},{"id":932,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":26,"columnNumber":28,"tags":""},{"id":933,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":26,"columnNumber":28,"tags":""},{"id":954,"label":"IDENTIFIER","name":"result","fullName":"","signature":"","isExternal":false,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":47,"tags":""},{"id":955,"label":"CALL","name":"__iter__","fullName":"result.__iter__","signature":"","isExternal":true,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":20,"tags":""},{"id":964,"label":"CALL","name":"__next__","fullName":"tmp1.__next__","signature":"","isExternal":true,"code":"tmp1.__next__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":20,"tags":""},{"id":888,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":15,"columnNumber":23,"tags":""},{"id":890,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":21,"tags":""},{"id":891,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":20,"tags":""},{"id":896,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":16,"tags":""},{"id":897,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":9,"tags":""},{"id":944,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\mark.py:.Mark.from_raw","signature":"","isExternal":false,"code":"Mark.from_raw(r)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":21,"tags":""},{"id":971,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Mark.from_raw(r) for r in result]","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":13,"tags":""},{"id":4754,"label":"CALL","name":"get_for_student","fullName":"sqli\\dao\\mark.py:.Mark.get_for_student","signature":"","isExternal":false,"code":"Mark.get_for_student(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":71,"columnNumber":23,"tags":""},{"id":4817,"label":"IDENTIFIER","name":"marks","fullName":"","signature":"","isExternal":false,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":33,"tags":""},{"id":4832,"label":"CALL","name":"groupby","fullName":"itertools.py:.groupby","signature":"","isExternal":true,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":25,"tags":""},{"id":4833,"label":"IDENTIFIER","name":"tmp25","fullName":"","signature":"","isExternal":false,"code":"tmp25 = groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4839,"label":"CALL","name":"__iter__","fullName":"","signature":"","isExternal":false,"code":"tmp25.__iter__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4849,"label":"CALL","name":"__next__","fullName":"","signature":"","isExternal":false,"code":"tmp24.__next__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4860,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp26[1]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4813,"label":"CALL","name":"list","fullName":"__builtin.list","signature":"","isExternal":true,"code":"list(ms)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":25,"tags":""},{"id":4810,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp23[c]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4906,"label":"IDENTIFIER","name":"courses_marks","fullName":"","signature":"","isExternal":false,"code":"course.id in courses_marks","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":25,"tags":""},{"id":4905,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":12,"tags":""},{"id":4874,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":36,"tags":""},{"id":4880,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(course, courses_marks.get(course.id))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":9,"tags":""},{"id":4884,"label":"IDENTIFIER","name":"tmp27","fullName":"","signature":"","isExternal":false,"code":"tmp27.append((course, courses_marks.get(course.id)))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":75,"columnNumber":15,"tags":""},{"id":4929,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"tmp29['results'] = results","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":44,"tags":""},{"id":4928,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp29['results']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":12,"tags":""},{"id":4933,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'student': student, 'results': results}","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":4822,"label":"METHOD_PARAMETER_IN","name":"m","fullName":"","signature":"","isExternal":false,"code":"m","typeFullName":"ANY","parentMethodName":"","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":47,"tags":"framework-input"},{"id":4826,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"m.course_id","typeFullName":"","parentMethodName":"","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":50,"tags":""},{"id":4827,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"lambda m: m.course_id","typeFullName":"","parentMethodName":"","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":40,"tags":""},{"id":4818,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":40,"tags":"framework-input"},{"id":4832,"label":"CALL","name":"groupby","fullName":"itertools.py:.groupby","signature":"","isExternal":true,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":25,"tags":""},{"id":4833,"label":"IDENTIFIER","name":"tmp25","fullName":"","signature":"","isExternal":false,"code":"tmp25 = groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4839,"label":"CALL","name":"__iter__","fullName":"","signature":"","isExternal":false,"code":"tmp25.__iter__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4849,"label":"CALL","name":"__next__","fullName":"","signature":"","isExternal":false,"code":"tmp24.__next__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4860,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp26[1]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4813,"label":"CALL","name":"list","fullName":"__builtin.list","signature":"","isExternal":true,"code":"list(ms)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":25,"tags":""},{"id":4810,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp23[c]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4906,"label":"IDENTIFIER","name":"courses_marks","fullName":"","signature":"","isExternal":false,"code":"course.id in courses_marks","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":25,"tags":""},{"id":4905,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":12,"tags":""},{"id":4874,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":36,"tags":""},{"id":4880,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(course, courses_marks.get(course.id))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":9,"tags":""},{"id":4884,"label":"IDENTIFIER","name":"tmp27","fullName":"","signature":"","isExternal":false,"code":"tmp27.append((course, courses_marks.get(course.id)))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":75,"columnNumber":15,"tags":""},{"id":4929,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"tmp29['results'] = results","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":44,"tags":""},{"id":4928,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp29['results']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":12,"tags":""},{"id":4933,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'student': student, 'results': results}","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":5,"tags":""}],"purls":[]},{"flows":[{"id":431,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":436,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":18,"tags":""},{"id":5967,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":5109,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":101,"columnNumber":41,"tags":""},{"id":5125,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"Review.get_for_course(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":104,"columnNumber":53,"tags":""},{"id":1292,"label":"METHOD_PARAMETER_IN","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"course_id","typeFullName":"__builtin.int","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":18,"columnNumber":48,"tags":""},{"id":1300,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"(course_id,)","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":22,"columnNumber":19,"tags":""},{"id":1301,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(course_id,)","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":22,"columnNumber":18,"tags":""},{"id":1305,"label":"IDENTIFIER","name":"params","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q, params)","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":24,"columnNumber":34,"tags":""},{"id":1314,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":25,"columnNumber":28,"tags":""},{"id":1315,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":25,"columnNumber":28,"tags":""},{"id":1336,"label":"IDENTIFIER","name":"result","fullName":"","signature":"","isExternal":false,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":26,"columnNumber":49,"tags":""},{"id":1337,"label":"CALL","name":"__iter__","fullName":"result.__iter__","signature":"","isExternal":true,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":26,"columnNumber":20,"tags":""},{"id":1346,"label":"CALL","name":"__next__","fullName":"tmp1.__next__","signature":"","isExternal":true,"code":"tmp1.__next__()","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":26,"columnNumber":20,"tags":""},{"id":1270,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":14,"columnNumber":23,"tags":""},{"id":1272,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":15,"columnNumber":21,"tags":""},{"id":1273,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":15,"columnNumber":20,"tags":""},{"id":1278,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":15,"columnNumber":16,"tags":""},{"id":1279,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":15,"columnNumber":9,"tags":""},{"id":1326,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\review.py:.Review.from_raw","signature":"","isExternal":false,"code":"Review.from_raw(r)","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":26,"columnNumber":21,"tags":""},{"id":1353,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Review.from_raw(r) for r in result]","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":26,"columnNumber":13,"tags":""},{"id":5130,"label":"CALL","name":"get_for_course","fullName":"sqli\\dao\\review.py:.Review.get_for_course","signature":"","isExternal":false,"code":"Review.get_for_course(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":104,"columnNumber":25,"tags":""},{"id":5192,"label":"IDENTIFIER","name":"reviews","fullName":"","signature":"","isExternal":false,"code":"tmp46['reviews'] = reviews","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":107,"columnNumber":24,"tags":""},{"id":5191,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp46['reviews']","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":106,"columnNumber":12,"tags":""},{"id":5201,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course,\n 'reviews': reviews,\n 'students': students}","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":106,"columnNumber":5,"tags":""}],"purls":[]},{"flows":[{"id":4716,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":64,"columnNumber":19,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4721,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":65,"columnNumber":24,"tags":""},{"id":4767,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4774,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp19.acquire()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4790,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp20()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4732,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":68,"columnNumber":37,"tags":""},{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1693,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1708,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":""},{"id":1673,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, name FROM students WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":17,"columnNumber":19,"tags":""},{"id":1678,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1679,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1682,"label":"IDENTIFIER","name":"r","fullName":"","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":37,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1687,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":20,"tags":""},{"id":1688,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":5215,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":112,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5220,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":113,"columnNumber":24,"tags":""},{"id":5335,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5342,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp52.acquire()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5358,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp53()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5231,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":2157,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":2184,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2185,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2200,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""},{"id":4014,"label":"CALL","name":"get","fullName":"sqli\\dao\\user.py:.User.get","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":22,"tags":""},{"id":4015,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return await User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":9,"tags":""},{"id":4397,"label":"CALL","name":"get_auth_user","fullName":"sqli\\utils\\auth.py:.get_auth_user","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":23,"tags":""},{"id":4556,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp6['auth_user'] = auth_user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":48,"columnNumber":26,"tags":""},{"id":4555,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['auth_user']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5433,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":24,"tags":""},{"id":5438,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":143,"columnNumber":31,"tags":""},{"id":5470,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp56['course'] = course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":149,"columnNumber":31,"tags":""},{"id":5469,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp56['course']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":20,"tags":""},{"id":5479,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'errors': e.as_dict(),\n 'course': course,\n 'student': student}","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5240,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":117,"columnNumber":16,"tags":""},{"id":5319,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp49['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":27,"tags":""},{"id":5318,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp49['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":16,"tags":""},{"id":5332,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course, 'errors': {}}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":9,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":1665,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":37,"tags":"framework-input"},{"id":1668,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":19,"columnNumber":18,"tags":""},{"id":1669,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":19,"columnNumber":17,"tags":""},{"id":1673,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, name FROM students WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":17,"columnNumber":19,"tags":""},{"id":1678,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1679,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1682,"label":"IDENTIFIER","name":"r","fullName":"","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":37,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1687,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":20,"tags":""},{"id":1688,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":13,"tags":""}],"purls":[]},{"flows":[{"id":4450,"label":"IDENTIFIER","name":"data","fullName":"","signature":"","isExternal":false,"code":"data = request.post()","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":36,"columnNumber":9,"tags":"framework-input"},{"id":4454,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"data['username']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":37,"columnNumber":20,"tags":""},{"id":4463,"label":"IDENTIFIER","name":"username","fullName":"","signature":"","isExternal":false,"code":"User.get_by_username(conn, username)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":40,"columnNumber":53,"tags":""},{"id":2227,"label":"METHOD_PARAMETER_IN","name":"username","fullName":"","signature":"","isExternal":false,"code":"username","typeFullName":"__builtin.str","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":31,"columnNumber":49,"tags":""},{"id":2232,"label":"IDENTIFIER","name":"username","fullName":"","signature":"","isExternal":false,"code":"(username,)","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":36,"columnNumber":18,"tags":""},{"id":2233,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(username,)","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":36,"columnNumber":17,"tags":""},{"id":2231,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE username = %s'","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":34,"columnNumber":17,"tags":""},{"id":2237,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE username = %s', (username,))","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":33,"columnNumber":19,"tags":""},{"id":2242,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":40,"tags":""},{"id":2243,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2248,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":20,"tags":""},{"id":2249,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":13,"tags":""},{"id":4468,"label":"CALL","name":"get_by_username","fullName":"sqli\\dao\\user.py:.User.get_by_username","signature":"","isExternal":false,"code":"User.get_by_username(conn, username)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":40,"columnNumber":26,"tags":""},{"id":4516,"label":"IDENTIFIER","name":"user","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":21,"tags":""},{"id":4517,"label":"CALL","name":"check_password","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":21,"tags":""},{"id":4526,"label":"IDENTIFIER","name":"user","fullName":"","signature":"","isExternal":false,"code":"auth_user = user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":43,"columnNumber":25,"tags":""},{"id":4556,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp6['auth_user'] = auth_user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":48,"columnNumber":26,"tags":""},{"id":4555,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['auth_user']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""}],"purls":[]},{"flows":[{"id":431,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":436,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":18,"tags":""},{"id":437,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":17,"tags":""},{"id":435,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, title, description ' 'FROM courses WHERE id = %s'","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":19,"columnNumber":17,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5240,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":117,"columnNumber":16,"tags":""},{"id":5319,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp49['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":27,"tags":""},{"id":5318,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp49['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":16,"tags":""},{"id":5332,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course, 'errors': {}}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":9,"tags":""},{"id":6324,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"tmp9.add_route('GET', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":26,"tags":""},{"id":3101,"label":"IDENTIFIER","name":"tmp9","fullName":"","signature":"","isExternal":false,"code":"tmp9.add_route('GET', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":5,"tags":""},{"id":3092,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.review","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":26,"tags":""},{"id":3108,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.review","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":26,"tags":""},{"id":3117,"label":"IDENTIFIER","name":"tmp10","fullName":"","signature":"","isExternal":false,"code":"tmp10.add_route('POST', r'/courses/{course_id:\\d+}/review', views.review)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":28,"columnNumber":5,"tags":""},{"id":5215,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":112,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5220,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":113,"columnNumber":24,"tags":""},{"id":5335,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5342,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp52.acquire()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":5358,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp53()","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":115,"columnNumber":16,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5275,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp47['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":124,"columnNumber":31,"tags":""},{"id":5274,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp47['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":123,"columnNumber":24,"tags":""},{"id":5293,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {\n 'course': course,\n 'errors': {\n 'review_text': 'this is required field',\n },\n }","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":123,"columnNumber":17,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1693,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1708,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":""},{"id":1673,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, name FROM students WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":17,"columnNumber":19,"tags":""},{"id":1678,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1679,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1682,"label":"IDENTIFIER","name":"r","fullName":"","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":37,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1687,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":20,"tags":""},{"id":1688,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":4574,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":52,"columnNumber":20,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4579,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":53,"columnNumber":24,"tags":""},{"id":4654,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":58,"columnNumber":16,"tags":""},{"id":4661,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp13.acquire()","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":58,"columnNumber":16,"tags":""},{"id":4677,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp14()","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":58,"columnNumber":16,"tags":""},{"id":4644,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get_many(conn)","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":59,"columnNumber":43,"tags":""},{"id":1734,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":25,"columnNumber":24,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1827,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1828,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1843,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp8()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":""},{"id":1779,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q, params)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":36,"columnNumber":19,"tags":""},{"id":1784,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":37,"columnNumber":29,"tags":""},{"id":1785,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":37,"columnNumber":29,"tags":""},{"id":1806,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"results.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":50,"tags":""},{"id":1807,"label":"CALL","name":"__iter__","fullName":"results.__iter__","signature":"","isExternal":true,"code":"results.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":20,"tags":""},{"id":1816,"label":"CALL","name":"__next__","fullName":"tmp6.__next__","signature":"","isExternal":true,"code":"tmp6.__next__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":20,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1796,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":21,"tags":""},{"id":1823,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Student.from_raw(r) for r in results]","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":13,"tags":""},{"id":4649,"label":"CALL","name":"get_many","fullName":"sqli\\dao\\student.py:.Student.get_many","signature":"","isExternal":false,"code":"Student.get_many(conn)","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":59,"columnNumber":26,"tags":""},{"id":4698,"label":"IDENTIFIER","name":"students","fullName":"","signature":"","isExternal":false,"code":"tmp17['students'] = students","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":60,"columnNumber":25,"tags":""},{"id":4697,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp17['students']","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":60,"columnNumber":12,"tags":""},{"id":4702,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'students': students}","typeFullName":"","parentMethodName":"students","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":60,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":4822,"label":"METHOD_PARAMETER_IN","name":"m","fullName":"","signature":"","isExternal":false,"code":"m","typeFullName":"ANY","parentMethodName":"","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":47,"tags":"framework-input"},{"id":4826,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"m.course_id","typeFullName":"","parentMethodName":"","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":50,"tags":""},{"id":4827,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"lambda m: m.course_id","typeFullName":"","parentMethodName":"","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":40,"tags":""},{"id":4818,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":40,"tags":"framework-input"},{"id":4832,"label":"CALL","name":"groupby","fullName":"itertools.py:.groupby","signature":"","isExternal":true,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":25,"tags":""},{"id":4833,"label":"IDENTIFIER","name":"tmp25","fullName":"","signature":"","isExternal":false,"code":"tmp25 = groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4839,"label":"CALL","name":"__iter__","fullName":"","signature":"","isExternal":false,"code":"tmp25.__iter__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4849,"label":"CALL","name":"__next__","fullName":"","signature":"","isExternal":false,"code":"tmp24.__next__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4860,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp26[1]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4813,"label":"CALL","name":"list","fullName":"__builtin.list","signature":"","isExternal":true,"code":"list(ms)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":25,"tags":""},{"id":4810,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp23[c]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4906,"label":"IDENTIFIER","name":"courses_marks","fullName":"","signature":"","isExternal":false,"code":"course.id in courses_marks","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":25,"tags":""},{"id":4905,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":12,"tags":""},{"id":4874,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":36,"tags":""},{"id":4880,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(course, courses_marks.get(course.id))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":9,"tags":""},{"id":4884,"label":"IDENTIFIER","name":"tmp27","fullName":"","signature":"","isExternal":false,"code":"tmp27.append((course, courses_marks.get(course.id)))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":75,"columnNumber":15,"tags":""},{"id":4929,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"tmp29['results'] = results","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":44,"tags":""},{"id":4928,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp29['results']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":12,"tags":""},{"id":4933,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'student': student, 'results': results}","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":5,"tags":""},{"id":6319,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"tmp4.add_route('GET', r'/students/{id:\\d+}', views.student)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":56,"tags":""},{"id":4716,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":64,"columnNumber":19,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4721,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":65,"columnNumber":24,"tags":""},{"id":4767,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4774,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp19.acquire()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4790,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp20()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":67,"columnNumber":16,"tags":""},{"id":4732,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":68,"columnNumber":37,"tags":""},{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1693,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1708,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":""},{"id":1673,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, name FROM students WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":17,"columnNumber":19,"tags":""},{"id":1678,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1679,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1682,"label":"IDENTIFIER","name":"r","fullName":"","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":37,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1687,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":20,"tags":""},{"id":1688,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":1665,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":37,"tags":"framework-input"},{"id":1668,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":19,"columnNumber":18,"tags":""},{"id":1669,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":19,"columnNumber":17,"tags":""},{"id":1673,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, name FROM students WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":17,"columnNumber":19,"tags":""},{"id":1678,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1679,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1682,"label":"IDENTIFIER","name":"r","fullName":"","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":37,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1687,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":20,"tags":""},{"id":1688,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":13,"tags":""},{"id":5424,"label":"CALL","name":"get","fullName":"sqli\\dao\\student.py:.Student.get","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":141,"columnNumber":25,"tags":""},{"id":5436,"label":"IDENTIFIER","name":"student","fullName":"","signature":"","isExternal":false,"code":"not student","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":143,"columnNumber":16,"tags":""},{"id":5475,"label":"IDENTIFIER","name":"student","fullName":"","signature":"","isExternal":false,"code":"tmp56['student'] = student","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":150,"columnNumber":32,"tags":""},{"id":5474,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp56['student']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":20,"tags":""},{"id":5479,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'errors': e.as_dict(),\n 'course': course,\n 'student': student}","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":13,"tags":""}],"purls":[]},{"flows":[{"id":5092,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":97,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5097,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":98,"columnNumber":24,"tags":""},{"id":5143,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":100,"columnNumber":16,"tags":""},{"id":5150,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp42.acquire()","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":100,"columnNumber":16,"tags":""},{"id":5166,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp43()","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":100,"columnNumber":16,"tags":""},{"id":5108,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":101,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":5386,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":135,"columnNumber":20,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5391,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":136,"columnNumber":24,"tags":""},{"id":5499,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5506,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp58.acquire()","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5522,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp59()","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5418,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":141,"columnNumber":37,"tags":""},{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5994,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":19,"tags":"framework-input"},{"id":5427,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5433,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":24,"tags":""},{"id":5438,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":143,"columnNumber":31,"tags":""},{"id":5470,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp56['course'] = course","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":149,"columnNumber":31,"tags":""},{"id":5469,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp56['course']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":20,"tags":""},{"id":5479,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'errors': e.as_dict(),\n 'course': course,\n 'student': student}","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":148,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":5092,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":97,"columnNumber":18,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5097,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":98,"columnNumber":24,"tags":""},{"id":5143,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":100,"columnNumber":16,"tags":""},{"id":5150,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp42.acquire()","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":100,"columnNumber":16,"tags":""},{"id":5166,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp43()","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":100,"columnNumber":16,"tags":""},{"id":5108,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":101,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5966,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"","lineNumber":16,"columnNumber":19,"tags":"framework-input"},{"id":5124,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Review.get_for_course(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":104,"columnNumber":47,"tags":""},{"id":1291,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":18,"columnNumber":30,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1357,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":23,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5986,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"","lineNumber":18,"columnNumber":30,"tags":""},{"id":5133,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get_many(conn)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":105,"columnNumber":43,"tags":""},{"id":1734,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":25,"columnNumber":24,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1827,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1828,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1843,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp8()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":""},{"id":1779,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q, params)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":36,"columnNumber":19,"tags":""},{"id":1784,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":37,"columnNumber":29,"tags":""},{"id":1785,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":37,"columnNumber":29,"tags":""},{"id":1806,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"results.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":50,"tags":""},{"id":1807,"label":"CALL","name":"__iter__","fullName":"results.__iter__","signature":"","isExternal":true,"code":"results.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":20,"tags":""},{"id":1816,"label":"CALL","name":"__next__","fullName":"tmp6.__next__","signature":"","isExternal":true,"code":"tmp6.__next__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":20,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1796,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":21,"tags":""},{"id":1823,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Student.from_raw(r) for r in results]","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":13,"tags":""},{"id":5138,"label":"CALL","name":"get_many","fullName":"sqli\\dao\\student.py:.Student.get_many","signature":"","isExternal":false,"code":"Student.get_many(conn)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":105,"columnNumber":26,"tags":""},{"id":5197,"label":"IDENTIFIER","name":"students","fullName":"","signature":"","isExternal":false,"code":"tmp46['students'] = students","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":108,"columnNumber":25,"tags":""},{"id":5196,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp46['students']","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":106,"columnNumber":12,"tags":""},{"id":5201,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course,\n 'reviews': reviews,\n 'students': students}","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":106,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":431,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":436,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":18,"tags":""},{"id":437,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":17,"tags":""},{"id":435,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, title, description ' 'FROM courses WHERE id = %s'","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":19,"columnNumber":17,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""}],"purls":[]},{"flows":[{"id":4450,"label":"IDENTIFIER","name":"data","fullName":"","signature":"","isExternal":false,"code":"data = request.post()","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":36,"columnNumber":9,"tags":"framework-input"},{"id":4459,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"data['password']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":38,"columnNumber":20,"tags":""},{"id":4512,"label":"IDENTIFIER","name":"password","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":41,"tags":""},{"id":4517,"label":"CALL","name":"check_password","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":21,"tags":""},{"id":4526,"label":"IDENTIFIER","name":"user","fullName":"","signature":"","isExternal":false,"code":"auth_user = user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":43,"columnNumber":25,"tags":""},{"id":4556,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp6['auth_user'] = auth_user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":48,"columnNumber":26,"tags":""},{"id":4555,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['auth_user']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""},{"id":6315,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"tmp0.add_route('GET', r'/', views.index)","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":10,"columnNumber":39,"tags":""},{"id":2948,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.index","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":10,"columnNumber":39,"tags":""},{"id":2964,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"views.index","typeFullName":"","parentMethodName":"setup_routes","parentMethodSignature":"","parentFileName":"sqli\\routes.py","parentPackageName":"","parentClassName":"","lineNumber":11,"columnNumber":40,"tags":""},{"id":4388,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":23,"columnNumber":17,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4395,"label":"IDENTIFIER","name":"request","fullName":"","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":25,"columnNumber":37,"tags":"pkg:pypi/aiohttp@3.5.3"},{"id":3988,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web_request.py:.Request","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":26,"columnNumber":25,"tags":"pkg:pypi/aiohttp@3.5.3, framework"},{"id":3993,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":24,"tags":""},{"id":4018,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4025,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp1.acquire()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4041,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp2()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4008,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":31,"tags":""},{"id":2157,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":2184,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2185,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2200,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":5386,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":135,"columnNumber":20,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5391,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":136,"columnNumber":24,"tags":""},{"id":5499,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5506,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp58.acquire()","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5522,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp59()","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5418,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":141,"columnNumber":37,"tags":""},{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1693,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1708,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":""},{"id":1673,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, name FROM students WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":17,"columnNumber":19,"tags":""},{"id":1678,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1679,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":21,"columnNumber":23,"tags":""},{"id":1682,"label":"IDENTIFIER","name":"r","fullName":"","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":37,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1687,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":20,"tags":""},{"id":1688,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Student.from_raw(r)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":22,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":4412,"label":"IDENTIFIER","name":"last_visited","fullName":"","signature":"","isExternal":false,"code":"last_visited = session.get('last_visited', 'never')","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":28,"columnNumber":5,"tags":"framework-input"},{"id":4546,"label":"IDENTIFIER","name":"last_visited","fullName":"","signature":"","isExternal":false,"code":"tmp6['last_visited'] = last_visited","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":29,"tags":""},{"id":4545,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['last_visited']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""}],"purls":[]},{"flows":[{"id":4388,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":23,"columnNumber":17,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":4393,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":24,"columnNumber":24,"tags":""},{"id":4473,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":39,"columnNumber":20,"tags":""},{"id":4480,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp2.acquire()","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":39,"columnNumber":20,"tags":""},{"id":4496,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp3()","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":39,"columnNumber":20,"tags":""},{"id":4462,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"User.get_by_username(conn, username)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":40,"columnNumber":47,"tags":""},{"id":2226,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":31,"columnNumber":31,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2253,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":32,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2254,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":32,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2269,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp5()","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":32,"columnNumber":20,"tags":""},{"id":2237,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE username = %s', (username,))","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":33,"columnNumber":19,"tags":""},{"id":2242,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":40,"tags":""},{"id":2243,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2248,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":20,"tags":""},{"id":2249,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get_by_username","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":38,"columnNumber":13,"tags":""},{"id":4468,"label":"CALL","name":"get_by_username","fullName":"sqli\\dao\\user.py:.User.get_by_username","signature":"","isExternal":false,"code":"User.get_by_username(conn, username)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":40,"columnNumber":26,"tags":""},{"id":4516,"label":"IDENTIFIER","name":"user","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":21,"tags":""},{"id":4517,"label":"CALL","name":"check_password","fullName":"","signature":"","isExternal":false,"code":"user.check_password(password)","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":41,"columnNumber":21,"tags":""},{"id":4526,"label":"IDENTIFIER","name":"user","fullName":"","signature":"","isExternal":false,"code":"auth_user = user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":43,"columnNumber":25,"tags":""},{"id":4556,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp6['auth_user'] = auth_user","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":48,"columnNumber":26,"tags":""},{"id":4555,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp6['auth_user']","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":12,"tags":""},{"id":4560,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'last_visited': last_visited,\n 'errors': errors,\n 'auth_user': auth_user}","typeFullName":"","parentMethodName":"index","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":46,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":1665,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":37,"tags":"framework-input"},{"id":1668,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":19,"columnNumber":18,"tags":""},{"id":5995,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":37,"tags":"framework-input"},{"id":4733,"label":"IDENTIFIER","name":"student_id","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":68,"columnNumber":43,"tags":""},{"id":4749,"label":"IDENTIFIER","name":"student_id","fullName":"","signature":"","isExternal":false,"code":"Mark.get_for_student(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":71,"columnNumber":50,"tags":""},{"id":910,"label":"METHOD_PARAMETER_IN","name":"student_id","fullName":"","signature":"","isExternal":false,"code":"student_id","typeFullName":"__builtin.int","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":19,"columnNumber":49,"tags":""},{"id":918,"label":"IDENTIFIER","name":"student_id","fullName":"","signature":"","isExternal":false,"code":"(student_id,)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":23,"columnNumber":19,"tags":""},{"id":919,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(student_id,)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":23,"columnNumber":18,"tags":""},{"id":923,"label":"IDENTIFIER","name":"params","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q, params)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":25,"columnNumber":34,"tags":""},{"id":932,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":26,"columnNumber":28,"tags":""},{"id":933,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":26,"columnNumber":28,"tags":""},{"id":954,"label":"IDENTIFIER","name":"result","fullName":"","signature":"","isExternal":false,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":47,"tags":""},{"id":955,"label":"CALL","name":"__iter__","fullName":"result.__iter__","signature":"","isExternal":true,"code":"result.__iter__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":20,"tags":""},{"id":964,"label":"CALL","name":"__next__","fullName":"tmp1.__next__","signature":"","isExternal":true,"code":"tmp1.__next__()","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":20,"tags":""},{"id":888,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":15,"columnNumber":23,"tags":""},{"id":890,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":21,"tags":""},{"id":891,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":20,"tags":""},{"id":896,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":16,"tags":""},{"id":897,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":16,"columnNumber":9,"tags":""},{"id":944,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\mark.py:.Mark.from_raw","signature":"","isExternal":false,"code":"Mark.from_raw(r)","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":21,"tags":""},{"id":971,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Mark.from_raw(r) for r in result]","typeFullName":"","parentMethodName":"get_for_student","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":27,"columnNumber":13,"tags":""},{"id":4754,"label":"CALL","name":"get_for_student","fullName":"sqli\\dao\\mark.py:.Mark.get_for_student","signature":"","isExternal":false,"code":"Mark.get_for_student(conn, student_id)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":71,"columnNumber":23,"tags":""},{"id":4817,"label":"IDENTIFIER","name":"marks","fullName":"","signature":"","isExternal":false,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":33,"tags":""},{"id":4832,"label":"CALL","name":"groupby","fullName":"itertools.py:.groupby","signature":"","isExternal":true,"code":"groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":74,"columnNumber":25,"tags":""},{"id":4833,"label":"IDENTIFIER","name":"tmp25","fullName":"","signature":"","isExternal":false,"code":"tmp25 = groupby(marks, def (...))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4839,"label":"CALL","name":"__iter__","fullName":"","signature":"","isExternal":false,"code":"tmp25.__iter__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4849,"label":"CALL","name":"__next__","fullName":"","signature":"","isExternal":false,"code":"tmp24.__next__()","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4860,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp26[1]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4813,"label":"CALL","name":"list","fullName":"__builtin.list","signature":"","isExternal":true,"code":"list(ms)","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":25,"tags":""},{"id":4810,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp23[c]","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":73,"columnNumber":21,"tags":""},{"id":4906,"label":"IDENTIFIER","name":"courses_marks","fullName":"","signature":"","isExternal":false,"code":"course.id in courses_marks","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":25,"tags":""},{"id":4905,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":78,"columnNumber":12,"tags":""},{"id":4874,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"course.id","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":36,"tags":""},{"id":4880,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(course, courses_marks.get(course.id))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":76,"columnNumber":9,"tags":""},{"id":4884,"label":"IDENTIFIER","name":"tmp27","fullName":"","signature":"","isExternal":false,"code":"tmp27.append((course, courses_marks.get(course.id)))","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":75,"columnNumber":15,"tags":""},{"id":4929,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"tmp29['results'] = results","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":44,"tags":""},{"id":4928,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp29['results']","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":12,"tags":""},{"id":4933,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'student': student, 'results': results}","typeFullName":"","parentMethodName":"student","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":80,"columnNumber":5,"tags":""}],"purls":[]},{"flows":[{"id":5386,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web.py:.Request","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":135,"columnNumber":20,"tags":"framework-input, pkg:pypi/aiohttp@3.5.3, framework"},{"id":5391,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":136,"columnNumber":24,"tags":""},{"id":5499,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5506,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp58.acquire()","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5522,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp59()","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":140,"columnNumber":16,"tags":""},{"id":5418,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":141,"columnNumber":37,"tags":""},{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5994,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":19,"tags":"framework-input"},{"id":5427,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":431,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":436,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":18,"tags":""},{"id":437,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":17,"tags":""},{"id":435,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, title, description ' 'FROM courses WHERE id = %s'","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":19,"columnNumber":17,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""},{"id":5237,"label":"CALL","name":"get","fullName":"sqli\\dao\\course.py:.Course.get","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":24,"tags":""},{"id":5240,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"not course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":117,"columnNumber":16,"tags":""},{"id":5319,"label":"IDENTIFIER","name":"course","fullName":"","signature":"","isExternal":false,"code":"tmp49['course'] = course","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":27,"tags":""},{"id":5318,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp49['course']","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":16,"tags":""},{"id":5332,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course, 'errors': {}}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":131,"columnNumber":9,"tags":""}],"purls":[]},{"flows":[{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5966,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"","lineNumber":16,"columnNumber":19,"tags":"framework-input"},{"id":5108,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":101,"columnNumber":35,"tags":""},{"id":5124,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Review.get_for_course(conn, course_id)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":104,"columnNumber":47,"tags":""},{"id":1291,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":18,"columnNumber":30,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1357,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":23,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5986,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get_for_course","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"","lineNumber":18,"columnNumber":30,"tags":""},{"id":5133,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get_many(conn)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":105,"columnNumber":43,"tags":""},{"id":1734,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":25,"columnNumber":24,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1827,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1828,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":1843,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp8()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":35,"columnNumber":20,"tags":""},{"id":1779,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute(q, params)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":36,"columnNumber":19,"tags":""},{"id":1784,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":37,"columnNumber":29,"tags":""},{"id":1785,"label":"CALL","name":"fetchall","fullName":"cur.fetchall","signature":"","isExternal":true,"code":"cur.fetchall()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":37,"columnNumber":29,"tags":""},{"id":1806,"label":"IDENTIFIER","name":"results","fullName":"","signature":"","isExternal":false,"code":"results.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":50,"tags":""},{"id":1807,"label":"CALL","name":"__iter__","fullName":"results.__iter__","signature":"","isExternal":true,"code":"results.__iter__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":20,"tags":""},{"id":1816,"label":"CALL","name":"__next__","fullName":"tmp6.__next__","signature":"","isExternal":true,"code":"tmp6.__next__()","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":20,"tags":""},{"id":1643,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":11,"columnNumber":23,"tags":""},{"id":1645,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":21,"tags":""},{"id":1646,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":20,"tags":""},{"id":1651,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":16,"tags":""},{"id":1652,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":12,"columnNumber":9,"tags":""},{"id":1796,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\student.py:.Student.from_raw","signature":"","isExternal":false,"code":"Student.from_raw(r)","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":21,"tags":""},{"id":1823,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return [Student.from_raw(r) for r in results]","typeFullName":"","parentMethodName":"get_many","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":38,"columnNumber":13,"tags":""},{"id":5138,"label":"CALL","name":"get_many","fullName":"sqli\\dao\\student.py:.Student.get_many","signature":"","isExternal":false,"code":"Student.get_many(conn)","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":105,"columnNumber":26,"tags":""},{"id":5197,"label":"IDENTIFIER","name":"students","fullName":"","signature":"","isExternal":false,"code":"tmp46['students'] = students","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":108,"columnNumber":25,"tags":""},{"id":5196,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp46['students']","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":106,"columnNumber":12,"tags":""},{"id":5201,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'course': course,\n 'reviews': reviews,\n 'students': students}","typeFullName":"","parentMethodName":"course","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":106,"columnNumber":5,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":1664,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":15,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":1692,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"sqli\\dao\\student.py:.Student","lineNumber":16,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":5994,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\student.py","parentPackageName":"","parentClassName":"","lineNumber":15,"columnNumber":19,"tags":"framework-input"},{"id":5418,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Student.get(conn, student_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":141,"columnNumber":37,"tags":""},{"id":5427,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":35,"tags":""},{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":430,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg\\connection.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":457,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":458,"label":"CALL","name":"cursor","fullName":"aiopg\\connection.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":473,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":17,"columnNumber":20,"tags":""},{"id":441,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, title, description ' 'FROM courses WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":18,"columnNumber":19,"tags":""},{"id":446,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":447,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":42,"tags":""},{"id":409,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":12,"columnNumber":23,"tags":""},{"id":411,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":21,"tags":""},{"id":412,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":20,"tags":""},{"id":417,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":16,"tags":""},{"id":418,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":13,"columnNumber":9,"tags":""},{"id":452,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\course.py:.Course.from_raw","signature":"","isExternal":false,"code":"Course.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":20,"tags":""},{"id":453,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return Course.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":23,"columnNumber":13,"tags":""}],"purls":["pkg:pypi/aiopg@0.15.0"]},{"flows":[{"id":3988,"label":"METHOD_PARAMETER_IN","name":"request","fullName":"","signature":"","isExternal":false,"code":"request","typeFullName":"aiohttp\\web_request.py:.Request","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":26,"columnNumber":25,"tags":"pkg:pypi/aiohttp@3.5.3, framework"},{"id":3993,"label":"CALL","name":".fieldAccess","fullName":".fieldAccess","signature":"","isExternal":false,"code":"request.app","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":27,"columnNumber":24,"tags":""},{"id":4018,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"app['db']","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4025,"label":"CALL","name":"acquire","fullName":"","signature":"","isExternal":false,"code":"tmp1.acquire()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4041,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp2()","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":30,"columnNumber":16,"tags":""},{"id":4008,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":31,"tags":""},{"id":2157,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":2184,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2185,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2200,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""},{"id":4014,"label":"CALL","name":"get","fullName":"sqli\\dao\\user.py:.User.get","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":22,"tags":""},{"id":4015,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return await User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":9,"tags":""},{"id":4210,"label":"CALL","name":"get_auth_user","fullName":"sqli\\utils\\auth.py:.get_auth_user","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":20,"columnNumber":23,"tags":""},{"id":4219,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp1['auth_user'] = auth_user","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":26,"tags":""},{"id":4218,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp1['auth_user']","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":12,"tags":""},{"id":4223,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'auth_user': auth_user}","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":5,"tags":""},{"id":6314,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"[csrf_processor, auth_user_processor]","typeFullName":"","parentMethodName":"init","parentMethodSignature":"","parentFileName":"sqli\\app.py","parentPackageName":"","parentClassName":"","lineNumber":34,"columnNumber":53,"tags":"pkg:pypi/aiohttp-jinja2@1.1.0, framework"}],"purls":["pkg:pypi/aiohttp@3.5.3","pkg:pypi/aiopg@0.15.0","pkg:pypi/aiohttp-jinja2@1.1.0"]},{"flows":[{"id":2157,"label":"METHOD_PARAMETER_IN","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn","typeFullName":"aiopg.py:.Connection","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":19,"tags":"pkg:pypi/aiopg@0.15.0, framework-input"},{"id":2184,"label":"IDENTIFIER","name":"conn","fullName":"","signature":"","isExternal":false,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2185,"label":"CALL","name":"cursor","fullName":"aiopg.py:.Connection.cursor","signature":"","isExternal":true,"code":"conn.cursor()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":"pkg:pypi/aiopg@0.15.0"},{"id":2200,"label":"CALL","name":"","fullName":"","signature":"","isExternal":false,"code":"enter_tmp1()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":22,"columnNumber":20,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""},{"id":4014,"label":"CALL","name":"get","fullName":"sqli\\dao\\user.py:.User.get","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":22,"tags":""},{"id":4015,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return await User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":9,"tags":""},{"id":4210,"label":"CALL","name":"get_auth_user","fullName":"sqli\\utils\\auth.py:.get_auth_user","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":20,"columnNumber":23,"tags":""},{"id":4219,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp1['auth_user'] = auth_user","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":26,"tags":""},{"id":4218,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp1['auth_user']","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":12,"tags":""},{"id":4223,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'auth_user': auth_user}","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":5,"tags":""},{"id":6314,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"[csrf_processor, auth_user_processor]","typeFullName":"","parentMethodName":"init","parentMethodSignature":"","parentFileName":"sqli\\app.py","parentPackageName":"","parentClassName":"","lineNumber":34,"columnNumber":53,"tags":"pkg:pypi/aiohttp-jinja2@1.1.0, framework"}],"purls":["pkg:pypi/aiopg@0.15.0","pkg:pypi/aiohttp-jinja2@1.1.0"]},{"flows":[{"id":2158,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":21,"columnNumber":37,"tags":"framework-input"},{"id":2163,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":26,"columnNumber":18,"tags":""},{"id":2164,"label":"CALL","name":".tupleLiteral","fullName":".tupleLiteral","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":26,"columnNumber":17,"tags":""},{"id":2162,"label":"CALL","name":".stringExpressionList","fullName":".stringExpressionList","signature":"","isExternal":false,"code":"'SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s'","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":24,"columnNumber":17,"tags":""},{"id":2168,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.execute('SELECT id, first_name, middle_name, last_name, ' 'username, pwd_hash, is_admin FROM users WHERE id = %s', (id_,))","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":23,"columnNumber":19,"tags":""},{"id":2173,"label":"IDENTIFIER","name":"cur","fullName":"","signature":"","isExternal":false,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2174,"label":"CALL","name":"fetchone","fullName":"cur.fetchone","signature":"","isExternal":true,"code":"cur.fetchone()","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":40,"tags":""},{"id":2136,"label":"METHOD_PARAMETER_IN","name":"raw","fullName":"","signature":"","isExternal":false,"code":"raw","typeFullName":"__builtin.tuple","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":17,"columnNumber":23,"tags":""},{"id":2138,"label":"IDENTIFIER","name":"raw","fullName":"","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":21,"tags":""},{"id":2139,"label":"CALL","name":".starredUnpack","fullName":".starredUnpack","signature":"","isExternal":false,"code":"*raw","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":20,"tags":""},{"id":2144,"label":"CALL","name":".conditional","fullName":".conditional","signature":"","isExternal":false,"code":"cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":16,"tags":""},{"id":2145,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return cls(*raw) if raw else None","typeFullName":"","parentMethodName":"from_raw","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":18,"columnNumber":9,"tags":""},{"id":2179,"label":"CALL","name":"from_raw","fullName":"sqli\\dao\\user.py:.User.from_raw","signature":"","isExternal":false,"code":"User.from_raw(cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":20,"tags":""},{"id":2180,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return User.from_raw(await cur.fetchone())","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\user.py","parentPackageName":"","parentClassName":"sqli\\dao\\user.py:.User","lineNumber":28,"columnNumber":13,"tags":""},{"id":4014,"label":"CALL","name":"get","fullName":"sqli\\dao\\user.py:.User.get","signature":"","isExternal":false,"code":"User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":22,"tags":""},{"id":4015,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return await User.get(conn, user_id)","typeFullName":"","parentMethodName":"get_auth_user","parentMethodSignature":"","parentFileName":"sqli\\utils\\auth.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":9,"tags":""},{"id":4210,"label":"CALL","name":"get_auth_user","fullName":"sqli\\utils\\auth.py:.get_auth_user","signature":"","isExternal":false,"code":"get_auth_user(request)","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":20,"columnNumber":23,"tags":""},{"id":4219,"label":"IDENTIFIER","name":"auth_user","fullName":"","signature":"","isExternal":false,"code":"tmp1['auth_user'] = auth_user","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":26,"tags":""},{"id":4218,"label":"CALL","name":".indexAccess","fullName":".indexAccess","signature":"","isExternal":false,"code":"tmp1['auth_user']","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":12,"tags":""},{"id":4223,"label":"RETURN","name":"","fullName":"","signature":"","isExternal":false,"code":"return {'auth_user': auth_user}","typeFullName":"","parentMethodName":"auth_user_processor","parentMethodSignature":"","parentFileName":"sqli\\utils\\jinja2.py","parentPackageName":"","parentClassName":"","lineNumber":21,"columnNumber":5,"tags":""},{"id":6314,"label":"METHOD_REF","name":"","fullName":"","signature":"","isExternal":false,"code":"[csrf_processor, auth_user_processor]","typeFullName":"","parentMethodName":"init","parentMethodSignature":"","parentFileName":"sqli\\app.py","parentPackageName":"","parentClassName":"","lineNumber":34,"columnNumber":53,"tags":"pkg:pypi/aiohttp-jinja2@1.1.0, framework"}],"purls":["pkg:pypi/aiohttp-jinja2@1.1.0"]},{"flows":[{"id":431,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":436,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":18,"tags":""},{"id":5967,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":5232,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":116,"columnNumber":41,"tags":""},{"id":5297,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"Review.create(conn, course_id, review_text)","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":129,"columnNumber":39,"tags":""},{"id":1400,"label":"METHOD_PARAMETER_IN","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"course_id","typeFullName":"__builtin.int","parentMethodName":"create","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":29,"columnNumber":40,"tags":""},{"id":1414,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"tmp6['course_id'] = course_id","typeFullName":"","parentMethodName":"create","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"sqli\\dao\\review.py:.Review","lineNumber":33,"columnNumber":32,"tags":""},{"id":5989,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"create","parentMethodSignature":"","parentFileName":"sqli\\dao\\review.py","parentPackageName":"","parentClassName":"","lineNumber":29,"columnNumber":40,"tags":""},{"id":5305,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"{course_id}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":130,"columnNumber":41,"tags":""},{"id":5306,"label":"CALL","name":".formattedValue","fullName":".formattedValue","signature":"","isExternal":false,"code":"{course_id}","typeFullName":"","parentMethodName":"review","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":130,"columnNumber":40,"tags":""}],"purls":[]},{"flows":[{"id":431,"label":"METHOD_PARAMETER_IN","name":"id_","fullName":"","signature":"","isExternal":false,"code":"id_","typeFullName":"__builtin.int","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":436,"label":"IDENTIFIER","name":"id_","fullName":"","signature":"","isExternal":false,"code":"(id_,)","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"sqli\\dao\\course.py:.Course","lineNumber":21,"columnNumber":18,"tags":""},{"id":5967,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"get","parentMethodSignature":"","parentFileName":"sqli\\dao\\course.py","parentPackageName":"","parentClassName":"","lineNumber":16,"columnNumber":37,"tags":"framework-input"},{"id":5428,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"Course.get(conn, course_id)","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":142,"columnNumber":41,"tags":""},{"id":5488,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"Mark.create(conn, student_id, course_id, data['points'])","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":151,"columnNumber":45,"tags":""},{"id":1019,"label":"METHOD_PARAMETER_IN","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"course_id","typeFullName":"__builtin.int","parentMethodName":"create","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":31,"columnNumber":22,"tags":""},{"id":1038,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"tmp6['course_id'] = course_id","typeFullName":"","parentMethodName":"create","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"sqli\\dao\\mark.py:.Mark","lineNumber":34,"columnNumber":58,"tags":""},{"id":5981,"label":"METHOD_PARAMETER_OUT","name":"","fullName":"","signature":"","isExternal":false,"code":"RET","typeFullName":"","parentMethodName":"create","parentMethodSignature":"","parentFileName":"sqli\\dao\\mark.py","parentPackageName":"","parentClassName":"","lineNumber":31,"columnNumber":22,"tags":""},{"id":5538,"label":"IDENTIFIER","name":"course_id","fullName":"","signature":"","isExternal":false,"code":"{course_id}","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":153,"columnNumber":33,"tags":""},{"id":5539,"label":"CALL","name":".formattedValue","fullName":".formattedValue","signature":"","isExternal":false,"code":"{course_id}","typeFullName":"","parentMethodName":"evaluate","parentMethodSignature":"","parentFileName":"sqli\\views.py","parentPackageName":"","parentClassName":"","lineNumber":153,"columnNumber":32,"tags":""}],"purls":[]}]} From bd3b13059af23eefd0fce80de9a4aa3dd05dc5fe Mon Sep 17 00:00:00 2001 From: Caroline Russell Date: Tue, 30 Jul 2024 23:07:19 -0400 Subject: [PATCH 2/2] Add README.md, refactor tests. Signed-off-by: Caroline Russell --- components/enrichers/reachability/README.md | 8 ++ components/enrichers/reachability/main.go | 4 +- .../enrichers/reachability/main_test.go | 75 ++++++++++--------- 3 files changed, 50 insertions(+), 37 deletions(-) create mode 100644 components/enrichers/reachability/README.md diff --git a/components/enrichers/reachability/README.md b/components/enrichers/reachability/README.md new file mode 100644 index 000000000..041700078 --- /dev/null +++ b/components/enrichers/reachability/README.md @@ -0,0 +1,8 @@ +# Reachability Enricher + +This enricher takes findings and checks if the target is reachable with a +reachables slice produced by +[appthreat/atom](https://github.com/appthreat/atom). + +For each finding, it adds the following annotation. +"Reachable:" diff --git a/components/enrichers/reachability/main.go b/components/enrichers/reachability/main.go index 9fc2e6fa3..8a6191f2b 100644 --- a/components/enrichers/reachability/main.go +++ b/components/enrichers/reachability/main.go @@ -217,7 +217,7 @@ func parsePurl(purl string, patterns regexes) []string { // removeDuplicates removes duplicate strings from a slice. func removeDuplicates(elements []string) []string { encountered := map[string]bool{} - result := []string{} + var result []string for v := range elements { if encountered[elements[v]] == true { @@ -312,7 +312,7 @@ func run() { } for _, r := range res { - enrichedIssues := []*v1.EnrichedIssue{} + var enrichedIssues []*v1.EnrichedIssue for _, i := range r.GetIssues() { eI, err := enrichIssue(i, data, patterns) if err != nil { diff --git a/components/enrichers/reachability/main_test.go b/components/enrichers/reachability/main_test.go index 6cb57f005..edb997d51 100644 --- a/components/enrichers/reachability/main_test.go +++ b/components/enrichers/reachability/main_test.go @@ -11,54 +11,59 @@ import ( "testing" ) +func countResults(res []*v1.EnrichedIssue) (int, int) { + r := 0 + f := 0 + for _, finding := range res { + if strings.Contains(fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"false\"") { + f++ + } + if strings.Contains(fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"true\"") { + r++ + } + } + return r, f +} + +func readPb(t *testing.T, err error, outFile string) []*v1.EnrichedIssue { + pbBytes, err := os.ReadFile(outFile) + require.NoError(t, err) + + res := v1.EnrichedLaunchToolResponse{} + require.NoError(t, proto.Unmarshal(pbBytes, &res)) + return res.GetIssues() +} + func TestReachableEnricher(t *testing.T) { - // prepare - //dir, err := os.MkdirTemp("/tmp", "") - //require.NoError(t, err) + //prepare + outDir, err := os.MkdirTemp("/tmp", "") + require.NoError(t, err) dir := "testdata" readPath = dir - writePath = dir + writePath = outDir sliceFile = dir + "/sampleReachables.json" run() + assert.FileExists(t, outDir+"/reachability.reachability.enriched.pb", "file was not created") + assert.FileExists(t, outDir+"/bandit.reachability.enriched.pb", "file was not created") + assert.FileExists(t, outDir+"/pip-safety.reachability.enriched.pb", "file was not created") - pbBytes, err := os.ReadFile(dir + "/reachability.reachability.enriched.pb") - require.NoError(t, err) + res := readPb(t, err, outDir+"/reachability.reachability.enriched.pb") - res := v1.EnrichedLaunchToolResponse{} - require.NoError(t, proto.Unmarshal(pbBytes, &res)) - - for _, finding := range res.Issues { - assert.Contains(t, fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"false\"") - } - - pbBytes, err = os.ReadFile(dir + "/bandit.reachability.enriched.pb") - require.NoError(t, err) + r, f := countResults(res) + assert.Equal(t, 0, r) + assert.Equal(t, 1, f) - res = v1.EnrichedLaunchToolResponse{} - require.NoError(t, proto.Unmarshal(pbBytes, &res)) + res = readPb(t, err, outDir+"/bandit.reachability.enriched.pb") - for _, finding := range res.Issues { - assert.Contains(t, fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"true\"") - } + r, f = countResults(res) + assert.Equal(t, 2, r) + assert.Equal(t, 0, f) - pbBytes, err = os.ReadFile(dir + "/pip-safety.reachability.enriched.pb") - require.NoError(t, err) - - res = v1.EnrichedLaunchToolResponse{} - require.NoError(t, proto.Unmarshal(pbBytes, &res)) + res = readPb(t, err, outDir+"/pip-safety.reachability.enriched.pb") - r := 0 - f := 0 - for _, finding := range res.Issues { - if strings.Contains(fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"false\"") { - f++ - } - if strings.Contains(fmt.Sprintf("%#v\n", finding.Annotations), "\"reachable\":\"true\"") { - r++ - } - } + r, f = countResults(res) assert.Equal(t, 14, r) assert.Equal(t, 9, f)