Giter Club home page Giter Club logo

dependencymap's People

Contributors

damakshn avatar

Stargazers

 avatar

Watchers

 avatar  avatar

dependencymap's Issues

Интеграция delphitools

Интегрировать delphitools, реализовать обработку исходников:

  • извлечение данных по АРМам;
  • перебор файлов проекта;
  • извлечение компонентов;
  • поиск соединений АРМа с базами;
  • обновление по запросу данных об АРМе/файле по запросу;
  • занесение информации в базу.

Продумать алгоритм поиска упоминаний объектов БД в коде

В системе используется несколько баз, SQL-запросы АРМов могут обращаться сразу к нескольким, в базах есть таблицы, функции и т.д. с одинаковыми именами. Алгоритм поиска должен однозначно идентифицировать объект и определять из какой базы он взят.

У АРМов есть файл конфигурации .ini, в нём содержатся названия подключаемых БД;
Иногда в коде прописано полное имя таблицы (база.схема.название);

За подключение отвечает компонент TADOConnection с атрибутом ConnectionString;

Отправку запроса в большинстве случаев осуществляет какой-нибудь компонент с формы, который подключен к ADOConnection через свойство Connection.

База, с которой соединяется компонент, может динамически меняться в рантайме.

Текст SQL-запроса тоже может динамически изменяться.

Ускорение работы парсера

Научить парсер анализировать файлы быстрее - при обработке всех исходников ждать придётся довольно долго.

Разобраться с официальным парсером YAML

Дёрнуть официальный репозиторий и полазить по коду, разобраться, как парсер считывает информацию из файла, дробит информацию на токены, интерпретирует их и как формирует структуры данных в памяти. Это будет долго.

  • Узнать, как связываются классы;
  • Понять, как извлекаются и читаются токены;
  • Как разрешаются конфликты между токенами (например '-' как маркер списка и как обычный символ;
  • Как детектится конец файла;
  • Как происходит переключение состояний;
  • Понять, как происходит разбор данных от открытия файла до формирования готовой структуры в памяти;
  • Как конструируются структуры данных;
  • Как строится дерево документа;

Завершение работы над парсером

Итоговый продукт должен справляться с реальными файлами форм из боевой системы (4-5 тысяч строк с русскими буквами, SQL-запросами и т.д.)

Оформление пакета delphitools

Создать пакет, содержащий парсер форм и другие инструменты для обработки исходников, всё оформить как надо.

Изменить способ определения даты обновления проекта

Считать дату обновления проекта следует не по дате обновления папки, а перебором всех входящих в проект файлов и выбора наибольшей даты. Подумать заодно о том, как изменится механизм интеграции delphitools с моделью данных после этого исправления.

Создать схему dfm в БНФ

Сделать формальное описание синтаксиса формата по форме Бэкуса — Наура. Если это поможет, будет хорошо.

Ошибка chr() arg not in range(0x110000)

Возникает при декодировании кириллицы в некоторых файлах форм. В самих файлах написана двоичная белиберда; надо определить что это и найти способ привести исходники во вменяемый вид.

Разработка объектной модели для SQLAlchemy

Модель должна охватывать следующие сущности:

  • АРМы;
  • Базы, используемые в системе;
  • Файлы исходников;
  • Соединения АРМов с базами;
  • Компоненты форм для работы с БД (с текстами запросов);
  • Таблицы баз данных;
  • Представления, процедуры и функции - те объекты, которые содержат SQL;
  • Взаимосвязи между компонентами, таблицами и процедурами;

Связь между объектами является отдельной сущностью и обладает характеристиками;

Конвертация файлов форм в другие форматы

Нужно переводить файлы форм в нативные типы данных питона, а оттуда - в json/xml/yaml (yaml выбран потому что он синтаксически намного ближе к dfm, чем любой другой), чтобы иметь возможность быстро обрабатывать содержащуюся в них информацию, пользуясь готовыми инструментами.
Уже кем-то написанные решения, переводящие dfm во что-то разумное либо написаны на делфи и не работают, либо просто не работают.
Превратить dfm в yml, выполнив несколько глобальных замен не получится, надо создавать полноценное решение.
Обратное преобразование (yaml-dfm, json-dfm) делать не нужно.

Сделать нормальный конфиг

Добавить конфигурационный json-файл для хранения путей к папкам с исходниками.
Конфиг должен содержать:

  • Пути к АРМам;
  • Данные для соединения с рабочей БД;
  • Данные для соединения с БД информационной системы;

Дополнительные тесты

  • Parser - переход в предыдущее состояние после разбора бинарника (ещё одно свойство после '}');
  • Tokenizer - декодирование русских букв: форматы, временные таблицы с '#' и '##';
  • Tokenizer - тесты многострочников во всех вариантах: со сложением строк и без, с разными вариантами конца строки (русская буква, кавычка, '+');
  • Tokenizer - закодированная табуляция в начале строки;
  • Composer - одинаковые ключи, вложенный объект;

Довести модель до ума

  • Приделать orm events;
  • Пустые поля - где можно, где нельзя;
  • Значения по умолчанию;
  • Причесать repr;
  • методы from_components для ClientConnection и ClientQuery;
  • попробовать положить все прямые связи объекта в relationship;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.