def __init__(self, elem, import_file, transform_only=False):
        Master.__init__(self, elem)
        self.additional_code_sid = Master.process_null(elem.find("sid"))
        self.additional_code_type_id = Master.process_null(
            elem.find("additionalCodeType/additionalCodeTypeId"))
        self.additional_code = Master.process_null(
            elem.find("additionalCodeCode"))
        self.validity_start_date = Master.process_date(
            elem.find("validityStartDate"))
        self.validity_end_date = Master.process_date(
            elem.find("validityEndDate"))
        operation_date = g.app.get_timestamp()

        g.app.print_only(
            "Running operation {0} on additional code {1}.".format(
                self.operation, str(self.additional_code_sid)))

        # Insert the additional code
        if transform_only is False:
            sql = """
            insert into additional_codes_oplog
            (additional_code_sid, additional_code_type_id, additional_code, validity_start_date, validity_end_date,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.additional_code_sid, self.additional_code_type_id,
                self.additional_code, self.validity_start_date,
                self.validity_end_date, self.operation, operation_date,
                operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)

            # Delete any additional code descriptions
            sql = """
            delete from additional_code_descriptions_oplog
            where additional_code_sid = %s
            """
            params = [self.additional_code_sid]
            d = Database()
            d.run_query(sql, params)

            # Delete any additional code description periods
            sql = """
            delete from additional_code_description_periods_oplog
            where additional_code_sid = %s
            """
            params = [self.additional_code_sid]
            d = Database()
            d.run_query(sql, params)

            # Create new additional code description periods
            for elem in elem.findall('.//additionalCodeDescriptionPeriod'):
                AdditionalCodeDescriptionPeriod(elem, self.additional_code_sid,
                                                self.additional_code_type_id,
                                                self.additional_code,
                                                import_file)
    def __init__(self, elem, measure_sid, import_file, transform_only=False):
        Master.__init__(self, elem)
        self.measure_sid = measure_sid
        self.measure_condition_sid = Master.process_null(elem.find("sid"))
        self.condition_code = Master.process_null(
            elem.find("measureConditionCode/conditionCode"))
        self.component_sequence_number = Master.process_null(
            elem.find("conditionSequenceNumber"))
        self.condition_duty_amount = Master.process_null(
            elem.find("conditionDutyAmount"))
        self.condition_monetary_unit_code = Master.process_null(
            elem.find("monetaryUnit/monetaryUnitCode"))
        self.condition_measurement_unit_code = Master.process_null(
            elem.find("measurementUnit/measurementUnitCode"))
        self.condition_measurement_unit_qualifier_code = Master.process_null(
            elem.find("measurementUnitQualifier/measurementUnitQualifierCode"))
        self.action_code = Master.process_null(
            elem.find("measureAction/actionCode"))
        self.certificate_type_code = Master.process_null(
            elem.find("certificate/certificateType/certificateTypeCode"))
        self.certificate_code = Master.process_null(
            elem.find("certificate/certificateCode"))

        operation_date = g.app.get_timestamp()

        # Insert the measure condition
        if transform_only is False:
            sql = """
            insert into measure_conditions_oplog
            (measure_sid, measure_condition_sid, condition_code,
            component_sequence_number, condition_duty_amount, condition_monetary_unit_code,
            condition_measurement_unit_qualifier_code, action_code, certificate_type_code, certificate_code,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.measure_sid, self.measure_condition_sid,
                self.condition_code, self.component_sequence_number,
                self.condition_duty_amount, self.condition_monetary_unit_code,
                self.condition_measurement_unit_qualifier_code,
                self.action_code, self.certificate_type_code,
                self.certificate_code, self.operation, operation_date,
                operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)

            # Delete any measure condition components
            sql = """delete from measure_condition_components_oplog where measure_condition_sid = %s"""
            params = [self.measure_condition_sid]
            d = Database()
            d.run_query(sql, params)

            # Create new measure condition components
            for elem1 in elem.findall('.//measureConditionComponent'):
                MeasureConditionComponent(elem1, self.measure_condition_sid,
                                          import_file)
Exemplo n.º 3
0
    def __init__(self, elem, import_file, transform_only=False):
        Master.__init__(self, elem)
        self.measure_type_id = Master.process_null(elem.find("measureTypeId"))
        self.measure_component_applicable_code = Master.process_null(
            elem.find("measureComponentApplicableCode"))
        self.measure_explosion_level = Master.process_null(
            elem.find("measureExplosionLevel"))
        self.order_number_capture_code = Master.process_null(
            elem.find("orderNumberCaptureCode"))
        self.origin_dest_code = Master.process_null(
            elem.find("originDestCode"))
        self.priority_code = Master.process_null(elem.find("priorityCode"))
        self.trade_movement_code = Master.process_null(
            elem.find("tradeMovementCode"))
        self.measure_type_series_id = Master.process_null(
            elem.find("measureTypeSeries/measureTypeSeriesId"))
        self.validity_start_date = Master.process_date(
            elem.find("validityStartDate"))
        self.validity_end_date = Master.process_date(
            elem.find("validityEndDate"))
        self.application_code = Master.process_null(
            elem.find("applicationCode"))
        operation_date = g.app.get_timestamp()

        # Insert the measure type
        if transform_only is False:
            sql = """
            insert into measure_types_oplog
            (measure_type_id, validity_start_date, validity_end_date,
            measure_component_applicable_code, measure_explosion_level, order_number_capture_code,
            origin_dest_code, priority_code, trade_movement_code, measure_type_series_id,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.measure_type_id, self.validity_start_date,
                self.validity_end_date, self.measure_component_applicable_code,
                self.measure_explosion_level, self.order_number_capture_code,
                self.origin_dest_code, self.priority_code,
                self.trade_movement_code, self.measure_type_series_id,
                self.operation, operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)

            # Delete any measure descriptions
            sql = """
            delete from measure_type_descriptions_oplog
            where measure_type_id = %s
            """
            params = [self.measure_type_id]
            d = Database()
            d.run_query(sql, params)

            # Create new measure type descriptions
            for elem in elem.findall('.//measureTypeDescription'):
                MeasureTypeDescription(elem, self.measure_type_id, import_file)
Exemplo n.º 4
0
    def __init__(self, elem, import_file, transform_only=False):
        Master.__init__(self, elem)
        self.certificate_type_code = Master.process_null(
            elem.find("certificateType/certificateTypeCode"))
        self.certificate_code = Master.process_null(
            elem.find("certificateCode"))
        self.validity_start_date = Master.process_date(
            elem.find("validityStartDate"))
        self.validity_end_date = Master.process_date(
            elem.find("validityEndDate"))
        operation_date = g.app.get_timestamp()

        g.app.print_only("Running operation {0} on certificate {1}.".format(
            self.operation, str(self.certificate_code)))

        # Insert the certificate
        if transform_only is False:
            sql = """
            insert into certificates_oplog
            (certificate_type_code, certificate_code, validity_start_date, validity_end_date,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.certificate_type_code, self.certificate_code,
                self.validity_start_date, self.validity_end_date,
                self.operation, operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)

            # Delete any certificate descriptions
            sql = """
            delete from certificate_descriptions_oplog
            where certificate_type_code = %s and certificate_code = %s
            """
            params = [self.certificate_type_code, self.certificate_code]
            d = Database()
            d.run_query(sql, params)

            # Delete any certificate description periods
            sql = """
            delete from certificate_description_periods_oplog
            where certificate_type_code = %s and certificate_code = %s
            """
            params = [self.certificate_type_code, self.certificate_code]
            d = Database()
            d.run_query(sql, params)

            # Create new certificate description periods
            for elem in elem.findall('.//certificateDescriptionPeriod'):
                CertificateDescriptionPeriod(elem, self.certificate_type_code,
                                             self.certificate_code,
                                             import_file)
Exemplo n.º 5
0
def export(target,
           type='target',
           db=None,
           alive=False,
           limit=None,
           path=None,
           format='csv',
           show=False):
    """
    OneForAll export from database module

    Example:
        python3 dbexport.py --target name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --target name --show False
        python3 dbexport.py --target table_name --tb True --show False

    Note:
        --format rst/csv/tsv/json/yaml/html/jira/xls/xlsx/dbf/latex/ods (result format)
        --path   Result directory (default directory is ./results)

    :param str  target:  Table to be exported
    :param str  type:    Type of target
    :param str  db:      Database path to be exported (default ./results/result.sqlite3)
    :param bool alive:   Only export the results of alive subdomains (default False)
    :param str  limit:   Export limit (default None)
    :param str  format:  Result format (default csv)
    :param str  path:    Result directory (default None)
    :param bool show:    Displays the exported data in terminal (default False)
    """

    if type == 'target':
        database = Database(db)
        domains = utils.get_domains(target)
        datas = []
        if domains:
            for domain in domains:
                table_name = domain_to_table(domain)
                rows = database.export_data(table_name, alive, limit)
                if rows is None:
                    continue
                data = export_data(format, path, rows, show, table_name,
                                   target)
                datas.extend(data)
        database.close()
        if len(domains) > 1:
            utils.export_all(alive, format, path, datas)
    elif type == 'table':
        database = Database(db)
        rows = database.export_data(target, alive, limit)
        data = export_data(format, path, rows, show, target, target)
        database.close()
        return data
    def __init__(self, elem, import_file, transform_only=False):
        Master.__init__(self, elem)
        self.descriptions = []
        self.footnote_type_id = Master.process_null(
            elem.find("footnoteType/footnoteTypeId"))
        self.footnote_id = Master.process_null(elem.find("footnoteId"))
        self.validity_start_date = Master.process_date(
            elem.find("validityStartDate"))
        self.validity_end_date = Master.process_date(
            elem.find("validityEndDate"))
        operation_date = g.app.get_timestamp()

        # Insert the footnote
        if transform_only is False:
            sql = """
            insert into footnotes_oplog
            (footnote_type_id, footnote_id, validity_start_date, validity_end_date,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.footnote_type_id, self.footnote_id,
                self.validity_start_date, self.validity_end_date,
                self.operation, operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)

            # Delete any footnote descriptions
            sql = """
            delete from footnote_descriptions_oplog
            where footnote_type_id = %s and footnote_id = %s
            """
            params = [self.footnote_type_id, self.footnote_id]
            d = Database()
            d.run_query(sql, params)

            # Delete any footnote description periods
            sql = """
            delete from footnote_description_periods_oplog
            where footnote_type_id = %s and footnote_id = %s
            """
            params = [self.footnote_type_id, self.footnote_id]
            d = Database()
            d.run_query(sql, params)

            # Create new footnote description periods
            for elem in elem.findall('.//footnoteDescriptionPeriod'):
                FootnoteDescriptionPeriod(elem, self.footnote_type_id,
                                          self.footnote_id, import_file)
Exemplo n.º 7
0
    def __init__(self,
                 elem,
                 quota_definition_sid,
                 import_file,
                 transform_only=False):
        Master.__init__(self, elem)
        self.quota_definition_sid = quota_definition_sid
        self.sub_quota_definition_sid = Master.process_null(
            elem.find("subQuotaDefinition/sid"))
        self.relation_type = Master.process_null(elem.find("relationType"))
        self.coefficient = Master.process_null(elem.find("coefficient"))
        operation_date = g.app.get_timestamp()

        g.app.print_only(
            "Running operation {0} on quota association {1}.".format(
                self.operation, str(self.quota_definition_sid)))

        if transform_only is False:
            sql = """
            insert into quota_associations_oplog
            (main_quota_definition_sid, sub_quota_definition_sid, relation_type, coefficient,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.quota_definition_sid, self.sub_quota_definition_sid,
                self.relation_type, self.coefficient, self.operation,
                operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)
Exemplo n.º 8
0
 def test_03_show_unshipped_order(self):
     """查看未发货订单"""
     data={"session":self.setUp(),"type":"await_ship","pagination":{"count":10,"page":1}}
     response=To_be_shipped().to_be_shipped(data)
     unship_order_ids=get_keywords(response,"order_id")
     print(unship_order_ids)
     """连接数据库"""
     database = Database(host="ecshop.itsoso.cn", user="******", password="******", database="ecshop",
                         charset='utf8', port=3306)
     sql = "select * from ecs_order_info where user_id=11402 and shipping_status=0"
     order_id_db = database.readall(sql=sql)
     print(order_id_db)
     """在数据库中获取取消订单的id"""
     db_orderid = get_keywords(order_id_db, "order_id")
     print(db_orderid)
     """断言"""
     """判断未发货的id是否存在于数据库取消订单的id中"""
     if unship_order_ids:
         for unship_order_id in unship_order_ids:
             if unship_order_id in db_orderid:
                 self.assertTrue(True)
             else:
                 self.assertTrue(False)
     else:
         print("未发货订单为零")
Exemplo n.º 9
0
    async def status(self, ctx):
        if ctx.invoked_subcommand is None:
            db = Database()

            embed = discord.Embed(title='Bot Status')

            counts = db.getCountEstimates()
            status = db.getStatus()

            embed.add_field(name="Bot Name", value="[Shinigami]", inline=False)
            embed.add_field(
                name="Bot Uptime",
                value=
                f"{humanize.naturaldelta(datetime.now() - status['botStartTime'])}",
                inline=False)
            embed.add_field(name="Current tracked game deals",
                            value=f"{counts['gamedeals']}",
                            inline=False)
            embed.add_field(name="Current tracked game cracks",
                            value=f"{counts['cracks']}",
                            inline=False)
            embed.add_field(name="Current tracked game repacks",
                            value=f"{counts['repacks']}",
                            inline=False)
            embed.add_field(
                name="Bot Source",
                value=
                f"[https://github.com/santoshpanna/Discord-Bot](github.com)",
                inline=False)

            await ctx.send(embed=embed)
    def __init__(self,
                 elem,
                 quota_definition_sid,
                 import_file,
                 transform_only=False):
        Master.__init__(self, elem)
        self.quota_suspension_period_sid = Master.process_null(
            elem.find("sid"))
        self.quota_definition_sid = quota_definition_sid
        self.suspension_start_date = Master.process_date(
            elem.find("suspensionStartDate"))
        self.suspension_end_date = Master.process_date(
            elem.find("suspensionEndDate"))
        self.description = Master.process_null(elem.find("description"))
        operation_date = g.app.get_timestamp()

        if transform_only is False:
            sql = """
            insert into quota_suspension_periods_oplog
            (quota_suspension_period_sid, quota_definition_sid,
            suspension_start_date, suspension_end_date, description,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.quota_suspension_period_sid, self.quota_definition_sid,
                self.suspension_start_date, self.suspension_end_date,
                self.description, self.operation, operation_date,
                operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)
Exemplo n.º 11
0
 def deal_db(self):
     """
     收集任务完成时对数据库进行处理
     """
     db = Database()
     db.deal_table(self.domain, self.origin_table)
     db.close()
    def __init__(self, elem, measure_sid, import_file, transform_only=False):
        Master.__init__(self, elem)
        self.measure_sid = measure_sid
        self.excluded_geographical_area = Master.process_null(
            elem.find("geographicalArea/geographicalAreaId"))
        self.geographical_area_sid = Master.process_null(
            elem.find("geographicalArea/sid"))

        operation_date = g.app.get_timestamp()

        # Insert the MeasureExcludedGeographicalArea
        if transform_only is False:
            sql = """
            insert into measure_excluded_geographical_areas_oplog
            (measure_sid, excluded_geographical_area, geographical_area_sid,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.measure_sid, self.excluded_geographical_area,
                self.geographical_area_sid, self.operation, operation_date,
                operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)
Exemplo n.º 13
0
    def test_05_cancel_order(self):
        """取消订单"""

        unpaid_data = {"session": self.setUp(), "type": "await_pay", "pagination": {"count": 10, "page": 1}}
        "获取未支付订单中的order_id"
        order_ids=Unpaid_order_interface().get_order_ids(unpaid_data)
        "随机获取一个order_id"
        random_num=random.randint(0,len(order_ids)-1)
        cancel_order_id=order_ids[random_num]
        print(cancel_order_id)
        "把随机获取的order_id传入cancel_data中"
        cancel_data={"session":self.setUp(),"order_id":cancel_order_id}
        "删除订单"
        Cancel_order().cancel_order(cancel_data)
        """连接数据库"""
        database = Database(host="ecshop.itsoso.cn", user="******", password="******", database="ecshop",
                            charset='utf8', port=3306)
        sql = "select * from ecs_order_info where user_id=11402 and order_status=3"
        order_id_db = database.readall(sql=sql)
        print(order_id_db)
        """在数据库中获取取消订单的id"""
        db_orderid = get_keywords(order_id_db, "order_id")
        print(db_orderid)
        """断言"""
        """判断取消订单的id是否存在于数据库取消订单的id中"""
        if order_id_db:
            if cancel_order_id in db_orderid:
                self.assertTrue(True)
            else:
                self.assertTrue(False)
        else:
            print("数据库中订单状态被取消的订单为零")
Exemplo n.º 14
0
    def request(self):
        try:
            with Database() as session:
                with Browser() as browser_session:
                    url = self.url(Category.NEWSLETTER.value)
                    response = browser_session.get(url)
                    response.raise_for_status()
                    soup = bs4.BeautifulSoup(response.content, 'html.parser')

                    elements = soup.select('#content-left a')
                    LOGGER.info('{} newsletters have been found'.format(
                        len(elements)))

                    if len(elements) == 0:
                        LOGGER.info('Done, no more newsletters')
                        return

                    for element in reversed(elements):
                        href = element['href']
                        title = element.text

                        model, created = session.get_or_create(Newsletter,
                                                               url=href,
                                                               title=title)
                        if not created:
                            LOGGER.info(
                                f'Newsletter "{href}" ...skipped (duplicate)')
                        else:
                            LOGGER.info(f'{href} ...added')
        except requests.exceptions.HTTPError as exc:
            LOGGER.warning('Scraping {} {} ...skipping'.format(
                url, exc.response.status_code))
            raise exc
Exemplo n.º 15
0
    def main(self):
        if self.brute is None:
            self.brute = config.enable_brute_module
        if self.verify is None:
            self.verify = config.enable_verify_subdomain
        rename_table = self.domain + '_last'
        collect = Collect(self.domain, export=False)
        collect.run()
        if self.brute:
            # 由于爆破会有大量dns解析请求 并发爆破可能会导致其他任务中的网络请求异常
            brute = AIOBrute(self.domain, export=False)
            brute.run()

        db = Database()
        db.copy_table(self.domain, self.domain + '_ori')
        db.remove_invalid(self.domain)
        db.deduplicate_subdomain(self.domain)
        # 不验证子域的情况
        if not self.verify:
            # 数据库导出
            self.valid = None
            dbexport.export(self.domain,
                            valid=self.valid,
                            format=self.format,
                            show=self.show)
            db.drop_table(rename_table)
            db.rename_table(self.domain, rename_table)
            return
        # 开始验证子域工作
        self.datas = db.get_data(self.domain).as_dict()
        loop = asyncio.get_event_loop()
        asyncio.set_event_loop(loop)

        # 解析域名地址
        task = resolve.bulk_query_a(self.datas)
        self.datas = loop.run_until_complete(task)

        # 保存解析结果
        resolve_table = self.domain + '_res'
        db.drop_table(resolve_table)
        db.create_table(resolve_table)
        db.save_db(resolve_table, self.datas, 'resolve')

        # 请求域名地址
        task = request.bulk_get_request(self.datas, self.port)
        self.datas = loop.run_until_complete(task)
        # 在关闭事件循环前加入一小段延迟让底层连接得到关闭的缓冲时间
        loop.run_until_complete(asyncio.sleep(0.25))

        db.clear_table(self.domain)
        db.save_db(self.domain, self.datas)

        # 数据库导出
        dbexport.export(self.domain,
                        valid=self.valid,
                        format=self.format,
                        show=self.show)
        db.drop_table(rename_table)
        db.rename_table(self.domain, rename_table)
        db.close()
    def __init__(self,
                 elem,
                 quota_order_number_origin_sid,
                 import_file,
                 transform_only=False):
        Master.__init__(self, elem)
        self.quota_order_number_origin_sid = quota_order_number_origin_sid
        self.excluded_geographical_area_sid = Master.process_null(
            elem.find("geographicalArea/sid"))
        operation_date = g.app.get_timestamp()

        if transform_only is False:
            sql = """
            insert into quota_order_number_origin_exclusions_oplog
            (quota_order_number_origin_sid, excluded_geographical_area_sid,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s)
            """
            params = [
                self.quota_order_number_origin_sid,
                self.excluded_geographical_area_sid, self.operation,
                operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)
Exemplo n.º 17
0
 def test_ifnotinput_serach(self):
     """
 用例ID: 3
 用例标题:验证用户不输入搜索条件,点击搜索后显示所有商品信息
 预置条件:使用谷歌浏览器进入首页
 执行步骤:
     1.不输入搜索条件,点击搜索按钮
 预期结果:
     1.成功显示所有商品信息
     :return:
     """
     ugs = UserGoodsSearch(self.driver)
     ugs.click_serach_button()
     try:
         count1 = ugs.count_current_goods()
         ugs.next_goods_page()
         count2 = ugs.count_current_goods()
         ugs.next_goods_page()
         count3 = ugs.count_current_goods()
         ugs.next_goods_page()
         coun4 = ugs.count_current_goods()
         allgoods = count1 + count2 + count3 + coun4
     except Exception as e:
         self.assertTrue(False, msg=f'没有找到这个商品{e}')
     else:
         db = Database(database='ecshop', password='******')
         sql = 'select count(*) from ec_goods where is_on_sale=1'
         dabase_count = db.read_one(sql)['count(*)']
         self.assertTrue(int(allgoods) == dabase_count, msg='商品没有全部显示')
    def __init__(self, elem, measure_sid, import_file, transform_only=False):
        Master.__init__(self, elem)
        self.measure_sid = measure_sid
        self.duty_expression_id = Master.process_null(elem.find("dutyExpression/dutyExpressionId"))
        self.duty_amount = Master.process_null(elem.find("dutyAmount"))
        self.monetary_unit_code = Master.process_null(elem.find("monetaryUnit/monetaryUnitCode"))
        self.measurement_unit_code = Master.process_null(elem.find("measurementUnit/measurementUnitCode"))
        self.measurement_unit_qualifier_code = Master.process_null(elem.find("measurementUnitQualifier/measurementUnitQualifierCode"))

        operation_date = g.app.get_timestamp()

        # Insert the MeasureComponent
        if transform_only is False:
            sql = """
            insert into measure_components_oplog
            (measure_sid, duty_expression_id, duty_amount,
            monetary_unit_code, measurement_unit_code, measurement_unit_qualifier_code,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.measure_sid,
                self.duty_expression_id,
                self.duty_amount,
                self.monetary_unit_code,
                self.measurement_unit_code,
                self.measurement_unit_qualifier_code,
                self.operation,
                operation_date,
                operation_date,
                import_file
            ]
            d = Database()
            d.run_query(sql, params)
    def __init__(self,
                 elem,
                 additional_code_type_id,
                 import_file,
                 transform_only=False):
        Master.__init__(self, elem)
        self.additional_code_type_id = additional_code_type_id
        self.measure_type_id = Master.process_null(
            elem.find("measureType/measureTypeId"))
        self.validity_start_date = Master.process_date(
            elem.find("validityStartDate"))
        self.validity_end_date = Master.process_date(
            elem.find("validityEndDate"))
        operation_date = g.app.get_timestamp()

        g.app.print_only(
            "Running operation {0} on additional code type measure type {1}.".
            format(self.operation, self.additional_code_type_id))

        if transform_only is False:
            sql = """
            insert into additional_code_type_measure_types_oplog
            (additional_code_type_id, measure_type_id,
            validity_start_date, validity_end_date,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.additional_code_type_id, self.measure_type_id,
                self.validity_start_date, self.validity_end_date,
                self.operation, operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)
Exemplo n.º 20
0
    def get_commodity_change_end(self):
        sql = """
        with cte as (
            select distinct on (gn.goods_nomenclature_sid)
            gn.goods_nomenclature_item_id, gn.producline_suffix, gnd.description,
            gn.validity_start_date, gn.validity_end_date
            from goods_nomenclatures gn, goods_nomenclature_descriptions gnd 
            where gn.goods_nomenclature_sid = gnd.goods_nomenclature_sid
            and validity_end_date >= %s
            and validity_end_date <= %s
            order by gn.goods_nomenclature_sid
        )
        select * from cte order by goods_nomenclature_item_id;

        """
        params = [
            self.from_date,
            self.to_date
        ]
        d = Database()
        rows = d.run_query(sql, params)
        if len(rows) > 0:
            for row in rows:
                delta_commodity = DeltaCommodity(row, "Close")
                self.delta_commodities.append(delta_commodity)
Exemplo n.º 21
0
def find_subdomains(domain, data):
    subdomains = set()
    js_urls = set()
    db = Database()
    for infos in data:
        jump_history = infos.get('history')
        req_url = infos.get('url')
        subdomains.update(find_in_history(domain, req_url, jump_history))
        rsp_html = db.get_resp_by_url(domain, req_url)
        if not rsp_html:
            logger.log(
                'DEBUG',
                f'an abnormal response occurred in the request {req_url}')
            continue
        subdomains.update(find_in_resp(domain, req_url, rsp_html))
        js_urls.update(find_js_urls(domain, req_url, rsp_html))

    req_data = convert_to_dict(js_urls)
    resp_data = request.bulk_request(domain, req_data, ret=True)
    while not resp_data.empty():
        _, resp = resp_data.get()
        if not isinstance(resp, Response):
            continue
        text = utils.decode_resp_text(resp)
        subdomains.update(find_in_resp(domain, resp.url, text))
    return subdomains
    def __init__(self,
                 elem,
                 goods_nomenclature_description_period_sid,
                 goods_nomenclature_sid,
                 goods_nomenclature_item_id,
                 productline_suffix,
                 import_file,
                 transform_only=False):
        Master.__init__(self, elem)
        self.goods_nomenclature_description_period_sid = goods_nomenclature_description_period_sid
        self.goods_nomenclature_sid = goods_nomenclature_sid
        self.goods_nomenclature_item_id = goods_nomenclature_item_id
        self.productline_suffix = productline_suffix
        self.description = Master.process_null(elem.find("description"))
        self.language_id = Master.process_null(
            elem.find("language/languageId"))
        operation_date = g.app.get_timestamp()

        if transform_only is False:
            sql = """
            insert into goods_nomenclature_descriptions_oplog
            (goods_nomenclature_description_period_sid, goods_nomenclature_sid,
            goods_nomenclature_item_id, productline_suffix, language_id, description,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.goods_nomenclature_description_period_sid,
                self.goods_nomenclature_sid, self.goods_nomenclature_item_id,
                self.productline_suffix, self.language_id, self.description,
                self.operation, operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)
Exemplo n.º 23
0
    def __init__(self,
                 elem,
                 certificate_description_period_sid,
                 certificate_type_code,
                 certificate_code,
                 import_file,
                 transform_only=False):
        Master.__init__(self, elem)
        self.certificate_description_period_sid = certificate_description_period_sid
        self.certificate_type_code = certificate_type_code
        self.certificate_code = certificate_code
        self.description = Master.process_null(elem.find("description"))
        self.language_id = Master.process_null(
            elem.find("language/languageId"))
        operation_date = g.app.get_timestamp()

        g.app.print_only(
            "Running operation {0} on certificate descrition {1}.".format(
                self.operation, str(self.certificate_description_period_sid)))

        if transform_only is False:
            sql = """
            insert into certificate_descriptions_oplog
            (certificate_description_period_sid, certificate_type_code, certificate_code, language_id, description,
            operation, operation_date, created_at, filename)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
            """
            params = [
                self.certificate_description_period_sid,
                self.certificate_type_code, self.certificate_code,
                self.language_id, self.description, self.operation,
                operation_date, operation_date, import_file
            ]
            d = Database()
            d.run_query(sql, params)
Exemplo n.º 24
0
def export(table, db=None, valid=None, dpath=None, format='csv', show=False):
    """
    OneForAll数据库导出模块

    Example:
        python3 dbexport.py --table name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --table name --show False

    Note:
        参数port可选值有'small', 'medium', 'large', 'xlarge',详见config.py配置
        参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
                          'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
        参数dpath为None默认使用OneForAll结果目录

    :param str table:   要导出的表
    :param str db:      要导出的数据库路径(默认为results/result.sqlite3)
    :param int valid:   导出子域的有效性(默认None)
    :param str format:  导出格式(默认csv)
    :param str dpath:    导出目录(默认None)
    :param bool show:   终端显示导出数据(默认False)
    """
    format = utils.check_format(format)
    dpath = utils.check_dpath(dpath)
    database = Database(db)
    rows = database.export_data(table, valid)  # 意外情况导出全部子域
    if show:
        print(rows.dataset)
    if format == 'txt':
        data = str(rows.dataset)
    else:
        data = rows.export(format)
    database.close()
    fpath = dpath.joinpath(f'{table}_subdomain.{format}')
    utils.save_data(fpath, data)
Exemplo n.º 25
0
def export(table, db=None, valid=None, path=None, format='csv', show=False):
    """
    OneForAll数据库导出模块

    Example:
        python3 dbexport.py --table name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --table name --show False

    Note:
        参数port可选值有'small', 'medium', 'large', 'xlarge',详见config.py配置
        参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
                          'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
        参数path默认None使用OneForAll结果目录生成路径

    :param str table:   要导出的表
    :param str db:      要导出的数据库路径(默认为results/result.sqlite3)
    :param int valid:   导出子域的有效性(默认None)
    :param str format:  导出文件格式(默认csv)
    :param str path:    导出文件路径(默认None)
    :param bool show:   终端显示导出数据(默认False)
    """

    database = Database(db)
    rows = database.export_data(table, valid)
    format = utils.check_format(format, len(rows))
    path = utils.check_path(path, table, format)
    if show:
        print(rows.dataset)
    if format == 'txt':
        data = str(rows.dataset)
    else:
        data = rows.export(format)
    database.close()
    utils.save_data(path, data)
Exemplo n.º 26
0
def export(table, db=None, valid=False, limit=None, path=None, format='csv', show=False):
    """
    OneForAll数据库导出模块

    Example:
        python3 dbexport.py --table name --format csv --dir= ./result.csv
        python3 dbexport.py --db result.db --table name --show False

    Note:
        参数format可选格式有'txt', 'rst', 'csv', 'tsv', 'json', 'yaml', 'html',
                          'jira', 'xls', 'xlsx', 'dbf', 'latex', 'ods'
        参数path默认None使用OneForAll结果目录自动生成路径

    :param str table:   要导出的表
    :param str db:      要导出的数据库路径(默认为results/result.sqlite3)
    :param bool valid:  只导出有效的子域结果(默认False)
    :param str limit:   导出限制条件(默认None)
    :param str format:  导出文件格式(默认csv)
    :param str path:    导出文件路径(默认None)
    :param bool show:   终端显示导出数据(默认False)
    """

    database = Database(db)
    rows = database.export_data(table, valid, limit)
    format = utils.check_format(format, len(rows))
    path = utils.check_path(path, table, format)
    if show:
        print(rows.dataset)
    data = rows.export(format)
    database.close()
    utils.save_data(path, data)
    logger.log('INFOR', f'{table}主域的子域结果 {path}')
    data_dict = rows.as_dict()
    return data_dict
Exemplo n.º 27
0
 def test_06_pay_order(self):
     """支付订单"""
     "先查看未支付订单"
     unpaid_data = {"session": self.setUp(), "type": "await_pay", "pagination": {"count": 10, "page": 1}}
     "获取未支付订单中的order_id"
     order_ids = Unpaid_order_interface().get_order_ids(unpaid_data)
     "随机获取一个order_id"
     random_num = random.randint(0, len(order_ids)-1)
     print(random_num)
     pay_order_id = order_ids[random_num]
     print(pay_order_id)
     "把随机获取的order_id传入pay_data中"
     pay_data={"session":self.setUp(),"order_id":pay_order_id}
     "支付订单"
     Pay_order().pay_order(pay_data)
     """连接数据库"""
     database = Database(host="ecshop.itsoso.cn", user="******", password="******", database="ecshop",
                         charset='utf8', port=3306)
     sql = "select * from ecs_order_info where user_id=11402 and pay_status=2"
     order_id_db = database.readall(sql=sql)
     print(order_id_db)
     db_orderid = get_keywords(order_id_db, "order_id")
     print(db_orderid)
     """断言"""
     if pay_order_id in db_orderid:
         self.assertTrue(True)
     else:
         self.assertTrue(False)
Exemplo n.º 28
0
 def __init__(self,
              elem,
              footnote_description_period_sid,
              footnote_type_id,
              footnote_id,
              import_file,
              transform_only=False):
     Master.__init__(self, elem)
     self.footnote_description_period_sid = footnote_description_period_sid
     self.footnote_type_id = footnote_type_id
     self.footnote_id = footnote_id
     self.description = Master.process_null(elem.find("description"))
     self.language_id = Master.process_null(
         elem.find("language/languageId"))
     operation_date = g.app.get_timestamp()
     if transform_only is False:
         sql = """
         insert into footnote_descriptions_oplog
         (footnote_description_period_sid, footnote_type_id, footnote_id, language_id, description,
         operation, operation_date, created_at, filename)
         VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
         """
         params = [
             self.footnote_description_period_sid, self.footnote_type_id,
             self.footnote_id, self.language_id, self.description,
             self.operation, operation_date, operation_date, import_file
         ]
         d = Database()
         d.run_query(sql, params)
Exemplo n.º 29
0
 def deal_db(self):
     """
     Process the data when the collection task is completed
     """
     db = Database()
     db.deal_table(self.domain, self.origin_table)
     db.close()
Exemplo n.º 30
0
    def request(self):
        with Database() as session:
            with Browser() as browser_session:
                url = self.url(Category.INVOICE.value)
                loop = True
                while loop:
                    try:
                        response = browser_session.get(url)
                        response.raise_for_status()
                        soup = bs4.BeautifulSoup(response.content,
                                                 'html.parser')

                        elements = soup.select(
                            '#dokumenty table.tabulka tr:not(.hlavicka)')

                        if len(elements) == 0:
                            LOGGER.info('Done, no more invoices')
                            return

                        for element in elements:
                            published, _, title, _, _, _, document = element.findChildren(
                                'td')
                            link = document.findChild('a').attrs.get('href')
                            size_in_mb = re.search(r'([0-9\.]+)',
                                                   document.text).groups()[0]
                            is_pdf = re.search(r'\.pdf$', url)
                            if is_pdf:
                                model, created = session.get_or_create(
                                    Invoice,
                                    published=datetime.date.fromisoformat(
                                        published.text),
                                    title=title.text,
                                    url=link,
                                    size_in_mb=size_in_mb)
                                if not created:
                                    LOGGER.info(
                                        f'Invoice {model.url} ...skipped (duplicate)'
                                    )
                                    loop = False
                                else:
                                    LOGGER.info(f'{model.url} ...added')
                            else:
                                LOGGER.warning(
                                    f'Invoice {model.url} ...skipped (not PDF)'
                                )
                        next_url = soup.select_one(
                            '#dokumenty table:first-of-type [align="right"] a:nth-last-child(2)'
                        ).attrs.get('href')
                        next_url = urljoin(self.base_url(response.url),
                                           next_url)

                        # FIXME: first page can be w/o the page number
                        if next_url == url:
                            return
                        url = next_url
                    except requests.exceptions.HTTPError as exc:
                        LOGGER.warning('Scraping {} {} ...skipping'.format(
                            url, exc.response.status_code))
                        raise exc